Docker Registry 使用总结

Docker Registry 详细使用总结

1. Docker Registry 基础概念

什么是 Docker Registry

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

核心作用

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

2. Docker Registry 部署方式

简单部署

bash 复制代码
# 运行基本的 Registry 实例
docker run -d -p 5000:5000 --name registry registry:2

生产环境部署配置

bash 复制代码
docker run -d \
  -p 5000:5000 \
  --restart=always \
  --name registry \
  -v /path/to/certs:/certs \
  -v /path/to/auth:/auth \
  -v /path/to/data:/var/lib/registry \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
  -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
  -e REGISTRY_AUTH=htpasswd \
  -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
  -e REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" \
  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 认证

bash 复制代码
# 创建密码文件
mkdir auth
docker run --rm --entrypoint htpasswd registry:2 -Bbn username password > auth/htpasswd

# 启动带认证的 Registry
docker run -d -p 5000:5000 --name registry \
  -v $(pwd)/auth:/auth \
  -e "REGISTRY_AUTH=htpasswd" \
  -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
  -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
  registry:2

客户端登录

bash 复制代码
# 登录私有仓库
docker login localhost:5000

# 推送镜像
docker tag ubuntu:latest localhost:5000/ubuntu:latest
docker push localhost:5000/ubuntu:latest

# 拉取镜像
docker pull localhost:5000/ubuntu:latest

5. 镜像管理操作

镜像推送流程

  1. 标记镜像:

    bash 复制代码
    docker tag SOURCE_IMAGE:TAG REGISTRY_HOST:PORT/IMAGE_NAME:TAG
  2. 推送镜像:

    bash 复制代码
    docker push REGISTRY_HOST:PORT/IMAGE_NAME:TAG

镜像拉取流程

bash 复制代码
docker pull REGISTRY_HOST:PORT/IMAGE_NAME:TAG

查看仓库信息

bash 复制代码
# 查看仓库列表
curl http://REGISTRY_HOST:PORT/v2/_catalog

# 查看镜像标签
curl http://REGISTRY_HOST:PORT/v2/IMAGE_NAME/tags/list

删除镜像

bash 复制代码
# 启用删除功能
-e REGISTRY_STORAGE_DELETE_ENABLED=true

# 删除镜像 manifest
curl -X DELETE http://REGISTRY_HOST:PORT/v2/IMAGE_NAME/manifests/DIGEST

6. 存储后端配置

本地文件系统

bash 复制代码
-e REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/var/lib/registry

AWS S3

bash 复制代码
-e REGISTRY_STORAGE=s3
-e REGISTRY_STORAGE_S3_ACCESSKEY=your_access_key
-e REGISTRY_STORAGE_S3_SECRETKEY=your_secret_key
-e REGISTRY_STORAGE_S3_REGION=us-east-1
-e REGISTRY_STORAGE_S3_BUCKET=bucket_name

其他存储

  • Azure Blob Storage
  • Google Cloud Storage
  • OpenStack Swift
  • Alibaba Cloud OSS

7. 高可用部署

多实例部署

  • 使用共享存储(如 NFS、S3)
  • 前端负载均衡器分发请求
  • 每个实例独立运行

数据持久化

bash 复制代码
# 挂载持久化存储卷
-v /host/data/path:/var/lib/registry

备份与恢复

bash 复制代码
# 备份数据目录
tar czf registry_backup.tar.gz /var/lib/registry

# 恢复数据
tar xzf registry_backup.tar.gz -C /

8. 监控与日志

日志配置

bash 复制代码
-e REGISTRY_LOG_LEVEL=info
-e REGISTRY_LOG_FORMATTER_NAME=json

健康检查

bash 复制代码
# 健康检查端点
curl http://REGISTRY_HOST:PORT/v2/

性能监控

  • 监控存储使用情况
  • 网络流量监控
  • 请求响应时间监控

9. 常见问题与解决方案

证书问题

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

存储空间不足

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

性能优化

  • 启用缓存机制
  • 使用 CDN 加速镜像分发
  • 优化网络配置
相关推荐
九皇叔叔11 小时前
Kubernetes 资源管理方式详解:命令式与声明式管理
docker·容器·k8s
程序猿小郑17 小时前
Docker Compose 构建完整服务实战指南:从入门到最佳实践
docker·容器
行百里er20 小时前
5 分钟跑起 Redis(Docker 版)
redis·后端·docker
Mr.朱鹏21 小时前
Docker三剑客实战指南:Docker、Dockerfile 和 Docker Compose
python·docker·devops·dockerfile
鬼先生_sir21 小时前
Docker 完整教程
docker
java_logo21 小时前
Docker 一键部署 Jellyfin:快速搭建私有化媒体服务器
docker·私有化部署·jellyfin·硬件加速·媒体服务器·轩辕镜像·影音库
jianpeng的工程笔记1 天前
WeKnora 搭建研发 EDA 知识库:Docker 部署、RAG 与 Wiki 实践
docker·知识库·eda·rag
ZeroNews内网穿透1 天前
内网部署 Halo 建站,用 ZeroNews 免费内网穿透安全发布到公网(无公网 IP 也能 HTTPS 访问)
docker·https·内网穿透·nas·反向代理·halo·zeronews
九皇叔叔2 天前
K8S 资源菜单
docker·容器·kubernetes·k8s
wdfk_prog2 天前
ROS教程08:从 TransportTCP::connect() 追到 TCPROS Connection Header、序列化与 Socket 数据传输
运维·缓存·docker·容器·ros