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

泊坞历史的注册表,命令

现在使用下面的命令启动仓库容器

[root@docker-repo ~]# docker run -dit -p 5000:5000 --name registry registry
bf8e703b0149211bb923beeb042f8e656bf407b21646f101eb58e0acd4409c24
[root@docker-repo ~]#

上面的命令将启动具有名称 registry 的仓库容器,并且我们还设置了端口转发规则,以便如果任何请求在5000端口上发送到“ docker-repo.example.com ”,则请求将被重定向到5000端口上的注册表容器。

[root@docker-repo ~]# 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
[root@docker-repo ~]#

注意:如果您的专用注册表服务器上启用了防火墙,请使用以下命令打开80/5000端口

[root@docker-repo ~]# firewall-cmd --permanent --add-port=80/tcp
success
[root@docker-repo ~]# firewall-cmd --permanent --add-port=5000/tcp
success
[root@docker-repo ~]# firewall-cmd --reload
success
[root@docker-repo ~]#

 

步骤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的名称,示例如下所示

[root@dkengine1 ~]# docker tag ubuntu:16.04 docker-repo.example.com:5000/ubuntu:16.04 
[root@dkengine1 ~]#
  • 将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服务

[root@dkengine1 ~]#systemctl daemon-reload
[root@dkengine1 ~]#systemctl restart docker
[root@dkengine1 ~]#

现在使用under命令将映像上载到私有仓库服务器

[root@dkengine1 ~]# 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
[root@dkengine1 ~]#

步骤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服务

[root@dkengine2 ~]# systemctl daemon-reload ; systemctl restart docker
[root@dkengine2 ~]#

现在使用 docker pull 命令下载Container图像

[root@dkengine2 ~]# 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
[root@dkengine2 ~]#

现在使用' docker images '命令验证图像

[root@dkengine2 ~]# docker images
REPOSITORY                            TAG                 IMAGE ID            CREATED             SIZE
docker-repo.example.com:5000/ubuntu   16.04               0ef2e08ed3fa        3 weeks ago         130 MB
[root@dkengine2 ~]#

这一切都来自这篇文章。我希望你们知道如何设置自己的Docker Private Registry Server。如果你喜欢这篇文章,请不要犹豫分享。

猜你喜欢

转载自blog.csdn.net/Aria_Miazzy/article/details/84928409