使用docker私有倉庫

因爲網速和大中華局域網效果,使得咱們在DockerHub下載鏡像的速度很慢,甚至一些國內的鏡像倉庫,也感受速度不是很好。因此,頗有必要在本地或者一個咱們訪問很快速的地方(本身的雲服務器)搭建一套鏡像倉庫。有了這樣一個倉庫,不只能夠提升下載速度,並且能夠增長咱們個性化定製的鏡像,以備後續使用。這篇將介紹怎樣搭建本地鏡像。mysql

一、運行docker倉庫容器

環境準備 環境:兩個裝有Docker的Ubuntu虛擬機sql

  • 虛擬機一:192.168.112.132 用戶開發機
  • 虛擬機二:192.168.112.136 用做私有倉庫

備註:也可使用一臺直接在開發機器上安裝私有倉庫docker

此處咱們準備了兩個虛擬機,分別都安裝了Docker,其中132機器用做開發機,136機器用做registry私有倉庫機器。環境準備好以後接下來咱們就開始搭建私有鏡像倉庫。json

搭建私有倉庫安全

首先在136機器上下載registry鏡像,這裏我指定了tag爲2bash

$ docker pull registry:2
2: Pulling from library/registry
c87736221ed0: Pull complete 
1cc8e0bb44df: Pull complete 
54d33bcb37f5: Pull complete 
e8afc091c171: Pull complete 
b4541f6d3db6: Pull complete 
Digest: sha256:8004747f1e8cd820a148fb7499d71a76d45ff66bac6a29129bfdbfdc0154d146
Status: Downloaded newer image for registry:2
docker.io/library/registry:2
複製代碼

此過程會持續幾分鐘,視網絡情況而定,請讀者耐心等候。服務器

注意:筆者在pull的時候,指定了TAG,即爲使用v2版本的registry,對於v1版本的registry,讀者大可沒必要在乎了,基本上是淘汰了。網絡

下載完以後咱們經過該鏡像啓動一個容器curl

$ docker run -d -p 5000:5000 registry:2
facbef4cddad45676efd27385deb0cc1d7bfef378bee07993b926de8c97c3abb
複製代碼

默認狀況下,會將倉庫存放於容器的/tmp/registry目錄下,這樣若是容器被刪除,則存放於容器中的鏡像也會丟失,因此咱們通常狀況下會指定本地一個目錄掛載到容器的/tmp/registry下,以下:tcp

$ docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry:2
複製代碼

這是一條典型的run命令,不出意外的話,Registry就在5000端口啓動了。使用下面命令查看

$ docker ps
CONTAINER ID        IMAGE                             COMMAND                  CREATED             STATUS              PORTS                    NAMES
facbef4cddad        registry:2                        "/entrypoint.sh /etc…"   53 seconds ago      Up 50 seconds       0.0.0.0:5000->5000/tcp   exciting_kalam
複製代碼

能夠看到咱們啓動了一個容器,地址爲:192.168.112.136:5000

接下來咱們就要操做把一個本地鏡像push到私有倉庫中 在132機器下pull一個比較小的鏡像來測試(此處使用的是busybox)

$ docker pull busybox
Using default tag: latest
latest: Pulling from library/busybox
Digest: sha256:9f1003c480699be56815db0f8146ad2e22efea85129b5b5983d0e0fb52d9ab70
Status: Image is up to date for busybox:latest
docker.io/library/busybox:latest
複製代碼

接下來修改一下該鏡像的tag

$ docker tag busybox 192.168.112.136:5000/busybox
複製代碼

查看一下

$ docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
wordpress                  <none>              57d9b2fca364        6 days ago          501MB
mysql                      <none>              2151acc12881        6 days ago          445MB
192.168.112.136:5000/busybox     latest              db8ee88ad75f        10 days ago         1.22MB
busybox                    latest              db8ee88ad75f        10 days ago         1.22MB
複製代碼

接下來把打了tag的鏡像上傳到私服

$ docker push 192.168.112.136:5000/busybox
The push refers to repository [127.0.0.1:5000/busybox]
0d315111b484: Pushed 
latest: digest: sha256:895ab622e92e18d6b461d671081757af7dbaa3b00e3e28e12505af7817f73649 size: 527
複製代碼

二、修改通訊方式爲http

Registry官方鏡像爲了保證安全,缺省使用https進行通訊,畢竟在生產環境中若是使用了http,是很容易被中間人攻擊的。 測試環境中咱們能夠將通訊方式修改成http,生產環境強烈不建議這樣作。 修改/etc/docker/daemon.json文件,沒有則手動建立,在這個文件添加以下內容:

{
  "insecure-registries" : ["192.168.132.131:5000"]
}
複製代碼

重啓docker服務

$ systemctl daemon-reload
$ systemctl restart docker
複製代碼

獲取私有倉庫列表

$ curl -XGET http://192.168.112.136:5000/v2/_catalog
# 獲取httpd鏡像列表
$ curl -XGET http://192.168.112.136:5000/v2/httpd/tags/list
複製代碼
相關文章
相關標籤/搜索