Docker容器镜像仓库私有化部署如何操作

最近公司要求搭建私有Docker镜像仓库,看了官方文档有些地方不太明白。想请教各位:

  1. 部署私有镜像仓库需要准备哪些基础环境?服务器配置有什么要求?
  2. 用Harbor和直接用Docker Registry有什么区别?哪个更适合中小型企业?
  3. 部署过程中SSL证书配置总是报错,有没有详细的避坑指南?
  4. 如何设置访问权限控制?想实现不同项目组只能访问自己的镜像库
  5. 后期维护要注意哪些问题?比如镜像清理、备份策略等 求有实际部署经验的大神分享下具体操作步骤和注意事项,谢谢!
3 回复
  1. 环境准备:确保服务器安装了 Docker 和 Docker-Compose。推荐使用 CentOS 7+ 或 Ubuntu 18+。

  2. 拉取官方 registry 镜像

    docker pull registry:2
    
  3. 创建配置文件: 在 /data/registry 创建配置目录,并添加 config.yml 文件,内容如下:

    version: 0.1
    log:
      fields:
        service: registry
    storage:
      filesystem:
        rootdirectory: /var/lib/registry
    http:
      addr: :5000
      secret: 随机字符串
      tls:
        certificate: /path/to/cert.pem
        key: /path/to/key.pem
    
  4. 启动私有仓库

    mkdir -p /data/registry && cd /data/registry
    docker run -d -p 5000:5000 --restart=always --name registry \
      -v `pwd`:/var/lib/registry \
      registry:2
    
  5. 上传镜像: 标记镜像为私有仓库地址:

    docker tag nginx:latest localhost:5000/nginx:latest
    

    推送到私有仓库:

    docker push localhost:5000/nginx:latest
    
  6. 配置客户端: 编辑 /etc/docker/daemon.json 添加:

    {
      "insecure-registries": ["localhost:5000"]
    }
    

    重启 Docker 服务并登录:

    docker login localhost:5000
    
  7. 优化与安全

    • 使用 Nginx 反代增强安全性。
    • 开启 HTTPS(需配置证书)。
    • 设置访问权限和用户认证(如使用 dexhtpasswd)。

以下是一个简单的Docker私有镜像仓库部署教程:

  1. 安装Docker:确保服务器已安装Docker。未安装的可以使用命令 sudo apt-get update && sudo apt-get install docker.io(基于Ubuntu)。

  2. 拉取官方Registry镜像

    sudo docker pull registry:2
    
  3. 运行Registry容器

    sudo mkdir -p /opt/registry/{auth,certs,data}
    sudo docker run -d -p 5000:5000 --restart=always --name registry \
      -v /opt/registry/data:/var/lib/registry \
      -v /opt/registry/auth:/auth \
      -e REGISTRY_AUTH=htpasswd \
      -e REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" \
      -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
      -v /opt/registry/certs:/certs \
      -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
      -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
      registry:2
    

    替换 domain.crtdomain.key 为你的SSL证书和私钥。

  4. 创建用户

    sudo htpasswd -Bbn 用户名 密码 > /opt/registry/auth/htpasswd
    
  5. 标记镜像:例如将本地镜像 my-image 打上标签:

    sudo docker tag my-image localhost:5000/my-image
    
  6. 推送镜像

    sudo docker push localhost:5000/my-image
    
  7. 配置客户端信任:如果使用自签名证书,需将证书添加到客户端信任库中。

完成以上步骤后,你就成功搭建了一个私有的Docker镜像仓库。

以下是Docker私有镜像仓库部署教程(使用开源的Registry方案):

  1. 快速部署单机版
# 拉取registry镜像
docker pull registry:2

# 运行私有仓库
docker run -d \
  -p 5000:5000 \
  --name registry \
  -v /myregistry:/var/lib/registry \
  registry:2
  1. 配置TLS证书(安全访问)
# 生成自签名证书
openssl req -newkey rsa:4096 -nodes -sha256 \
  -keyout domain.key -x509 -days 365 -out domain.crt

# 运行带证书的registry
docker run -d \
  -p 5000:5000 \
  -v /myregistry:/var/lib/registry \
  -v /certs:/certs \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
  -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
  registry:2
  1. 使用私有仓库
# 标记镜像
docker tag myimage localhost:5000/myimage

# 推送镜像
docker push localhost:5000/myimage

# 拉取镜像
docker pull localhost:5000/myimage
  1. 高级功能(可选)
  • 添加认证(使用htpasswd)
  • 配置Web UI(如docker-registry-frontend)
  • 集群部署(配置后端存储为S3等)

注意事项:

  1. 生产环境建议使用Harbor等企业级方案
  2. 默认数据存储在/var/lib/registry,注意定期备份
  3. 跨节点访问需配置证书并修改docker daemon的insecure-registries设置

常用管理命令:

# 查看仓库中的镜像
curl -X GET http://localhost:5000/v2/_catalog

# 删除镜像(需启用删除功能)
docker exec registry registry garbage-collect /etc/docker/registry/config.yml
回到顶部