Docker Registry(Repository) HTTPS 实践与安全推送指南

随着Docker技术的广泛应用以及越来越多第三方Registry安全审核推送监测机智的限制,越来越多的开发者开始构建自己的Docker Repository。私有镜像仓库不仅可以提高开发效率,还可以减少对外部公网的依赖,直接调用内网进行应用发布。为了保障数据的安全性和完整性,通常需要在私有镜像仓库中启用 HTTPS 协议。

在开始之前,确保服务器已经部署了Docker,并且能够正常运行。此外,还需要准备一个Repository域名和对应的SSL证书(推荐服务器和客户端的双向自签)。

实验测试专用的 HTTPS Docker Registry

创建必要的目录

root@Dev-AlibabaCloudLinux3-Virginia-America1:~# mkdir -p /data/app/docker/repository_v2/certs
root@Dev-AlibabaCloudLinux3-Virginia-America1:~# mkdir -p /data/app/docker/repository_v2/registry

使用 Docker 启动 Registry 服务,并挂载证书和数据目录

root@Dev-AlibabaCloudLinux3-Virginia-America1:~# docker run -d --restart=always --name docker-repository_v2 \
  -v /data/app/docker/repository_v2/certs:/certs \
  -v /data/app/docker/repository_v2/registry:/var/lib/registry \
  -e REGISTRY_HTTP_ADDR=0.0.0.0:5000 \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/repository.ponfey.com.crt \
  -e REGISTRY_HTTP_TLS_KEY=/certs/repository.ponfey.com.key \
  -p 5000:5000 \
  localhost/registry:2

*配置 Docker 客户端信任证书 , 需要以下操作:(与 Podman 二选一即可)

root@Dev-AlibabaCloudLinux3-Virginia-America1:~# mkdir -p /etc/docker/certs.d/repository.ponfey.com:5000
root@Dev-AlibabaCloudLinux3-Virginia-America1:~# cp /data/app/docker/repository_v2/certs/repository.ponfey.com.crt /etc/docker/certs.d/repository.ponfey.com:5000/ca.crt

*配置 Podman 客户端信任证书 , 需要以下操作: (与 Docker 二选一即可)

root@Dev-AlibabaCloudLinux3-Virginia-America1:~# rsync -avP /data/app/docker/repository_v2/certs/repository.ponfey.com.crt root@Dev-RockyLinux9-Area1-HangZhou:/etc/pki/ca-trust/source/anchors/repository.ponfey.com.crt
[richard@Dev-RockyLinux9-Area1-HangZhou ~]# update-ca-trust extract # 更新证书信任库
[richard@Dev-RockyLinux9-Area1-HangZhou ~]# openssl x509 -in /etc/pki/ca-trust/source/anchors/repository.ponfey.com.crt -noout -text # 验证证书

推送镜像到私有仓库

需要将本地构建的容器镜像打上私有仓库的标签

[richard@Dev-RockyLinux9-Area1-HangZhou ~]# podman tag  localhost/mysql901_community_innovation_middle:2408 mysql901_community_innovation_middle:2408 

将容器镜像推送到私有仓库 repository.ponfey.com

[richard@Dev-RockyLinux9-Area1-HangZhou ~]# podman commit bc0514f51851 mysql901_community_innovation_middle:2408
Getting image source signatures
Copying blob e2eb06d8af82 skipped: already exists  
Copying blob 4df918a2e6c8 skipped: already exists  
Copying blob 805c622f49a3 skipped: already exists  
Copying blob 5f70bf18a086 skipped: already exists  
Copying blob 5f70bf18a086 skipped: already exists  
Copying config 17c9a051a9 done   | 
Writing manifest to image destination
17c9a051a9eb12af76bd83d5625dbc9a9a441a8c87722bbb953809451dcd0f47
[richard@Dev-RockyLinux9-Area1-HangZhou ~]# podman push mysql901_community_innovation_middle:2408
Getting image source signatures
Copying blob 805c622f49a3 done   | 
Copying blob 5f70bf18a086 done   | 
Copying blob 5f70bf18a086 done   | 
Copying blob 4df918a2e6c8 done   | 
Copying blob e2eb06d8af82 done   | 
Copying config 17c9a051a9 done   | 
Writing manifest to image destination

使用skopeo工具查询私有仓库

[richard@Dev-RockyLinux9-Area1-HangZhou ~]# skopeo list-tags docker://repository.ponfey.com:5000/mysql901_community_innovation_middle
{
    "Repository": "repository.ponfey.com:5000/mysql901_community_innovation_middle",
    "Tags": [
        "v2408"
    ]
}

后续仓库要求身份验证,需要提供认证信息:

[richard@Dev-RockyLinux9-Area1-HangZhou ~]# skopeo --insecure list-tags docker://repository.ponfey.com:5000/mysql901_community_innovation_middle --creds <username>:<password>

集成镜像标签脚本进行查询

[richard@Dev-RockyLinux9-Area1-HangZhou ~]# cdpython 
[richard@Dev-RockyLinux9-Area1-HangZhou python]# python3 list_all_images_and_tags_from_repository2.py 
Image: python_3_12_5_sit
{
    "Repository": "repository.ponfey.com:5000/python_3_12_5_sit",
    "Tags": [
        "v2408"
    ]
}

Image: mysql901_community_innovation_middle
{
    "Repository": "repository.ponfey.com:5000/mysql901_community_innovation_middle",
    "Tags": [
        "v2408"
    ]
}

...

总结

通过上述步骤,成功地部署HTTPS的实验测试专用的Docker Registry(Repository),并实现了安全地推送镜像。这种方式不仅提高了私有镜像仓库的安全性,还简化了镜像管理流程。后续可以根据实际需求进一步扩展和优化私有镜像仓库的功能,添加身份验证机制(registry-auth)、权限控制等高级特性。

上一篇
下一篇