找回密码
 立即注册
首页 业界区 业界 Docker Registry 使用总结

Docker Registry 使用总结

获弃 昨天 11:42
Docker Registry 详细使用总结

1. Docker Registry 基础概念

什么是 Docker Registry


  • Docker Registry 是一个无状态、可扩展的服务器端应用程序
  • 用于存储和分发 Docker 镜像
  • 官方提供开源版本 registry:2,是 Docker 官方推荐的私有仓库解决方案
核心作用


  • 镜像存储: 集中存储 Docker 镜像
  • 镜像分发: 在不同环境和节点间共享镜像
  • 版本管理: 管理镜像的不同版本和标签
  • 访问控制: 提供认证和授权机制
2. Docker Registry 部署方式

简单部署
  1. root@controller1:~# docker pull registry:2.7.0
  2. 2.7.0: Pulling from library/registry
  3. e3c488b39803: Pull complete
  4. 05a63128803b: Pull complete
  5. 1b07057daa1a: Pull complete
  6. 3ed3807221bb: Pull complete
  7. 2238f667b955: Pull complete
  8. a08a29f99d0a: Pull complete
  9. Digest: sha256:1cd9409a311350c3072fe510b52046f104416376c126a479cef9a4dfe692cf57
  10. Status: Downloaded newer image for registry:2.7.0
  11. docker.io/library/registry:2.7.0
  12. root@controller1:~#
  13. # 运行基本的 Registry 实例
  14. docker run -d -p 5000:5000 --name registry registry:2
复制代码
生产环境部署配置
  1. docker run -d \
  2.   -p 5000:5000 \
  3.   --restart=always \
  4.   --name registry \
  5.   -v /path/to/certs:/certs \
  6.   -v /path/to/auth:/auth \
  7.   -v /path/to/data:/var/lib/registry \
  8.   -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
  9.   -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
  10.   -e REGISTRY_AUTH=htpasswd \
  11.   -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
  12.   -e REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" \
  13.   registry:2
复制代码
3. 核心配置参数详解

存储配置


  • REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: 文件系统存储根目录
  • REGISTRY_STORAGE_DELETE_ENABLED: 是否允许删除镜像(默认 false)
  • REGISTRY_STORAGE_CACHE_BLOBDESCRIPTOR: 缓存配置
安全配置


  • REGISTRY_HTTP_TLS_CERTIFICATE: TLS 证书路径
  • REGISTRY_HTTP_TLS_KEY: TLS 私钥路径
  • REGISTRY_AUTH: 认证方式(htpasswd、token 等)
  • REGISTRY_AUTH_HTPASSWD_PATH: htpasswd 文件路径
网络配置


  • REGISTRY_HTTP_ADDR: HTTP 监听地址
  • REGISTRY_HTTP_HOST: 外部访问地址
  • REGISTRY_HTTP_SECRET: HTTP 密钥
4. 认证与授权机制

HTPASSWD 认证
  1. # 创建密码文件
  2. mkdir auth
  3. docker run --rm --entrypoint htpasswd registry:2 -Bbn username password > auth/htpasswd
  4. # 启动带认证的 Registry
  5. docker run -d -p 5000:5000 --name registry \
  6.   -v $(pwd)/auth:/auth \
  7.   -e "REGISTRY_AUTH=htpasswd" \
  8.   -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
  9.   -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
  10.   registry:2
复制代码
客户端登录
  1. # 登录私有仓库
  2. docker login localhost:5000
  3. # 推送镜像
  4. docker tag ubuntu:latest localhost:5000/ubuntu:latest
  5. docker push localhost:5000/ubuntu:latest
  6. # 拉取镜像
  7. docker pull localhost:5000/ubuntu:latest
复制代码
5. 镜像管理操作

镜像推送流程


  • 标记镜像:
    1. docker tag SOURCE_IMAGE:TAG REGISTRY_HOST:PORT/IMAGE_NAME:TAG
    复制代码
  • 推送镜像:
    1. docker push REGISTRY_HOST:PORT/IMAGE_NAME:TAG
    复制代码
镜像拉取流程
  1. docker pull REGISTRY_HOST:PORT/IMAGE_NAME:TAG
复制代码
查看仓库信息
  1. # 查看仓库列表
  2. curl http://REGISTRY_HOST:PORT/v2/_catalog
  3. # 查看镜像标签
  4. curl http://REGISTRY_HOST:PORT/v2/IMAGE_NAME/tags/list
复制代码
删除镜像
  1. # 启用删除功能
  2. -e REGISTRY_STORAGE_DELETE_ENABLED=true
  3. # 删除镜像 manifest
  4. curl -X DELETE http://REGISTRY_HOST:PORT/v2/IMAGE_NAME/manifests/DIGEST
复制代码
使用示例
  1. root@controller1:~/zeng/docker_pull# docker push registry.tethrnet.com:5000/mongo:latest
  2. The push refers to repository [registry.tethrnet.com:5000/mongo]
  3. a4aac564b866: Pushed
  4. afc67efe5570: Pushed
  5. fa742b9a5a74: Pushed
  6. c22d31789a0b: Pushed
  7. 27b6909edf8c: Pushed
  8. 125fad5c3f6f: Pushed
  9. b23a008a4788: Pushed
  10. 8eb266e6a340: Pushed
  11. f23c7009bffa: Pushed
  12. 7fbab1a08895: Pushed
  13. 551f518b33f2: Pushed
  14. e996f7b5c172: Pushed
  15. latest: digest: sha256:cf4e7392f797d8c788c4725d240c685b595087ef6c1043e4ea4b311e232b8430 size: 2823
  16. root@controller1:~/zeng/docker_pull#
  17. root@controller1:~/zeng/docker_pull#
  18. root@controller1:~/zeng/docker_pull#
  19. root@controller1:~/zeng/docker_pull#
  20. root@controller1:~/zeng/docker_pull#
  21. root@controller1:~/zeng/docker_pull# curl -X GET -u tethrnet:Tethrnet@@123 https://registry.tethrnet.com:5000/v2/mongo/tags/list
  22. {"name":"mongo","tags":["latest","4.2.10-bionic"]}
  23. root@controller1:~/zeng/docker_pull#
复制代码
6. 存储后端配置

本地文件系统
  1. -e REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/var/lib/registry
复制代码
AWS S3
  1. -e REGISTRY_STORAGE=s3
  2. -e REGISTRY_STORAGE_S3_ACCESSKEY=your_access_key
  3. -e REGISTRY_STORAGE_S3_SECRETKEY=your_secret_key
  4. -e REGISTRY_STORAGE_S3_REGION=us-east-1
  5. -e REGISTRY_STORAGE_S3_BUCKET=bucket_name
复制代码
其他存储


  • Azure Blob Storage
  • Google Cloud Storage
  • OpenStack Swift
  • Alibaba Cloud OSS
7. 高可用部署

多实例部署


  • 使用共享存储(如 NFS、S3)
  • 前端负载均衡器分发请求
  • 每个实例独立运行
数据持久化
  1. # 挂载持久化存储卷
  2. -v /host/data/path:/var/lib/registry
复制代码
备份与恢复
  1. # 备份数据目录
  2. tar czf registry_backup.tar.gz /var/lib/registry
  3. # 恢复数据
  4. tar xzf registry_backup.tar.gz -C /
复制代码
8. 监控与日志

日志配置
  1. -e REGISTRY_LOG_LEVEL=info
  2. -e REGISTRY_LOG_FORMATTER_NAME=json
复制代码
健康检查
  1. # 健康检查端点
  2. curl http://REGISTRY_HOST:PORT/v2/
复制代码
性能监控


  • 监控存储使用情况
  • 网络流量监控
  • 请求响应时间监控
9. 常见问题与解决方案

证书问题


  • 确保客户端信任 Registry 证书
  • 使用 --insecure-registry 参数(不推荐用于生产)
存储空间不足


  • 定期清理未使用的镜像
  • 配置镜像自动清理策略
  • 扩展存储容量
性能优化


  • 启用缓存机制
  • 使用 CDN 加速镜像分发
  • 优化网络配置
参考连接:https://www.cnblogs.com/Chary/p/18095027

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册