1. 程式人生 > >如何在CentOS 7.x / RHEL 7.x上搭建Docker Private Registry(Docker私有倉庫)

如何在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

)並將獲取所需的容器映像。但是,當您在組織中使用Docker時,不想從公共倉庫中獲取Docker容器影象,為了最佳實踐,我們應該擁有自己的私有Docker倉庫或儲存庫。Docker Registry或儲存庫是儲存Docker容器映像的地方。

 

在本文中,我將演示如何在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。如果你喜歡這篇文章,請不要猶豫分享。