目录
一、Docker Hub
二、私有Registry仓库搭建
1、下载并开启仓库镜像registry
2、Registry加密传输
3、建立一个registry仓库
4、为客户端建立证书
5、测试
6、为仓库建立登录认证
三、Harbor仓库搭建
Docker 仓库(Docker Registry) 是用于存储和分发 Docker 镜像的集中式存储库。 它就像是一个大型的镜像仓库,开发者可以将自己创建的 Docker 镜像推送到仓库中,也可以从仓库中拉 取所需的镜像。 Docker 仓库可以分为公共仓库和私有仓库: 公共仓库,如 Docker Hub,任何人都可以访问和使用其中的镜像。许多常用的软件和应用都有在 Docker Hub 上提供的镜像,方便用户直接获取和使用。 例如,您想要部署一个 Nginx 服务器,就可以从 Docker Hub 上拉取 Nginx 的镜像。 私有仓库则是由组织或个人自己搭建和管理的,用于存储内部使用的、不希望公开的镜像。 比如,一家企业为其特定的业务应用创建了定制化的镜像,并将其存储在自己的私有仓库中, 以保证安全性和控制访问权限。 通过 Docker 仓库,开发者能够方便地共享和复用镜像,加速应用的开发和部署过程。
一、Docker Hub
Docker Hub 是 Docker 官方提供的一个公共的镜像仓库服务。 它是 Docker 生态系统中最知名和广泛使用的镜像仓库之一,拥有大量的官方和社区贡献的镜像。 以下是 Docker Hub 的一些关键特点和优势: 1. 丰富的镜像资源:涵盖了各种常见的操作系统、编程语言运行时、数据库、Web 服务器等众多应用 的镜像。 例如,您可以轻松找到 Ubuntu、CentOS 等操作系统的镜像,以及 MySQL、Redis 等数据库 的镜像。 2. 官方支持:提供了由 Docker 官方维护的一些重要镜像,确保其质量和安全性。 3. 社区贡献:开发者们可以自由上传和分享他们创建的镜像,促进了知识和资源的共享。 4. 版本管理:对于每个镜像,通常都有多个版本可供选择,方便用户根据需求获取特定版本。 5. 便于搜索:用户可以通过关键词轻松搜索到所需的镜像。
PULL & PUSH
pull原理
镜像拉取分为以下几步:
1.docker客户端向index发送镜像拉去请求并完成与index的认证
2.index发送认证token和镜像位置给dockerclient
3.dockerclient携带token和根据index指引的镜像位置取连接registry
4.Registry会根据client持有的token跟index核实身份合法性
5.index确认此token合法性
6.Registry会根据client的请求传递镜像到客户端
push原理
1.client向index发送上传请求并完成用户认证
2.index会发方token给client来证明client的合法性
3.client携带index提供的token连接Registry
4.Registry向index合适token的合法性
5.index证实token的合法性
6.Registry开始接收客户端上传过来的镜像
二、私有Registry仓库搭建
1、下载并开启仓库镜像registry
[root@docker-node1 ~]# docker pull registry
[root@docker-node1 ~]# docker run -d -p 5000:5000 --restart=always registry #暴露端口
[root@docker-node1 ~]# docker tag nginx:v3 172.25.254.100:5000/nginx:v3
[root@docker-node1 ~]# docker push 172.25.254.100:5000/nginx:v3
The push refers to repository [172.25.254.100:5000/nginx]
Get "https://172.25.254.100:5000/v2/": http: server gave HTTP response to HTTPS client
#docker在上传的过程中默认使用https,但是我们并没有建立https认证需要的认证文件所以会报错
[root@docker ~]# vim /etc/docker/daemon.json
{
"insecure-registries" : ["http://172.25.254.100:5000"]
}
[root@docker ~]# systemctl restart docker
#配置非加密端口
[root@docker-node1 ~]# docker push 172.25.254.100:5000/nginx:v3
[root@docker ~]# curl 172.25.254.100:5000/v2/_catalog
#上传并查看镜像
[root@docker-node1 ~]# docker tag busybox:latest 172.25.254.100:5000/busybox:latest
[root@docker-node1 ~]# docker push 172.25.254.100:5000/busybox:latest
[root@docker-node1 ~]# curl 172.25.254.100:5000/v2/_catalog
2、Registry加密传输
Docker Registry 私有库的加密传输主要作用在于确保镜像在从客户端推送到私有库或从私有库拉取到客户端的过程中,数据不会被恶意窃取或篡改。通过加密通信通道,能有效保护敏感的镜像内容,增强数据的安全性和保密性,为企业内部的容器化应用部署提供更可靠的保障。
[root@docker-node1 ~]# vim /etc/hosts
172.25.254.100 docker-node1.mlh.org reg.leoma.org
#为仓库地址做解析
[root@docker-node1 ~]# mkdir certs
[root@docker-node1 ~]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/leoma.org.key -addext "subjectAltName = DNS:reg.leoma.org" -x509 -days 365 -out certs/leoma.org.crt
[root@docker-node1 ~]# ls certs/
leoma.org.crt leoma.org.key
3、建立一个registry仓库
[root@docker-node1 ~]# docker run -d -p 443:443 --restart=always \
> -v /root/certs:/certs \
> -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
> -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/leoma.org.crt \
> -e REGISTRY_HTTP_TLS_KEY=/certs/leoma.org.key registry:latest
2299907d38f0282eecc6c575f576ea7a6ff3775bc1daea0f9b011d61820997e5
-d:以守护式(后台)模式运行容器。
-p 443:443:将主机的 443 端口映射到容器的 443 端口。通常 443 端口用于 HTTPS 服务。
--restart=always:设置容器在退出或主机重启时自动重新启动。
-v /root/certs:/certs:将主机上的/root/certs目录挂载到容器内的/certs目录。这样可以让容器访问主机上存储的证书文件。
-e REGISTRY_HTTP_ADDR=0.0.0.0:443:设置环境变量,指定 Registry 服务监听的地址和端口为0.0.0.0:443,表示在所有网络接口上监听 443 端口。
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/leoma.org.crt:设置环境变量,指定 Registry 使用的 TLS 证书文件路径为容器内的/certs/leoma.org.crt。这个证书用于加密容器与客户端之间的通信。
-e REGISTRY_HTTP_TLS_KEY=/certs/leoma.org.key:设置环境变量,指定 Registry 使用的 TLS 私钥文件路径为容器内的/certs/leoma.org.key。私钥与证书配合使用进行加密通信。
registry:latest:指定要运行的容器镜像为registry:latest,即 Docker Registry 的最新版本镜像。
4、为客户端建立证书
[root@docker-node1 ~]# mkdir /etc/docker/certs.d/reg.leoma.org -p
[root@docker-node1 ~]# cp /root/certs/leoma.org.crt /etc/docker/certs.d/reg.leoma.org/ca.crt
[root@docker-node1 ~]# systemctl restart docker
5、测试
[root@docker-node1 ~]# docker tag nginx:v3 reg.leoma.org/nginx:v3
[root@docker-node1 ~]# docker push reg.leoma.org/nginx:v3
6、为仓库建立登录认证
#安装建立认证文件的工具包
[root@docker docker]# dnf install httpd-tools -y
#建立认证文件
[root@docker-node1 ~]# mkdir auth
[root@docker-node1 ~]# htpasswd -B auth/.htpasswd admin
[root@docker-node1 ~]# htpasswd -Bc auth/.htpasswd leo
New password:
Re-type new password:
Adding password for user admin
[root@docker-node1 ~]# cat auth/.htpasswd
leo:$2y$05$oj/d6bTWuHJhU3mt2c.lDuLlv/xOyI6GJ20o5zeJ0f3kndhldzfcW
admin:$2y$05$b6F2PMyS.GD4bhlE23kuSe8FbVVGr0OcgAWhN.IB3EnxFMGk9ALs.
auth/.htpasswd:指定要创建的密码文件的路径和名称。在这个例子中,密码文件将被创建在 auth 目录下,文件名为 .htpasswd
#添加认证到registry容器中
[root@docker-node1 ~]# docker run -d -p 443:443 --restart=always -v /root/certs:/certs -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/leoma.org.crt -e REGISTRY_HTTP_TLS_KEY=/certs/leoma.org.key \
> -v /root/auth:/auth \
> -e REGISTRY_AUTH=htpasswd \
> -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
> -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/.htpasswd \
> registry
[root@docker-node1 ~]# docker login reg.leoma.org
Username: leo
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credential-stores
Login Succeeded
#上传
[root@docker-node1 ~]# docker tag nginx:latest reg.leoma.org/nginx:latest
[root@docker-node1 ~]# docker push reg.leoma.org/nginx:latest
测试
[root@docker-node1 ~]# curl -k https://reg.leoma.org/v2/_catalog -uleo:leo
{"repositories":["nginx"]}
三、Harbor仓库搭建
Harbor 是由vmware公司开源的企业级 Docker Registry 项目。 它提供了以下主要功能和特点: 1. 基于角色的访问控制(RBAC):可以为不同的用户和用户组分配不同的权限,增强了安全性和管理 的灵活性。 2. 镜像复制:支持在不同的 Harbor 实例之间复制镜像,方便在多个数据中心或环境中分发镜像。 3. 图形化用户界面(UI):提供了直观的 Web 界面,便于管理镜像仓库、项目、用户等。 4. 审计日志:记录了对镜像仓库的各种操作,有助于追踪和审查活动。 5. 垃圾回收:可以清理不再使用的镜像,节省存储空间。
[root@localhost ~]# vim /etc/hosts
172.25.254.111 reg.leoma.org
[root@localhost ~]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/leoma.org.key -addext "subjectAltName = DNS:reg.leoma.org" -x509 -days 365 -out certs/leoma.org.crt
[root@localhost ~]# tar zxf harbor-offline-installer-v2.5.4.tg
[root@localhost harbor]# cp harbor.yml.tmpl harbor.yml
[root@localhost harbor]# ls
common.sh harbor.v2.5.4.tar.gz harbor.yml harbor.yml.tmpl install.sh LICENSE prepare
[root@docker harbor]# vim harbor.yml
hostname: reg.leoma.org
certificate: /data/certs/leoma.org.crt
private_key: /data/certs/leoma.org.key
harbor_admin_password: leo
[root@localhost /]# mkdir data
[root@localhost harbor]# cp /root/certs/ /data/ -r
[root@localhost harbor]# ./install.sh --with-chartmuseum
docker compose down #docker compose down命令用于停止和移除由 Docker Compose 管理的容器、网络、卷和镜像
docker compose up -d #用于以分离模式(detached mode)启动由 Docker Compose 管理的容器
[root@localhost ~]# docker tag reg.leoma.org/nginx:v3 reg.leoma.org/leoma/nginx:v3
[root@localhost ~]# docker push reg.leoma.org/leoma/nginx:v3
私有仓库作为默认下载仓库
[root@localhost docker]# vim daemon.json
{
"registry-mirrors" : ["http://reg.leoma.org"]
}