目录
学习目标
- 了解Docker私有仓库
- 部署私有仓库
- 熟练使用私有仓库
- 通过Web界面管理仓库
介绍
Docker仓库用于保存Docker镜像,分为公有仓库与私有仓库。公有仓库就是Docker Hub一类供所有Docker用户使用的Docker仓库。私有仓库指由个人或企业搭建的Docker仓库,供其自身使用,是非公开的。
下面对Docker私有仓库及其相关内容进行详解
私有仓库
Docker镜像通常保存在Docker Hub,Docker Hub(Docker HUb官网)是目前最大的Docker镜像公有仓库,由Docker官方人员进行维护,其中的镜像可供所有用户下载使用。
在生产环境中,通过公司会构建一些符合业务需求的镜像,这些镜像因为是商业机密而不得上传至Docker Hub,只能供公司内部人员使用。此时就需要再内网搭建一个Docker私有仓库,来存储公司内部的镜像,并确保内部人员表可以不受网络限制,快速地拉取或上传镜像。
镜像为Docker容器的运行基础,容器是镜像具体运行实例,镜像仓库为镜像提供了可靠的存储空间,镜像可以从公有或私有仓库拉取。如下图所示。
![Docker仓库工作原理图](https://i-blog.csdnimg.cn/blog_migrate/601b75eaaa4efbbb467de137525fdb96.png)
搭建私有仓库
环境部署
私有镜像仓库在企业中有较高的使用率,因此私有仓库镜像仓库搭建技术显得尤为重要。下面将通过示例讲述私有镜像仓库的搭建方式与过程。
在做此操作前需要两台服务器,一个作为私有镜像仓库,另一个作为使用私有镜像仓库的Docker客户机,以Centos系统为例,安装并启动docker(IP请根据自己实际情况设置)
服务器名称 | IP地址 | 功能 |
docker-01 | 192.168.153.129 | docker的私有仓库 |
docker-02 | 192.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私有仓库,如何通过配置证书为仓库添加安全级别与身份验证,以及构建可视化私有仓库的全部内容。