欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

Docker私有仓库Registry部署的实现

程序员文章站 2022-11-23 17:08:02
随着docker使用的镜像越来越多,就需要有一个保存镜像的地方,这就是仓库。目前常用的两种仓库:公共仓库和私有仓库。最方便的就是使用公共仓库上传和下载,下载公共仓库的镜像是不需要注册的,但是上传时,是...

随着docker使用的镜像越来越多,就需要有一个保存镜像的地方,这就是仓库。目前常用的两种仓库:公共仓库和私有仓库。最方便的就是使用公共仓库上传和下载,下载公共仓库的镜像是不需要注册的,但是上传时,是需要注册的。

私有仓库最常用的就是registry、harbor两种,那接下来详细介绍如何搭建registry私有仓库,harbor将在下一篇博文部署。

一、部署registry私有仓库

案例描述

两台centos7.4,一台为docker私有仓库;另一台为docker客户端,测试使用;

两台服务器都需要安装docker服务,请参考博文:安装docker.v19版本

1、配置registry私有仓库

[root@centos01 ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf  
    <!--docker宿主机开启路由功能-->
[root@centos01 ~]# sysctl -p  <!--刷新配置-->
net.ipv4.ip_forward = 1
[root@centos01 ~]# vim /etc/docker/daemon.json  <!--配置镜像加速-->
{"registry-mirrors":["https://6kx4zyno.mirror.aliyuncs.com"]}  <!--添加阿里云加速-->
[root@centos01 ~]# systemctl reload docker <!--重新启动docker服务-->
[root@centos01 ~]# docker search registry <!--查找registry镜像-->
<!--registry镜像可以直接先pull下来,也可以不下载,根据自己情况而定-->
[root@centos01 ~]# docker run -d -p 5000:5000 --name registry --restart=always -v /opt/registry:/var/lib/registry registry
 <!--运行registry容器,运行registry服务存储自己的镜像-->
 <!--"--restart=always"参数是指此容器跟随docker服务启动而启动-->
[root@centos01 ~]# docker ps  <!--查看docker运行的容器-->
container id    image        command         created       status       ports          names
a7773d77b8a3    registry      "/entrypoint.sh /etc…"  50 seconds ago   up 46 seconds    0.0.0.0:5000->5000/tcp  registry
[root@centos01 ~]# docker images  <!--查看docker所有镜像-->
repository          tag         image id      created       size
registry           latest       708bc6af7e5e    3 months ago    25.8mb
tomcat            latest       1b6b1fe7261e    5 days ago     647mb
hub.c.163.com/public/centos  6.7-tools      b2ab0ed558bb    3 years ago     602mb
[root@centos01 ~]# vim /etc/docker/daemon.json <!--配置docker服务支持registry服务-->
{"registry-mirrors":["https://6kx4zyno.mirror.aliyuncs.com"],
"insecure-registries":["192.168.100.10:5000"]  <!--添加此行-->
}
[root@centos01 ~]# systemctl reload docker  <!--重新启动docker服务-->

2、上传镜像到registry私有仓库

[root@centos01 ~]# docker tag hub.c.163.com/public/centos:6.7-tools 192.168.100.10:5000/image/centos:6.7  
    <!--修改镜像标签-->
[root@centos01 ~]# docker push 192.168.100.10:5000/image/centos:6.7 <!--上传镜像到registry私有仓库-->

二、配置docker客户端访问私有仓库

<!--客户端安装docker服务,配置镜像加速-->
[root@centos02 ~]# vim /etc/docker/daemon.json  <!--配置docker支持registry服务 -->
{"registry-mirrors":["https://6kx4zyno.mirror.aliyuncs.com"],
"insecure-registries":["192.168.100.10:5000"]  <!--添加此行-->
}
[root@centos02 ~]# systemctl restart docker  <!--重新启动docker服务-->
[root@centos02 ~]# docker pull 192.168.100.10:5000/image/centos:6.7 
         <!--客户端下载私有仓库中的镜像-->
[root@centos02 ~]# docker images <!--查看镜像是否下载成功-->
repository             tag         image id      created       size
192.168.100.10:5000/image/centos  6.7         b2ab0ed558bb    3 years ago     602mb

至此registry私有仓库已经搭建完成,但是现在存在一个问题,如果这也部署的话企业内部所有人员皆可访问我们的私有仓库,为了安全起见,接下来为registry添加一个身份验证,只有通过了身份验证才可以上传或者下载私有仓库中的镜像。

三、配置registry加载身份验证

[root@centos01 ~]# yum -y install httpd-tools  <!--安装加密工具httpd-tools-->
[root@centos01 ~]# mkdir /opt/registry-auth <!--创建存放验证密钥目录-->
[root@centos01 ~]# htpasswd -bbn bob pwd@123 > /opt/registry-auth/htpasswd
 <!--配置registry身份验证数据库-->
<!--"-bbn”参数解释:b强制密码加密;b在命令中输入密码,不提示输入密码;n不更新密钥文件-->

<!--删除此服务器上的所有容器,接下来重新生成一个需要身份验证的私有仓库容器-->
[root@centos01 ~]# docker run -d -p 5000:5000 --restart=always \
-v /opt/registry-auth/:/auth/ \
-v /opt/registry:/var/lib/registry --name registry-auth -e "registry_auth=htpasswd" \
-e "registry_auth_htpasswd_realm=registry realm" \
-e "registry_auth_htpasswd_path=/auth/htpasswd" registry 
 <!--重新运行一个支持身份验证的registry私有镜像仓库容器-->
[root@centos01 ~]# docker tag tomcat:latest 192.168.100.10:5000/image/tomcat:1.0 
    <!--镜像修改标签-->
[root@centos01 ~]# docker push 192.168.100.10:5000/image/tomcat:1.0 
<!--测试不通过身份验证是否可以往私有仓库上传镜像-->
no basic auth credentials
<!--提示没有身份验证,上传不了-->
[root@centos01 ~]# docker login 192.168.100.10:5000 
    <!--登录私有镜像仓库,通过身份验证即可上传-->
username: bob   <!--输入bob-->
password:    <!--输入密码-->
……………… <!--此处省略部分内容-->
login succeeded     <!--已通过身份验证,此时可以上传镜像到私有仓库-->
[root@centos01 ~]# docker push 192.168.100.10:5000/image/tomcat:1.0 <!--再次上传镜像到私有仓库-->
the push refers to repository [192.168.100.10:5000/image/tomcat]
b0ac242ce8d3: pushed
5e71d8e4cd3d: pushed
eb4497d7dab7: pushed
bfbfe00b44fc: pushed
d39111fb2602: pushed
155d997ed77c: pushed
88cfc2fcd059: pushed
760e8d95cf58: pushed
7cc1c2d7e744: pushed
8c02234b8605: pushed
1.0: digest: sha256:55b41e0290d32d6888aee2e9a15f03cc88d2f49d5ad68892c54b9527d0ed181c size: 2421
[root@centos02 ~]# docker pull 192.168.100.10:5000/image/tomcat:1.0 
 <!--docker客户端不通过身份验证直接下载私有仓库中的镜像直接被拒绝-->
error response from daemon: get http://192.168.100.10:5000/v2/image/tomcat/manifests/1.0: no basic auth credentials
[root@centos02 ~]# docker login 192.168.100.10:5000 
    <!--登录私有仓库,通过身份验证-->
username: bob  <!--输入bob-->
password:     <!--输入密码-->
login succeeded   <!--通过身份验证-->
[root@centos02 ~]# docker pull 192.168.100.10:5000/image/tomcat:1.0 <!--下载私有仓库中的镜像-->
1.0: pulling from image/tomcat
376057ac6fa1: pull complete
5a63a0a859d8: pull complete
496548a8c952: pull complete
2adae3950d4d: pull complete
0a297eafb9ac: pull complete
09a4142c5c9d: pull complete
9e78d9befa39: pull complete
18f492f90b9c: pull complete
7834493ec6cd: pull complete
216b2be21722: pull complete
digest: sha256:55b41e0290d32d6888aee2e9a15f03cc88d2f49d5ad68892c54b9527d0ed181c
status: downloaded newer image for 192.168.100.10:5000/image/tomcat:1.0
192.168.100.10:5000/image/tomcat:1.0
[root@centos02 ~]# docker images  <!--查看docker客户端镜像-->
repository             tag         image id      created       size
192.168.100.10:5000/image/tomcat  1.0         1b6b1fe7261e    5 days ago     647mb
192.168.100.10:5000/image/centos  6.7         b2ab0ed558bb    3 years ago     602mb

到此这篇关于docker私有仓库registry部署的实现的文章就介绍到这了,更多相关docker私有仓库registry内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!