Docker之私有镜像仓库Registry部署
Docker之镜像仓库Registry部署
核心部署命令
docker run -d \
-p 5000:5000 \
-v /home/registry:/var/lib/registry \
--restart always \
--name registry \
registry:2
参数详解
基础配置
参数 | 说明 | 必要性 |
---|---|---|
-p 5000:5000 | 服务暴露端口 | 必选 |
-v /home/registry | 镜像存储目录 | 必选 |
--restart always | 自动重启策略 | 推荐 |
高级配置指南
1. 修改配置文件
docker exec -it registry vi /etc/docker/registry/config.yml
version: 0.1
log:
fields:
service: registry
storage:
delete:
enabled: true # 启用镜像删除功能
filesystem:
rootdirectory: /var/lib/registry
http:
addr: :5000
headers: # CORS配置
Access-Control-Allow-Origin: ['*']
Access-Control-Allow-Methods: ['HEAD','GET','OPTIONS','DELETE']
health:
storagedriver:
enabled: true
interval: 10s
2. 应用配置变更
docker restart registry
安全加固方案
1. 启用认证(推荐)
http:
addr: :5000
auth:
htpasswd:
realm: basic-realm
path: /auth/htpasswd
生成密码文件:
docker run --entrypoint htpasswd registry:2 -Bbn username password > auth/htpasswd
2. HTTPS配置
-v /path/to/certs:/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key
日常管理操作
1. 镜像操作示例
# 标记镜像
docker tag my-image localhost:5000/my-image
# 推送镜像
docker push localhost:5000/my-image
# 拉取镜像
docker pull localhost:5000/my-image
2. 仓库维护命令
# 查看仓库内容
curl -X GET http://localhost:5000/v2/_catalog
# 删除镜像(需启用delete功能)
curl -X DELETE http://localhost:5000/v2/my-image/manifests/<digest>
存储清理策略
1. 自动垃圾回收
docker exec registry registry garbage-collect /etc/docker/registry/config.yml
2. 手动清理空间
# 查看存储使用情况
du -sh /home/registry/
# 定期清理旧镜像
find /home/registry -mtime +30 -exec rm -rf {} \;
生产环境建议
存储后端选择:
storage: s3: accesskey: AWS_ACCESS_KEY secretkey: AWS_SECRET_KEY region: us-east-1 bucket: my-registry-bucket
性能优化:
middleware: storage: - name: cloudfront options: baseurl: https://my.cloudfront.domain/
监控配置:
metrics: prometheus: enabled: true path: /metrics
常见问题解决
Q:推送镜像报错"http: server gave HTTP response to HTTPS client"?
# 修改docker配置(/etc/docker/daemon.json)
{
"insecure-registries": ["myregistry:5000"]
}
Q:存储空间不足?
# 设置存储配额
storage:
filesystem:
maxthreads: 100
rootdirectory: /var/lib/registry
Q:如何迁移仓库数据?
# 1. 停止registry服务
# 2. 打包数据目录
tar -czvf registry_backup.tar.gz /home/registry
# 3. 在新服务器恢复数据
此部署方式:
- 完全可控的私有镜像仓库
- 可视化的镜像管理能力
- 企业级的安全保障
- 灵活的存储扩展方案
提示:定期执行docker exec registry registry garbage-collect
可回收存储空间