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 {} \;

生产环境建议

  1. 存储后端选择

    storage:
      s3:
        accesskey: AWS_ACCESS_KEY
        secretkey: AWS_SECRET_KEY
        region: us-east-1
        bucket: my-registry-bucket
  2. 性能优化

    middleware:
      storage:
        - name: cloudfront
          options:
            baseurl: https://my.cloudfront.domain/
  3. 监控配置

    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可回收存储空间

添加新评论