Docker 中registry私有仓库的搭建使用


一、仓库简介

容器镜像仓库是一种存储库(或存储库集合),用于存储 Kubernetes、DevOps 和基于容器的应用开发的容器镜像。 仓库分为两种类型:公共和私有。在Docker运行过程中默认使用的就是Docker官方的公共仓库Docker Hub,上传时需要登陆。私有仓库分为官方私有仓库(需要付费)和自己搭建的私人仓库。

二、向Docker Hub中push镜像

1、登陆自己在Docker Hub上注册的账号。

docker login

2、Docker Hub 为了区分不同用户的镜像,要求镜像的命名格式为[username]/xxx:‘tag’。所以需要将想要上传的镜像名字更改为符合要求的形式。

docker tag busybox:latest yangchenqi/busybox:latest

3、将镜像上传到我的官方公共仓库中

docker push yangchenqi/busybox:latest

4、从Docker Hub上拉取自己上传的镜像

docker pull yangchenqi/busybox:latest

5、需要删除仓库中的镜像时,可以登陆Docker Hub官方网站,在Web界面上操作。

三、Registry工作原理(Docker官方已开源)

Registry由index、registry、registry client三部分组成。

  • index:负责并维护有关用户账户、镜像的校验以及公共命名空间的信息。
  • registry:是镜像和图表的仓库,它不具有本地数据库以及不提供用户认证,通过Index Auth service的Token的方式进行认证。
  • registry client:Docker 充当registry客户端来维护推送和拉取,以及客户端的授权。

在这里插入图片描述
Push Image的流程和Pull Image的流程相似。

在这里插入图片描述

四、搭建最基础的私有仓库(无Web界面)

官方参考文档
1、下载registry镜像,运行registry容器

docker pull registry
docker history registry:latest  #查看端口、卷等信息
docker run -d --name registry -p 5000:5000 -v /opt/registry:/var/lib/registry registry

-p 指定端口映射,-v指定挂载卷(不存在会自动创建)
在这里插入图片描述

2、上传镜像并查看信息(push时系统并不知道默认仓库在哪,所以需要在修改名字的时候直接将该信息告诉镜像系统)

docker tag webserver:latest localhost:5000/webserver:latest #改名
docker push localhost:5000/webserver #上传
curl localhost:5000/v2/_catalog #查看仓库中有多少镜像

在这里插入图片描述
用tree命令可以看到挂载的文件中镜像如何分类的详细信息
在这里插入图片描述

3、其他在内网中的虚拟机是无法pull我们上传到本地的镜像的。如果我们在内网中对于安全没有很高的要求,我们可以在其他虚拟机上配置.json文件就可以在其他内网中的虚拟机上pull我们上传到本地的镜像了。

#在一台新虚拟机上安装docker
cd /etc/docker/
vim daemon.json
	{
 		 "insecure-registries" : ["172.25.14.10:5000"]
	}
	#地址指向我们上传镜像的那台虚拟机地址
systemctl reload docker.service
docker pull 172.25.14.10:5000/webserver:latest

在这里插入图片描述
4、仓库加密认证

  • 创建自签名证书
mkdir -p certs
openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/westos.org.key -x509 -days 365 -out certs/westos.org.crt

在这里插入图片描述
在这里插入图片描述
将名字改称 reg.westos.org,并做好解析(统一方便之后步骤使用)。

  • 匹配证书
mkdir /etc/docker/certs.d/reg.westos.org/ -p
cp certs/westos.org.crt /etc/docker/certs.d/reg.westos.org/ca.crt
  • 启用自签名证书的仓库
docker run -d --name registry \
-p 443:443 \
-v /opt/registry:/var/lib/registry \
-v "$(pwd)"/certs:/certs \ #绝对路径,将本地的certs挂载到容器中的certs
-e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/westos.org.crt \ #加载证书
-e REGISTRY_HTTP_TLS_KEY=/certs/westos.org.key \ #加载密钥
registry
  • 上传镜像
docker tag game2048:latest reg.westos.org/game2048:latest #改名
docker push reg.westos.org/game2048:latest #上传
  • 远程下载
[root@server6 ~]# mkdir /etc/docker/certs.d/reg.westos.org/ -p
[root@m0 reg.westos.org]# scp ca.crt server6:/etc/docker/certs.d/reg.westos.org/
  • 远程上传
和上面方法一样,下载配置好之后直接上传就可以

在这里插入图片描述

  • 最基本的认证加密功能
    • 设置加密及下上传
mkdir auth
htpasswd -B -c auth/htpasswd ycq
docker rm -f registry
docker run -d --name registry -p 443:443 -v /opt/registry:/var/lib/registry -v "$(pwd)"/certs:/certs -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/westos.org.crt -e REGISTRY_HTTP_TLS_KEY=/certs/westos.org.key -v "$(pwd)"/auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd registry
docker login reg.westos.org
docker tag rhel7:latest reg.westos.org/rhel7
docker push reg.westos.org/rhel7
  • 下载
docker login reg.westos.org
docker pull reg.westos.org/rhel7

在生产环境中无法达到使用要求,内容功能不够丰富,也缺少图形化界面,需要继续完善。


版权声明:本文为Ctrl_C_V_原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。