Docker私有镜像仓库全攻略:从安装到高效使用

第十四篇 - Docker私有镜像仓库的安装和使用

引言

在Docker生态系统中,镜像仓库是存储和分发Docker镜像的核心组件。虽然Docker Hub提供了丰富的公共镜像资源,但在企业级应用中,出于安全性、合规性及性能考虑,搭建私有镜像仓库成为必要选择。本文将详细阐述如何安装和高效使用Docker私有镜像仓库,帮助开发者构建安全、高效的镜像管理环境。

一、环境准备

1.1 服务器选择

选择一台性能稳定、网络可达的服务器作为私有镜像仓库的宿主。建议配置包括:

  • 操作系统:Ubuntu 20.04 LTS或CentOS 8等现代Linux发行版。
  • 硬件要求:至少4GB RAM、20GB可用磁盘空间(根据镜像存储需求调整)。
  • 网络要求:确保服务器有固定的公网IP或内网IP,并开放必要的端口(如5000用于HTTP,443用于HTTPS)。

1.2 Docker安装

在服务器上安装Docker,确保Docker服务正常运行。以Ubuntu为例:

  1. # 更新软件包索引
  2. sudo apt-get update
  3. # 安装依赖
  4. sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
  5. # 添加Docker官方GPG密钥
  6. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  7. # 添加Docker软件源
  8. sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  9. # 安装Docker CE
  10. sudo apt-get update
  11. sudo apt-get install docker-ce docker-ce-cli containerd.io
  12. # 验证安装
  13. sudo docker run hello-world

二、安装Docker Registry

2.1 使用官方Registry镜像

Docker官方提供了Registry镜像,可直接用于搭建私有仓库。

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

此命令将Registry容器运行在5000端口,并设置自动重启。

2.2 配置HTTPS(可选但推荐)

为确保数据传输安全,建议配置HTTPS。需准备SSL证书和私钥。

  1. # 假设证书和私钥已放在/certs目录下
  2. sudo mkdir -p /certs
  3. # 将证书和私钥放入/certs目录,例如cert.pem和key.pem
  4. # 运行支持HTTPS的Registry
  5. sudo docker run -d \
  6. -p 443:443 \
  7. --restart=always \
  8. --name registry \
  9. -v /certs:/certs \
  10. -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
  11. -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/cert.pem \
  12. -e REGISTRY_HTTP_TLS_KEY=/certs/key.pem \
  13. registry:2

三、配置认证机制

为保护私有仓库,需配置认证。可使用htpasswd工具生成用户名密码文件。

3.1 生成htpasswd文件

  1. # 安装apache2-utils(Ubuntu)
  2. sudo apt-get install apache2-utils
  3. # 生成htpasswd文件
  4. sudo htpasswd -Bc /auth/htpasswd username
  5. # 输入密码并确认

3.2 配置Registry使用认证

  1. # 运行带认证的Registry
  2. sudo docker run -d \
  3. -p 5000:5000 \
  4. --restart=always \
  5. --name registry \
  6. -v /auth:/auth \
  7. -e REGISTRY_AUTH=htpasswd \
  8. -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
  9. -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
  10. registry:2

四、镜像推送与拉取

4.1 标记并推送镜像

  1. # 标记本地镜像
  2. sudo docker tag my-image:latest localhost:5000/my-image:latest
  3. # 若使用HTTPS且域名非localhost,替换localhost为域名
  4. # 登录私有仓库(首次需要)
  5. sudo docker login localhost:5000
  6. # 输入用户名和密码
  7. # 推送镜像
  8. sudo docker push localhost:5000/my-image:latest

4.2 拉取镜像

  1. # 从私有仓库拉取镜像
  2. sudo docker pull localhost:5000/my-image:latest

五、私有仓库的管理与维护

5.1 存储管理

Registry默认将镜像存储在容器的/var/lib/registry目录下。可通过挂载卷来持久化数据。

  1. # 创建本地存储目录
  2. sudo mkdir -p /var/lib/registry-data
  3. # 运行Registry并挂载卷
  4. sudo docker run -d \
  5. -p 5000:5000 \
  6. --restart=always \
  7. --name registry \
  8. -v /var/lib/registry-data:/var/lib/registry \
  9. registry:2

5.2 垃圾回收

长期运行后,Registry中可能积累大量未使用的镜像层。可使用registry garbage-collect命令进行清理。

  1. # 进入Registry容器
  2. sudo docker exec -it registry sh
  3. # 执行垃圾回收(需在容器内安装相应工具或直接使用Registry内置功能)
  4. # 对于官方Registry镜像,可通过以下方式触发(需先停止Registry)
  5. sudo docker stop registry
  6. sudo docker run --rm -v /var/lib/registry-data:/var/lib/registry registry:2 garbage-collect /etc/docker/registry/config.yml
  7. # 注意:实际路径和配置可能需根据环境调整

更安全的做法是使用支持垃圾回收的第三方Registry管理工具,如vmware/harbor

六、高级功能与最佳实践

6.1 使用Harbor增强功能

Harbor是一个开源的企业级Docker Registry项目,提供了用户管理、访问控制、镜像复制等高级功能。

  1. # 安装Harbor(示例,具体步骤参考Harbor官方文档)
  2. # 下载Harbor安装包
  3. wget https://github.com/goharbor/harbor/releases/download/v2.4.0/harbor-offline-installer-v2.4.0.tgz
  4. # 解压并编辑harbor.yml配置文件
  5. tar xvf harbor-offline-installer-v2.4.0.tgz
  6. cd harbor
  7. vim harbor.yml
  8. # 配置hostname、https、port、password等
  9. # 运行安装脚本
  10. sudo ./install.sh

6.2 镜像命名与标签策略

制定合理的镜像命名与标签策略,便于镜像版本管理和追踪。例如,使用<项目>-<环境>-<版本>的命名规则。

6.3 定期备份

定期备份Registry数据,以防数据丢失。可使用rsync或制作容器快照等方式。

结论

搭建Docker私有镜像仓库是提升企业Docker应用安全性和效率的关键步骤。通过本文的介绍,开发者可以了解到从环境准备、Registry安装、HTTPS配置、认证机制到镜像推送与拉取、管理与维护的全过程。结合Harbor等高级工具,可以进一步丰富私有仓库的功能,满足复杂的企业需求。希望本文能为开发者在实际工作中提供有价值的参考。