Docker私有仓库部署、管理、使用TLS生成证书、基本身份验证及详解内容与操作

目录

学习目标

介绍

私有仓库

搭建私有仓库

环境部署

自建仓库

修改主机名

拉取镜像

查看镜像

将仓库镜像运行为容器

测试 

推送镜像至仓库

拉取仓库镜像

使用TLS证书

基本身份验证

可视化私有仓库


学习目标

  • 了解Docker私有仓库
  • 部署私有仓库
  • 熟练使用私有仓库
  • 通过Web界面管理仓库

介绍

Docker仓库用于保存Docker镜像,分为公有仓库与私有仓库。公有仓库就是Docker Hub一类供所有Docker用户使用的Docker仓库。私有仓库指由个人或企业搭建的Docker仓库,供其自身使用,是非公开的。

下面对Docker私有仓库及其相关内容进行详解

私有仓库

Docker镜像通常保存在Docker Hub,Docker Hub(Docker HUb官网)是目前最大的Docker镜像公有仓库,由Docker官方人员进行维护,其中的镜像可供所有用户下载使用。

在生产环境中,通过公司会构建一些符合业务需求的镜像,这些镜像因为是商业机密而不得上传至Docker Hub,只能供公司内部人员使用。此时就需要再内网搭建一个Docker私有仓库,来存储公司内部的镜像,并确保内部人员表可以不受网络限制,快速地拉取或上传镜像。

镜像为Docker容器的运行基础,容器是镜像具体运行实例,镜像仓库为镜像提供了可靠的存储空间,镜像可以从公有或私有仓库拉取。如下图所示。

Docker仓库工作原理图
Docker仓库工作原理

搭建私有仓库

环境部署

私有镜像仓库在企业中有较高的使用率,因此私有仓库镜像仓库搭建技术显得尤为重要。下面将通过示例讲述私有镜像仓库的搭建方式与过程。

在做此操作前需要两台服务器,一个作为私有镜像仓库,另一个作为使用私有镜像仓库的Docker客户机,以Centos系统为例,安装并启动docker(IP请根据自己实际情况设置)

以下示例服务器信息
服务器名称IP地址功能
docker-01 192.168.153.129docker的私有仓库
docker-02192.168.153.128使用docker私有仓库的客户端

自建仓库

docker hub 为用户提供了完美的镜像仓库,使用docker hub中的仓库镜像运行私有仓库。

首先从docker hub 中拉取仓库镜像

修改主机名

[root@localhost ~]# hostnamectl set-hostname docker01

[root@localhost ~]# bash

拉取镜像

[root@docker01 ~]# docker pull registry

Using default tag: latest

latest: Pulling from library/registry

91d30c5bc195: Downloading

65d52c8ad3c4: Download complete

54f80cd081c9: Download complete

ca8951d7f653: Download complete

5ee46e9ce9b6: Download complete

Digest: sha256:8c51be2f669c82da8015017ff1eae5e5155fcf707ba914c5c7b798fbeb03b50c

Status: Downloaded newer image for registry:latest docker.io/library/registry:latest

查看镜像

成功拉取了docker仓库镜像

[root@docker01 ~]# docker images

REPOSITORY     TAG        IMAGE ID      CREATED         SIZE
registry      latest    8db46f9d7550   4 weeks ago     24.2MB

将仓库镜像运行为容器

下面将仓库镜像运行成容器

[root@docker01 ~]# docker run -itd -p 5000:5000 --restart=always --name registry registry 
c84fcbf93118ae7d198a4bbdbed6cb1f31cc853e724521e31ae5cc788ca5c9d0 
#将镜像运行成了仓库容器,并映射了宿主机的5000端口,供docker镜像的上传与下载。其中,--restart=always表示容器停止时自动重启, 这条参数常用于生产环境中。

测试 

#将镜像上传至刚刚创建的镜像仓库,拉取一个busybox镜像作为上传测试使用

[root@docker01 ~]# docker pull busybox 
Using default tag: latest 
latest: Pulling from library/busybox 
4b35f584bb4f: Pull complete 
Digest: sha256:b5d6fe0712636ceb7430189de28819e195e8966372edfc2d9409d79402a0dc16 
Status: Downloaded newer image for busybox:latest docker.io/library/busybox:latest

查看镜像

[root@docker01 ~]# docker images 
REPOSITORY TAG    IMAGE ID      CREATED   SIZE 
registry latest 8db46f9d7550 4 weeks ago 24.2MB 
busybox  latest 7cfbbec8963d 6 weeks ago 4.86MB 

修改镜像的tag标签,并使其指向私有仓库

[root@docker01 ~]# docker tag busybox 192.168.153.129:5000/busybox:latest

推送镜像至仓库

尝试将镜像推送至私有仓库时,发生报错

[root@docker01 ~]# docker push 192.168.153.129:5000/busybox:latest 
The push refers to repository [192.168.153.129:5000/busybox] 
Get "https://192.168.153.129:5000/v2/": http: server gave HTTP response to HTTPS client

这是因为docker默认支持HTTPS(安全超文本传输协议),命令行中使用的是HTTP(超文本传输协议)。

修改docker启动的参数,使之允许以HTTP工作

[root@docker01 ~]# vi /usr/lib/systemd/system/docker.service

#修改配置文件,如以下代码所示,在ExecStart=/usr/bin/dockerd后添加
--insecure-registry 192.168.153.129:5000
也就是代码段 ExecStart=/usr/bin/dockerd --insecure-registry 192.168.153.129:5000

重启docker

[root@docker01 ~]# systemctl daemon-reload

[root@docker01 ~]# systemctl restart docker

继续尝试镜像推送至私有仓库

[root@docker01 ~]# docker push 192.168.153.129:5000/busybox:latest

The push refers to repository [192.168.153.129:5000/busybox]

baacf561cfff: Pushed

latest: digest: sha256:acaddd9ed544f7baf3373064064a51250b14cfe3ec604d65765a53da5958e5f5 size: 528

可以上面的回馈,推送镜像到私有仓库成功

以上示例成功将镜像推送到私有仓库

下面查看私有仓库的镜像,并拉取其中镜像

使用Curl工具查看,可以看到镜像仓库中有一个Busybox镜像

[root@docker01 ~]# curl -X GET http://192.168.153.129:5000/v2/_catalog

{"repositories":["busybox"]}

先查看本地的镜像

[root@docker01 ~]# docker images

REPOSITORY                       TAG        IMAGE ID       CREATED       SIZE
registry                       latest    8db46f9d7550   4 weeks ago     24.2MB
192.168.153.129:5000/busybox   latest    7cfbbec8963d   6 weeks ago     4.86MB
busybox                        latest    7cfbbec8963d   6 weeks ago     4.86MB

删除本地的BusyBox镜像 

[root@docker01 ~]# docker rmi busybox
Untagged: busybox:latest
Untagged: busybox@sha256:b5d6fe0712636ceb7430189de28819e195e8966372edfc2d9409d79402a0dc16
[root@docker01 ~]# docker rmi 192.168.153.129:5000/busybox
Untagged: 192.168.153.129:5000/busybox:latest
Untagged: 192.168.153.129:5000/busybox@sha256:acaddd9ed544f7baf3373064064a51250b14cfe3ec604d65765a53da5958e5f5
Deleted: sha256:7cfbbec8963d8f13e6c70416d6592e1cc10f47a348131290a55d43c3acab3fb9
Deleted: sha256:baacf561cfff825708763ce7ee4a18293716c533e6ece3bd39009a5fb3c804d2

再次查看本地镜像已经没有BusyBox镜像

[root@docker01 ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
registry      latest    8db46f9d7550   4 weeks ago     24.2MB

尝试从私有仓库拉取BusyBox镜像,拉取成功,因为是内部网络所以下载速度也很快

[root@docker01 ~]# docker pull 192.168.153.129:5000/busybox
Using default tag: latest
latest: Pulling from busybox
4b35f584bb4f: Pull complete
Digest: sha256:acaddd9ed544f7baf3373064064a51250b14cfe3ec604d65765a53da5958e5f5
Status: Downloaded newer image for 192.168.153.129:5000/busybox:latest
192.168.153.129:5000/busybox:latest

 查看本地镜像,验证

[root@docker01 ~]# docker images
REPOSITORY                     TAG       IMAGE ID       CREATED         SIZE
registry                       latest    8db46f9d7550   4 weeks ago     24.2MB
192.168.153.129:5000/busybox   latest    7cfbbec8963d   6 weeks ago     4.86MB

当其他宿主机上想要使用该仓库,只需要修改宿主机的docker启动参数配置文件,重启docker服务,即可拉取到仓库镜像

现在通过另一台宿主机拉取私有仓库镜像,先修改配置文件

#登录到另一台同网段宿主机
[root@docker02 ~]# vi /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd  --insecure-registry 192.168.153.129:5000 \
#注意:这里的IP是创建私有仓库服务器的IP地址,这样才可以访问到私有仓库#

重启docker服务,使配置生效

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

拉取仓库镜像

[root@docker02 ~]# docker pull 192.168.153.129:5000/busybox
Using default tag: latest
Trying to pull repository 192.168.153.129:5000/busybox ...
latest: Pulling from 192.168.153.129:5000/busybox
4b35f584bb4f: Pull complete
Digest: sha256:acaddd9ed544f7baf3373064064a51250b14cfe3ec604d65765a53da5958e5f5
Status: Downloaded newer image for 192.168.153.129:5000/busybox:latest

查看镜像,可以看到成功从私有仓库下载了BusyBox镜像

[root@docker02 ~]# docker images
REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
192.168.153.129:5000/busybox   latest              7cfbbec8963d        6 weeks ago         4.86 MB

以上示例成功从私有仓库下载BusyBox镜像

如此,一个简单的私有仓库就搭建好了,但安全系数较低,镜像保存在容器中,容器被删除后,私有仓库以及仓库中的镜像也会一并被删除,数据无法保存。

使用TLS证书

想让仓库对外提供服务,就需要配置用户认可的TLS(Transport Layer Security,传输层安全)证书,否则仓库将无法正常使用。目前很多代理商可以提供权威的证书,用户可以自行选择。

TLS是一种网络协议,它是SSL(Secure Sockets Layer,安全套接字层)协议的后继者。TLS协议用于在计算机网络上建立安全通信线路,防止被窃听和篡改。TLS协议提供了数据加密、认证和完整性保护等安全功能,以确保通信内容的隐私和安全。

TLS协议旨在为各种应用程序提供安全传输服务,例如Web浏览器和服务器之间的安全HTTP通信(HTTPS),电子邮件传输(SMTPS,POP3S和IMAPS),VoIP和VPN。它使用公开密钥加密(PKI)系统来建立安全连接,并通过数字证书对服务器进行身份验证。

TLS协议有多个版本,最新的版本是TLS 1.3,它在性能和安全方面都进行了改进。在今天的互联网中,TLS协议已成为保护数据传输安全的重要标准。

TLS是一种网络协议,它是SSL(Secure Sockets Layer,安全套接字层)协议的后继者。TLS协议用于在计算机网络上建立安全通信线路,防止被窃听和篡改。TLS协议提供了数据加密、认证和完整性保护等安全功能,以确保通信内容的隐私和安全。

TLS协议旨在为各种应用程序提供安全传输服务,例如Web浏览器和服务器之间的安全HTTP通信(HTTPS),电子邮件传输(SMTPS,POP3S和IMAPS),VoIP和VPN。它使用公开密钥加密(PKI)系统来建立安全连接,并通过数字证书对服务器进行身份验证。

TLS协议有多个版本,最新的版本是TLS 1.3,它在性能和安全方面都进行了改进。在今天的互联网中,TLS协议已成为保护数据传输安全的重要标准。

下面演示自行生成TLS证书的方式及过程

我们也要准备两台装有docker环境同网段的虚拟机,完成我们接下来的操作

#先创建证书存放路径
[root@docker-01 ~]# mkdir -p /opt/docker/registry/certs

使用OpenSSL工具生成私人证书文件

[root@docker-01 ~]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout /opt/docker/registry/certs/domain.key -x509 -days 365 -out /opt/docker/registry/certs/domain.crt
 Generating a 4096 bit RSA private key
..........................................................................................................................................................................................................++
............................................++
writing new private key to '/opt/docker/registry/certs/domain.key'
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
#输入两个字符的国家或地区名称
Country Name (2 letter code) [XX]:CN
#输入省份名字
State or Province Name (full name) []:jx
#输入城市名字
Locality Name (eg, city) [Default City]:fz
#输入公司名称
Organization Name (eg, company) [Default Company Ltd]:
#输入部门名称    
Organizational Unit Name (eg, section) []:
#输入证书名称    
Common Name (eg, your name or your server's hostname) []:registry.docker.com
#输入电子邮箱地址
Email Address []:

#选项
-x509指定
req来生成一个自签名的证书。
-days 365指定了证书的有效期是365天
#在生成证书时,要填写相关信息,如地址、姓名。可以参照上述操作,其余的可以直接回车

进入证书存放路径,可查看文件

[root@docker-01 ~]# cd /opt/docker/registry/certs/
[root@docker-01 certs]# ls
domain.crt  domain.key

创建带有TLS证书的仓库容器

#在创建时要注意的是,前面我们在创建私有仓库时容器端口也是5000,要先将前面容器删除,避免端口冲突导致报错

[root@docker-01 ~]# docker run -it -d --name registry-TLS -p 5000:5000 -v /opt/docker/registry/certs/:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key registry
d1cc4c248f7c515cc1069691b549aa60918ab9713bf7025fd2d1c775e605cf26

#以上创建了一个被命名为registry-TLS的容器,并通过REGISTRY_HTTP_TLS_CERTIFICATE和 REGISTRY_HTTP_TLS_KEY两个参数启用仓库的证书支持

在每一台Docker客户端宿主机上配置域名解析,使宿主机可以解析域名“registry.docker.com”,并在宿主机中创建名称与域名相同的目录

#注意:配置时IP地址都为创建私有仓库容器宿主机的IP地址
#docker1进行如下配置
[root@docker-01 ~]# vi /etc/hosts
192.168.200.132 registry.docker.com

#docker2进行如下配置
[root@docker-02 ~]# vi /etc/hosts
192.168.200.132 registry.docker.com

#两台机器均已做好解析
#接下来在docker2机器做如下操作
[root@docker-02 ~]# mkdir /etc/docker/certs.d
mkdir: 无法创建目录"/etc/docker/certs.d": 文件已存在
[root@docker-02 ~]# cd /etc/docker/certs.d
[root@docker-02 certs.d]# ls
redhat.com  redhat.io  registry.access.redhat.com
[root@docker-02 certs.d]# mkdir registry.docker.com:5000
[root@docker-02 certs.d]# ls
redhat.com  redhat.io  registry.access.redhat.com  registry.docker.com:5000

上面创建完目录后,将docker1主机的证书domain.crt复制到要使用仓库的Docker2宿主机,并存放到/etc/docker/certs.d/registry.docker.com:5000/目录下

[root@docker-01 certs.d]# scp -r -p /opt/docker/registry/certs/domain.crt 192.168.200.133:/etc/docker/certs.d/registry.docker.com:5000/ca.crt
The authenticity of host '192.168.200.133 (192.168.200.133)' can't be established.
ECDSA key fingerprint is SHA256:hNbJLkHf3qk4oN7JWbnYNYLLMYOC74ec2uSPjtpvJIs.
ECDSA key fingerprint is MD5:a8:78:88:c7:8f:09:a6:cd:1a:a0:73:63:d5:f3:5e:a3.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.200.133' (ECDSA) to the list of known hosts.
root@192.168.200.133's password:
domain.crt    

查看Docker2客户端宿主机是否有domain.crt证书文件

[root@docker-02 certs.d]# cd registry.docker.com\:5000/
[root@docker-02 registry.docker.com:5000]# ls
ca.crt

#可以看到已经传送过来了

Docker-01作为仓库宿主机,现在使用Docker-02推送镜像到私有仓库

修改镜像标签

[root@docker-02 ~]#  docker tag busybox:latest registry.docker.com:5000/busybox:latest

推送镜像

[root@docker-02 ~]#  docker push  registry.docker.com:5000/busybox:latest
The push refers to a repository [registry.docker.com:5000/busybox]
01fd6df81c8e: Pushed
latest: digest: sha256:62ffc2ed7554e4c6d360bce40bbcf196573dd27c4ce080641a2c59867e732dee size: 527

通过docker2主机查看私有仓库镜像,并通过-k选项关闭了curl对证书的验证

[root@docker-02 ~]# curl -X GET https://registry.docker.com:5000/v2/_catalog -k
{"repositories":["busybox"]}

注意,在默认情况下,TLS证书只支持基于域名访问,要使其支持IP地址访问,需要修改配置文件openssl.cnf。在CentOS 7系统中,文件所在的位置是/etc/pki/tls/openssl.cnf。在文件中的[ v3_ca ]部分添加subjectAltName选项

[root@docker-01 ~]# vi /etc/pki/tls/openssl.cnf
[ v3_ca  ]
subjectAltName = IP:192.168.200.132

保存退出后,重新生成证书即可使用。

基本身份验证

企业创建私有镜像仓库时,为防止信息泄露,通常会为仓库添加访问限制。实现访问限制的最简单的方法是基本身份验证。下面通过本机的基本身份验证,为仓库添加访问限制

注意:基本身份验证是基于TLS证书生成后的操作,也就是基于上述操作。如果上述操作没有操作则至需要重新使用openssl命令生成一下证书即可(可以查看上面的操作)。

下面开始配置基本身份验证,首先创建一个存放用户密码的目录

[root@docker-01 ~]# mkdir /opt/docker/registry/auth

安装httpd-tools

[root@docker-01 ~]# yum -y install httpd-tools
已安装:
httpd-tools.x86_64 0:2.4.6-98.el7.centos.7
完毕!

创建用户密码文件

#创建一个用户名为testuser,密码为的testpassword用户
[root@docker-01 ~]#  htpasswd -Bbn testuser testpassword > /opt/docker/registry/auth/htpasswd
#查看用户密码文件,用户后面的密码进行了加密
[root@docker-01 ~]# cat /opt/docker/registry/auth/htpasswd
testuser:$2y$05$gkGw2vOFgI3Y4NlGw2QWk.YebyGSDTKaguNisDcxMPI9PtSwCYeUq

运行仓库容器,并指定TLS证书与身份验证目录,此时如果先前运行了仓库容器需要先删除之前的容器,防止造成端口冲突,将凭据添加到注册表中。在这里,将auth目录挂载到容器中

[root@docker-01 ~]#  docker run -d -it --name registry-auth -p 5000:5000 -v /opt/docker/registry/auth/:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd -v /opt/docker/registry/certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key registry

创建完仓库容器后就已经是完成基本身份验证的配置了,现在我们做一个上传测试

首先我们还是要配置域名解析,并在宿主机中创建名称与域名相同的目录

[root@docker-01 ~]# vi /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.200.132 registry.docker.com

[root@docker-02 ~]# vi /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.200.132 registry.docker.com

[root@docker-02 ~]# mkdir /etc/docker/certs.d
mkdir: 无法创建目录"/etc/docker/certs.d": 文件已存在
[root@docker-02 ~]# cd /etc/docker/certs.d
[root@docker-02 certs.d]# mkdir registry.docker.com:5000
[root@docker-02 certs.d]# ls
redhat.com  redhat.io  registry.access.redhat.com  registry.docker.com:5000
[root@docker-02 certs.d]# cd registry.docker.com\:5000/
[root@docker-02 registry.docker.com:5000]# ls
ca.crt

将证书domain.crt复制到要使用仓库的Docker宿主机,并存放到/etc/docker/certs.d/registry.docker.com:5000/目录下

[root@docker-01 certs.d]# scp -r -p /opt/docker/registry/certs/domain.crt 192.168.200.133:/etc/docker/certs.d/registry.docker.com:5000/ca.crt
The authenticity of host '192.168.200.133 (192.168.200.133)' can't be established.
ECDSA key fingerprint is SHA256:hNbJLkHf3qk4oN7JWbnYNYLLMYOC74ec2uSPjtpvJIs.
ECDSA key fingerprint is MD5:a8:78:88:c7:8f:09:a6:cd:1a:a0:73:63:d5:f3:5e:a3.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.200.133' (ECDSA) to the list of known hosts.
root@192.168.200.133's password:
domain.crt                                                    100% 2000     3.5MB/s   00:00

[root@docker-02 certs.d]# cd registry.docker.com\:5000/
[root@docker-02 registry.docker.com:5000]# ls
ca.crt

使用docker2,尝试推送镜像,镜像推送失败,是因为没有基本身份验证凭据

[root@docker-02 registry.docker.com:5000]# docker tag busybox:latest registry.docker.com:5000/busybox:latest
[root@docker-02 registry.docker.com:5000]# docker push  registry.docker.com:5000/busybox:latest
The push refers to a repository [registry.docker.com:5000/busybox]
01fd6df81c8e: Preparing 
no basic auth credentials

我们再尝试通过用户名与密码登录

[root@docker-02 ~]# docker login registry.docker.com:5000
Username: testuser
Password: 
Login Succeeded

登录之后,再次推送镜像,就可以成功推送了

[root@docker-02 ~]# docker push  registry.docker.com:5000/busybox:latest
The push refers to a repository [registry.docker.com:5000/busybox]
01fd6df81c8e: Pushed 
latest: digest: sha256:62ffc2ed7554e4c6d360bce40bbcf196573dd27c4ce080641a2c59867e732dee size: 527

以上示例在登录用户身份之后成功推送镜像到私有仓库,则说明身份验证起到了防止信息泄露和保证安全的作用,基本身份验证完成!

可视化私有仓库

私有仓库虽然搭建十分简便,但使用起来还是不够方便,用户不能直观地看到仓库中的资源情况。本节将部署基础的UI(User Interface,用户界面)工具,使用户可以在Web界面直观地看到仓库中的镜像的版本等信息。

私有仓库的可视化需要UI工具hyper/docker-registry-web来支持实现,如此可以提高仓库的可读性。

下面我们开始部署

同样采用拉取镜像的方式运行hyper/docker-registry-web

[root@docker-01 ~]# docker pull hyper/docker-registry-web
#查看镜像,可以看到hyper/docker-registry-web 已经拉取到本地
[root@docker-01 ~]# docker images
REPOSITORY                            TAG                 IMAGE ID            CREATED             SIZE

docker.io/hyper/docker-registry-web   latest              0db5683824d8        6 years ago         599 MB

启动hyper/docker-registry-web 工具连接私有仓库

在此之前需要运行一个私有仓库,如果已经存在私有仓库就不需要运行

[root@docker-01 ~]# docker run -it -d -p 5000:5000 --restart=always --name registry registry
d3589351f920453c8c2829838e9b5b7b0ec0e4a83f5b4b2e274e46f23d53d971
#查看仓库容器
[root@docker-01 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
d3589351f920        registry            "/entrypoint.sh /e..."   7 seconds ago       Up 6 seconds        0.0.0.0:5000->5000/tcp   registry

启动hyper/docker-registry-web 工具连接刚刚创建的私有仓库

[root@docker-01 ~]# docker run -it -d --restart=always -p 8080:8080 --name registry-web --link registry -e REGISTRY_URL=http://192.168.200.132:5000/v2 -e REGISTRY_NAME=192.168.200.132:5000 hyper/docker-registry-web
be112b6471c1fd6863232ed44927cc0ab1e6b3a19cab2671e30df2ab86bd6f43
#以上就是已经启动了hyper/docker-registry-web 工具并连接了私有仓库,此时已经可以通过访问IP地址与端口号查看私有仓库的信息
#--link设置要连接的仓库容器,-e设置环境变量

拉取任意镜像到私有仓库中

首先在主机拉取一个镜像

[root@docker-01 ~]# docker pull centos
Using default tag: latest
Trying to pull repository docker.io/library/centos ...
latest: Pulling from docker.io/library/centos
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Image is up to date for docker.io/centos:latest

修改镜像标签

[root@docker-01 ~]# docker tag centos:latest 192.168.200.132:5000/centos:latest

修改Docker启动参数,使之允许以HTTP工作

[root@docker01 ~]# vi /usr/lib/systemd/system/docker.service
#修改配置文件,如以上代码所示,在ExecStart=/usr/bin/dockerd后添加--insecure-registry 192.168.153.129:5000代码段
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.200.132:5000

 重启docker

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

推送镜像到私有仓库

[root@docker-01 ~]# docker push 192.168.200.132:5000/centos
The push refers to a repository [192.168.200.132:5000/centos]
74ddd0ec08fa: Pushed
latest: digest: sha256:a1801b843b1bfaf77c501e7a6d3f709401a1e0c83863037fa3aab063a7fdb9dc size: 529
#推送成功
#再次修改其他镜像标签进行二次推送
[root@docker-01 ~]# docker tag registry:latest 127.0.0.1:5000/registry:latest

[root@docker-01 ~]# docker push 127.0.0.1:5000/registry
The push refers to a repository [127.0.0.1:5000/registry]
aeccf26589a7: Pushed
f640be0d5aad: Pushed
aa4330046b37: Pushed
ad10b481abe7: Pushed
69715584ec78: Pushed
latest: digest: sha256:36cb5b157911061fb610d8884dc09e0b0300a767a350563cbfd88b4b85324ce4 size: 1363
#推送成功

使用浏览器访问私有仓库,地址栏输入主机IP:8080,查看镜像信息

以上就是全部介绍搭建Docker私有仓库,如何通过配置证书为仓库添加安全级别与身份验证,以及构建可视化私有仓库的全部内容。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值