Docker Registry——搭建專屬的容器倉庫
題記
一般情況下,如果我們的計算機在聯網環境下,我們就可以直接通過docker pull images獲得相關的映象,當然這必須是聯網環境,根據使用者的網速情況或者映象的大小有不同的等待,如果我們能夠在本地建立一個類似與遠端聯網的映象倉庫,將我們常用的映象都放在自己管理的專屬倉庫,豈不是無需等待,即可快速獲得我們希望得到的映象麼.
Docker Registry就是完成搭建本地容器倉庫,簡單來說就是講一個專門的伺服器作為映象倉庫,啟用一個Docker Registry容器例項提供服務。
如上圖所示,我們將伺服器192.168.12.132作為容器倉庫,它應該有一個或者兩個網絡卡,一個可以連線網際網路,隨時下載或者我們自己生成相關docker映象,然後通過另外一個容器互聯的網路進行分發,其他宿主機可以快速獲得映象倉庫裡面的映象。
下面我們就看一下如何搭建專屬的容器倉庫。
1、由於我們啟用的registry服務不是安全可信賴的,所以我們需要在所有參與的物理伺服器新增可信引數,具體在/etc/default/docker檔案,新增相關引數:--insecure-registry 192.168.12.132:5000
DOCKER_OPTS="-H 0.0.0.0:2375 -H unix:///var/run/docker.sock --insecure-registry 192.168.12.132:5000"
當然,任何希望能夠從容器倉庫獲得映象的伺服器也需要修改相關檔案,新增如上資訊即可。
重啟docker服務
service docker restart
2、從docker hub下載docker registry映象,然後啟動,執行如下命令
docker run -d -v /root/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:2.3.0
上述命令就是啟動一個registry:2.3.0版本的映象例項,如果本地沒有,需要下載,Registry服務預設會將上傳的映象儲存在容器的/var/lib/registry,我們將主機的/root/registry目錄掛載到該目錄,即可實現將映象儲存到主機的/root/registry目錄了。預設registry的埠為5000,如果該埠被佔用可以更換其他未佔用的埠。[email protected]:~# docker run -d -v /root/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:2.3.0 Unable to find image 'registry:2.3.0' locally 2.3.0: Pulling from library/registry fdd5d7827f33: Pull complete a3ed95caeb02: Pull complete a79b4a92697e: Pull complete 1881c09fc734: Pull complete 0f24f5ab4e03: Pull complete Digest: sha256:5b6211cc1aa81916042ef0784ab8c8c2ce745f9dd851a67b2d80bf52a7f1c3c3 Status: Downloaded newer image for registry:2.3.0 cf11bef3fc9dc5262d10797222dc3412433adf47de470350d15d1956df0b644c
設定重啟策略:使用在Docker run的時候使用--restart引數來設定。
no - container不重啟
on-failure - container推出狀態非0時重啟
always - 始終重啟
然後我們就可以檢視docker執行狀態以及映象情況
[email protected]:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
swarm latest a180b24e38ed 4 weeks ago 19.34 MB
docker/ucp-proxy 1.1.1 354629dc8529 5 weeks ago 17.43 MB
docker/ucp-cfssl 1.1.1 3b3684098101 5 weeks ago 53.61 MB
docker/ucp latest 40fe8a8c618e 5 weeks ago 20.49 MB
docker/ucp-auth 1.1.1 7b0a22fd86df 5 weeks ago 26.82 MB
docker/ucp-controller 1.1.1 c1ada015cdb4 5 weeks ago 26.23 MB
docker/ucp-etcd 1.1.1 cb7711a7fea2 5 weeks ago 35.31 MB
docker/ucp-compose 1.1.1 c6565efb4f69 5 weeks ago 58.61 MB
docker/ucp-auth-store 1.1.1 4fbf8982055b 5 weeks ago 57.78 MB
docker/ucp-swarm 1.1.1 7a1bcedacf02 5 weeks ago 19.34 MB
docker/ucp-dsinfo 1.1.1 782b4aca1228 7 weeks ago 68.51 MB
ubuntu 14.04 b72889fa879c 12 weeks ago 188 MB
registry 2.3.0 5eaced67751b 4 months ago 165.7 MB
[email protected]:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cf11bef3fc9d registry:2.3.0 "/bin/registry /etc/d" About a minute ago Up About a minute 0.0.0.0:5000->5000/tcp registry
接下來我們需要通過http://192.168.12.132:5000/v2來判斷registry服務是否正常啟動,如果出現“{}”既可以說明服務執行正常。
注意:如果你先進行docker pull registry操作,系統會下載一個latest版本的映象,然後通過同樣的命令啟用:docker run -d -v /root/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest,雖然例項啟動了,但是服務還是不能正常執行。
3、我們可以看到,132本地映象有一個ubuntu映象,我們修改下相關的tag,讓他的標記更加的明顯
[email protected]:~# docker tag ubuntu:14.04 192.168.12.132:5000/ubuntu:14.04
[email protected]:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
swarm latest a180b24e38ed 4 weeks ago 19.34 MB
docker/ucp-proxy 1.1.1 354629dc8529 5 weeks ago 17.43 MB
docker/ucp-cfssl 1.1.1 3b3684098101 5 weeks ago 53.61 MB
docker/ucp latest 40fe8a8c618e 5 weeks ago 20.49 MB
docker/ucp-auth 1.1.1 7b0a22fd86df 5 weeks ago 26.82 MB
docker/ucp-controller 1.1.1 c1ada015cdb4 5 weeks ago 26.23 MB
docker/ucp-etcd 1.1.1 cb7711a7fea2 5 weeks ago 35.31 MB
docker/ucp-compose 1.1.1 c6565efb4f69 5 weeks ago 58.61 MB
docker/ucp-auth-store 1.1.1 4fbf8982055b 5 weeks ago 57.78 MB
docker/ucp-swarm 1.1.1 7a1bcedacf02 5 weeks ago 19.34 MB
docker/ucp-dsinfo 1.1.1 782b4aca1228 7 weeks ago 68.51 MB
192.168.12.132:5000/ubuntu 14.04 b72889fa879c 12 weeks ago 188 MB
ubuntu 14.04 b72889fa879c 12 weeks ago 188 MB
registry 2.3.0 5eaced67751b 4 months ago 165.7 MB
registry latest bca04f698ba8 5 months ago 422.9 MB
我們看到ubuntu的映象已經修改了。
4、將ubuntu映象push到映象倉庫中
[email protected]:~# docker push 192.168.12.132:5000/ubuntu:14.04
The push refers to a repository [192.168.12.132:5000/ubuntu]
5f70bf18a086: Pushed
f75f146a5022: Pushed
711b0bd2cb6a: Pushed
595d1d53a534: Pushed
14.04: digest: sha256:f92c2bec713942c44219e8bd513c255543c9acda764ccabbe3f940eca696e97e size: 1151
5、還記得我們已經將映象倉庫的目錄掛載到本地/root/registry,我們檢視相關目錄,檢視一下相關的映象檔案。
[email protected]:~# cd /root/
.cache/ registry/
[email protected]:~# cd /root/registry/docker/registry/v2/
blobs/ repositories/
[email protected]:~# cd /root/registry/docker/registry/v2/repositories/
[email protected]:~/registry/docker/registry/v2/repositories# ls
ubuntu
我們看到,ubuntu映象檔案已經儲存到該目錄下
6、接下來,我們只需要確認其他容器伺服器的/etc/default/docker檔案新增registry可信選項,我們就可以通過docker pull命令下載相關映象了。
[email protected]:~# docker images
REPOSITORY TAG IMAGE ID CREATED
swarm latest a180b24e38ed 4 weeks ago
[email protected]:~# docker pull 192.168.12.132:5000/ubuntu:14.04
14.04: Pulling from ubuntu
759d6771041e: Pull complete
8836b825667b: Pull complete
c2f5e51744e6: Pull complete
a3ed95caeb02: Pull complete
Digest: sha256:f92c2bec713942c44219e8bd513c255543c9acda764ccabbe3f940eca696e97e
Status: Downloaded newer image for 192.168.12.132:5000/ubuntu:14.04
[email protected]:~# docker images
REPOSITORY TAG IMAGE ID CREATED
swarm latest a180b24e38ed 4 weeks ago
192.168.12.132:5000/ubuntu 14.04 b72889fa879c 12 weeks ag
當然,都是本地連線,下載速度自然可以得到保障。
上圖我們也可以看到,我們的映象檔案可以儲存在本地,也可以通過分散式儲存軟體,我們可以將映象儲存在glusterFS,Ceph,或者OpenStack的Swift。