1. 程式人生 > >Docker Registry——搭建專屬的容器倉庫

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

[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
上述命令就是啟動一個registry:2.3.0版本的映象例項,如果本地沒有,需要下載,Registry服務預設會將上傳的映象儲存在容器的/var/lib/registry,我們將主機的/root/registry目錄掛載到該目錄,即可實現將映象儲存到主機的/root/registry目錄了。預設registry的埠為5000,如果該埠被佔用可以更換其他未佔用的埠。

設定重啟策略:使用在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。