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. 镜像管理操作
镜像推送流程
-
标记镜像:
bashdocker tag SOURCE_IMAGE:TAG REGISTRY_HOST:PORT/IMAGE_NAME:TAG
-
推送镜像:
bashdocker 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 加速镜像分发
- 优化网络配置