如何在CentOS 7.x / RHEL 7.x上搭建Docker Private Registry(Docker私有倉庫)
原作者:Pradeep Kumar 轉載來源:https://www.linuxtechi.com/setup-docker-private-registry-centos-7-rhel-7/
如何在CentOS 7.x / RHEL 7.x上設定Docker Private Registry
每當我們在CentOS或RHEL伺服器上安裝Docker時,Docker都會啟用公共倉庫,因此當我們執行“ docker pull ”或“ docker search ”命令時,它將轉到Docker公共倉庫(Docker Hub
在本文中,我將演示如何在CentOS 7.x / RHEL 7.x上設定我們自己的Docker私有倉庫。我將使用三個CentOS 7.x伺服器並假設已經安裝了docker,並且它的服務已在所有三臺伺服器上啟動並執行。以下是我的三臺伺服器的詳細資訊:
- docker-repo.example.com {192.168.0.60} - >它將充當我的Docker私有Registry Server
- dkengine1.example.com {192.168.0.70} - >在此伺服器上Docker管理員和開發人員將使用dockerfile或compose建立自己的容器映像,然後他們將這些映像上傳到他們自己的docker私有倉庫伺服器(docker-repo.example.com)與docker push命令
- dkengine2.example.com {192.168.0.80} - >在此伺服器上,我們將使用' docker pull '命令從我們自己的私有倉庫伺服器下載docker容器映像
注意:如果未配置DNS伺服器,請更新/etc/hosts檔案,以便可以使用各自的主機名或DNS名稱訪問伺服器。
192.168.0.60 docker-repo.example.com docker-repo
192.168.0.70 dkengine1.example.com dkengine1
192.168.0.80 dkengine2.example.com dkengine2
按照上面討論的方案執行以下步驟來設定我們自己的Docker Private Registry
步驟1:在您的私有倉庫伺服器上下載並啟動Registry容器
登入到您要配置為Docker Private Registry Server的伺服器,在我的例子中是“docker-repo.example.com”。我假設已經安裝了Docker軟體包並且其服務已啟動並正在執行。如果未安裝Docker,請參閱如何在CentOS 7.x上安裝Docker。
下一個任務是啟動程式或指令碼,該程式或指令碼將配置並使您的伺服器成為Registry Server。該程式或指令碼是通過執行docker倉庫容器啟動的。讓我們首先使用 docker pull 命令下載倉庫容器
$ sudo docker pull registry
下載映像後,確認在啟動 registry 容器映像時將執行哪些命令。
$ sudo docker history registry
現在使用下面的命令啟動倉庫容器
[[email protected] ~]# docker run -dit -p 5000:5000 --name registry registry
bf8e703b0149211bb923beeb042f8e656bf407b21646f101eb58e0acd4409c24
[[email protected] ~]#
上面的命令將啟動具有名稱 registry 的倉庫容器,並且我們還設定了埠轉發規則,以便如果任何請求在5000埠上傳送到“ docker-repo.example.com ”,則請求將被重定向到5000埠上的登錄檔容器。
[[email protected] ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bf8e703b0149 registry "/entrypoint.sh /e..." 5 minutes ago Up 5 minutes 0.0.0.0:5000->5000/tcp registry
[[email protected] ~]#
注意:如果您的專用登錄檔伺服器上啟用了防火牆,請使用以下命令開啟80/5000埠
[[email protected] ~]# firewall-cmd --permanent --add-port=80/tcp
success
[[email protected] ~]# firewall-cmd --permanent --add-port=5000/tcp
success
[[email protected] ~]# firewall-cmd --reload
success
[[email protected] ~]#
步驟2:建立Docker Container Image並將其上載到Private Registry Server
假設我在' dkengine1.example.com ' 上使用Dockerfile構建了Ubuntu 16.04 docker容器映像。如果您不熟悉dockerfile,請參閱以下內容:如何使用Dockerfile構建Docker容器映像。
我們可以使用“docker push”命令將容器映像上傳到 registry 伺服器,但在開始上傳之前,我們進行了兩次更改:
- 確保使用“ servername:portnumber/imagename:tags ” 格式建立映像名稱。預設情況下,docker pull命令會嘗試在公共登錄檔中上傳影象,如果我們使用上面提到的格式建立影象名稱,則docker pull命令會將其上傳到影象名稱中提到的伺服器。所以在我的情況下伺服器名稱將是“docker-repo.example.com”
要使用docker tag命令更改docker image的名稱,示例如下所示
[[email protected] ~]# docker tag ubuntu:16.04 docker-repo.example.com:5000/ubuntu:16.04
[[email protected] ~]#
- 將docker push https連線更改為http。每當我們使用'docker push'命令時,它將嘗試與登錄檔伺服器建立https連線,但是在私有登錄檔伺服器設定的情況下,它只接受來自客戶端的http連線(dkengine1.example.com)
編輯 file “/usr/lib/systemd/system/docker.service” 並改變引數
ExecStart=/usr/bin/dockerd
改為:
ExecStart=/usr/bin/dockerd –insecure-registry docker-repo.example.com:5000
重新載入守護程式服務並重新啟動Docker服務
[[email protected] ~]#systemctl daemon-reload
[[email protected] ~]#systemctl restart docker
[[email protected] ~]#
現在使用under命令將映像上載到私有倉庫伺服器
[[email protected] ~]# docker push docker-repo.example.com:5000/ubuntu:16.04
The push refers to a repository [docker-repo.example.com:5000/ubuntu]
56827159aa8b: Pushed
440e02c3dcde: Pushed
29660d0e5bb2: Pushed
85782553e37a: Pushed
745f5be9952c: Pushed
16.04: digest: sha256:6b079ae764a6affcb632231349d4a5e1b084bece8c46883c099863ee2aeb5cf8 size: 1357
[[email protected] ~]#
步驟3:從Private Registry Server下載Docker Container映像
登入到'dkengine2.example.com'伺服器並使用'docker pull'命令從您的私人倉庫伺服器下載容器影象。預設情況下,docker pull命令還使https與倉庫伺服器連線,但我們的私有倉庫僅接受http連線。
編輯檔案“/usr/lib/systemd/system/docker.service”並更改引數
ExecStart=/usr/bin/dockerd
改為:
ExecStart=/usr/bin/dockerd –insecure-registry docker-repo.example.com:5000
重新載入守護程式服務並重新啟動docker服務
[[email protected] ~]# systemctl daemon-reload ; systemctl restart docker
[[email protected] ~]#
現在使用 docker pull 命令下載Container影象
[[email protected] ~]# docker pull docker-repo.example.com:5000/ubuntu:16.04
16.04: Pulling from ubuntu
fec6b243e075: Pull complete
190e0e9a3e79: Pull complete
0d79cf192e4c: Pull complete
38398c307b51: Pull complete
356665655a72: Pull complete
Digest: sha256:6b079ae764a6affcb632231349d4a5e1b084bece8c46883c099863ee2aeb5cf8
Status: Downloaded newer image for docker-repo.example.com:5000/ubuntu:16.04
[[email protected] ~]#
現在使用' docker images '命令驗證影象
[[email protected] ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker-repo.example.com:5000/ubuntu 16.04 0ef2e08ed3fa 3 weeks ago 130 MB
[[email protected] ~]#
這一切都來自這篇文章。我希望你們知道如何設定自己的Docker Private Registry Server。如果你喜歡這篇文章,請不要猶豫分享。