Docker私有镜像仓库搭建与认证全攻略

一、引言

在Docker容器化技术广泛应用的今天,企业对于Docker镜像的管理需求日益增长。私有镜像仓库不仅能够提升镜像的传输效率,还能有效保护企业的核心数据与知识产权。本文将深入探讨Docker私有镜像仓库的搭建过程、HTTPS认证配置以及用户权限管理,为开发者与企业用户提供一套完整的解决方案。

二、Docker私有镜像仓库搭建

1. 环境准备

在搭建Docker私有镜像仓库之前,需确保服务器环境满足以下条件:

  • 操作系统:推荐使用CentOS 7或Ubuntu 18.04等主流Linux发行版。
  • Docker版本:建议安装最新稳定版Docker CE或EE。
  • 网络配置:确保服务器拥有公网IP或内网可访问的IP地址,以及开放必要的端口(如5000用于HTTP,443用于HTTPS)。

2. 安装Docker Registry

Docker Registry是Docker官方提供的镜像仓库服务,可通过Docker容器快速部署。

  1. # 拉取Registry镜像
  2. docker pull registry:latest
  3. # 运行Registry容器
  4. docker run -d -p 5000:5000 --restart=always --name registry registry:latest

上述命令将Registry容器运行在5000端口,并设置容器在退出时自动重启。

3. 配置存储与备份

为确保镜像数据的持久化与安全性,需配置外部存储卷。

  1. # 创建存储目录
  2. mkdir -p /data/registry
  3. # 重新运行Registry容器,并挂载存储卷
  4. docker run -d -p 5000:5000 --restart=always --name registry \
  5. -v /data/registry:/var/lib/registry \
  6. registry:latest

同时,建议定期备份/data/registry目录下的数据,以防数据丢失。

三、HTTPS认证配置

为保障镜像传输的安全性,需为Registry配置HTTPS证书。

1. 生成自签名证书

  1. # 创建证书目录
  2. mkdir -p /certs
  3. # 生成私钥
  4. openssl genrsa -out /certs/domain.key 2048
  5. # 生成证书签名请求(CSR)
  6. openssl req -new -key /certs/domain.key -out /certs/domain.csr \
  7. -subj "/C=CN/ST=Beijing/L=Beijing/O=MyCompany/CN=myregistry.example.com"
  8. # 生成自签名证书
  9. openssl x509 -req -days 365 -in /certs/domain.csr -signkey /certs/domain.key -out /certs/domain.crt

2. 配置HTTPS Registry

  1. # 停止并删除原有Registry容器
  2. docker stop registry
  3. docker rm registry
  4. # 重新运行HTTPS Registry容器
  5. docker run -d -p 443:5000 --restart=always --name registry \
  6. -v /data/registry:/var/lib/registry \
  7. -v /certs:/certs \
  8. -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
  9. -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
  10. registry:latest

四、用户权限管理

为实现对Registry的细粒度访问控制,需配置认证机制。

1. 创建认证文件

使用htpasswd工具生成认证文件。

  1. # 安装httpd-tools(包含htpasswd)
  2. yum install httpd-tools -y # CentOS
  3. # 或
  4. apt-get install apache2-utils -y # Ubuntu
  5. # 创建认证文件
  6. mkdir -p /auth
  7. htpasswd -Bc /auth/htpasswd username
  8. # 输入密码并确认

2. 配置认证Registry

  1. # 停止并删除原有Registry容器
  2. docker stop registry
  3. docker rm registry
  4. # 重新运行带认证的HTTPS Registry容器
  5. docker run -d -p 443:5000 --restart=always --name registry \
  6. -v /data/registry:/var/lib/registry \
  7. -v /certs:/certs \
  8. -v /auth:/auth \
  9. -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
  10. -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
  11. -e REGISTRY_AUTH=htpasswd \
  12. -e REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" \
  13. -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
  14. registry:latest

五、客户端配置与使用

1. 配置Docker客户端信任私有Registry

/etc/docker/daemon.json中添加以下配置(若文件不存在则创建):

  1. {
  2. "insecure-registries": [],
  3. "registry-mirrors": [],
  4. "allow-nondistributable-artifacts": ["myregistry.example.com"]
  5. }

对于HTTPS自签名证书,还需将证书添加至Docker的信任链中,或将证书复制至/etc/docker/certs.d/myregistry.example.com/目录下(需创建对应目录)。

2. 登录与推送镜像

  1. # 登录私有Registry
  2. docker login myregistry.example.com
  3. # 输入用户名与密码
  4. # 标记镜像
  5. docker tag myimage:latest myregistry.example.com/myproject/myimage:latest
  6. # 推送镜像
  7. docker push myregistry.example.com/myproject/myimage:latest

六、总结与展望

通过上述步骤,我们成功搭建了一个安全、可靠的Docker私有镜像仓库,并实现了HTTPS认证与用户权限管理。私有镜像仓库的建立,不仅提升了镜像的传输效率与安全性,还为企业提供了灵活的镜像管理策略。未来,随着容器技术的不断发展,私有镜像仓库将扮演更加重要的角色,成为企业DevOps流程中的关键一环。