CentOS 搭建 Docker 私有镜像仓库
搭建 Docker 私有镜像仓库能为团队提供高效、安全的镜像管理方案。下面将详细介绍每个步骤的操作细节,其中命令部分均用代码块展示。
一、环境准备
要搭建 Docker 私有镜像仓库,首先得确保服务器环境符合要求,这是后续操作顺利进行的基础。
1. 服务器要求
建议使用 CentOS 7 或 8 系统,内存至少 2GB,存储空间 20GB 以上,这样能保证仓库在处理多个镜像时运行流畅。
2. 安装 Docker Engine
Docker 是搭建私有仓库的核心依赖,不同 CentOS 版本安装命令略有差异。
-
CentOS 7 安装 Docker:
yum install -y docker
-
CentOS 8 安装 Docker:
dnf install -y docker
安装完成后,需要启动 Docker 服务并设置开机自启,确保服务器重启后 Docker 能自动运行。
systemctl start docker
systemctl enable docker
3. 开放必要端口
Docker 私有仓库默认使用 5000 端口,需在防火墙中开放该端口,否则其他客户端无法访问仓库。
firewall-cmd --zone=public --add-port=5000/tcp --permanent
firewall-cmd --reload
执行上述命令后,5000 端口将被永久开放,防火墙配置也会立即生效。
二、搭建 Docker 私有镜像仓库
准备工作完成后,就可以开始搭建私有仓库了,主要包括拉取仓库镜像和启动仓库容器两个步骤。
1. 拉取 registry 镜像
Docker 官方提供的 registry 镜像专门用于搭建私有仓库,使用以下命令拉取:
docker pull registry
拉取过程中,Docker 会从官方仓库下载镜像文件。拉取完成后,用docker images命令可查看是否成功,若列表中出现 registry 镜像信息,说明拉取成功。
docker images
2. 启动仓库容器
启动容器时,需要进行端口映射、命名容器以及数据挂载等配置,确保仓库能正常运行且数据可持久化。
docker run -d -p 5000:5000 --name myregistry -v /opt/registry:/var/lib/registry registry
-
-d:让容器在后台运行,不占用当前终端。
-
-p 5000:5000:将容器的 5000 端口映射到宿主机的 5000 端口,这样外部才能通过宿主机端口访问仓库。
-
--name myregistry:给容器命名为 myregistry,方便后续管理和操作。
-
-v /opt/registry:/var/lib/registry:把宿主机的/opt/registry目录挂载到容器的/var/lib/registry目录,容器内的镜像数据会存储到宿主机的该目录,即使容器被删除,数据也不会丢失。
启动后,用docker ps命令查看容器是否正常运行,若状态为 "Up",则表示仓库容器启动成功。
docker ps
三、配置仓库访问权限
为了保证私有仓库的安全性,需要配置访问权限,只有授权用户才能进行推送和拉取操作。
1. 安装 httpd-tools 工具
该工具用于生成存储用户名和密码的文件,是实现身份认证的关键。
-
CentOS 7 安装:
yum install -y httpd-tools
-
CentOS 8 安装:
dnf install -y httpd-tools
2. 创建认证信息存储目录
专门创建一个目录来存放认证文件,便于管理。
mkdir -p /opt/registry/auth
-p选项确保如果目录不存在,会自动创建父目录。
3. 生成密码文件
通过 htpasswd 命令生成包含用户信息的密码文件。
-
首次创建用户:
htpasswd -Bc /opt/registry/auth/htpasswd username
这里的username是你要创建的用户名,执行命令后会提示输入密码,输入两次确认后,就会在/opt/registry/auth目录下生成htpasswd文件。-B表示使用 bcrypt 算法加密密码,更安全;-c表示创建新文件。
- 添加其他用户:
如果需要添加更多用户,不需要-c选项,否则会覆盖现有文件。
htpasswd -B /opt/registry/auth/htpasswd another_username
4. 重启仓库容器应用认证配置
先停止并删除之前的容器,再用新的配置启动。
docker stop myregistry
docker rm myregistry
然后执行以下命令重新启动容器,加载认证配置:
docker run -d -p 5000:5000 --name myregistry -v /opt/registry:/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" registry
其中,-v /opt/registry/auth:/auth将存放认证文件的目录挂载到容器内;-e设置的环境变量指定了认证方式、认证领域和密码文件路径。
四、配置客户端访问仓库
其他用户的客户端需要进行相应配置才能连接到私有仓库。
1. 非 HTTPS 访问配置
如果仓库未配置 HTTPS,客户端需要允许非 HTTPS 访问。
编辑客户端的/etc/docker/daemon.json文件(不存在则创建):
vi /etc/docker/daemon.json
在文件中添加仓库地址:
{"insecure-registries":["仓库服务器IP:5000"]}
保存退出后,重启 Docker 服务使配置生效:
systemctl restart docker
2. 登录仓库
配置完成后,用户需要登录才能进行操作。
docker login 仓库服务器IP:5000
输入正确的用户名和密码后,显示 "Login Succeeded" 则登录成功。
五、测试私有仓库
完成上述配置后,需要测试仓库是否能正常接收和提供镜像。
1. 推送镜像到仓库
先在客户端对本地镜像进行标记,使其符合私有仓库的命名规范。
docker tag nginx:latest 仓库服务器IP:5000/mynginx:v1
这里以 nginx 镜像为例,仓库服务器IP:5000是私有仓库地址,mynginx:v1是自定义的镜像名和标签。
然后推送标记后的镜像到仓库:
docker push 仓库服务器IP:5000/mynginx:v1
推送过程中会显示进度,完成后提示推送成功。
2. 从仓库拉取镜像
在另一台已配置好的客户端上,拉取刚才推送的镜像,测试仓库是否能正常提供镜像。
docker pull 仓库服务器IP:5000/mynginx:v1
若拉取成功,说明仓库工作正常。
六、仓库维护与扩展
对仓库进行定期维护和合理扩展,能保证其长期稳定运行。
1. 查看仓库镜像信息
通过 HTTP 请求可以查看仓库中的镜像列表和标签信息。
-
查看所有镜像:在浏览器或用 curl 命令访问http://仓库服务器IP:5000/v2/_catalog。
-
查看指定镜像标签:访问http://仓库服务器IP:5000/v2/镜像名称/tags/list。
2. 清理冗余数据
随着镜像的频繁推送和删除,仓库会产生无用的冗余数据,需要定期清理。
先进入仓库容器:
docker exec -it myregistry sh
然后执行清理命令:
registry garbage-collect /etc/docker/registry/config.yml
该命令会删除未被引用的镜像数据,释放存储空间。
3. 配置 HTTPS 访问(可选)
为了提高安全性,可配置 HTTPS 访问。需要准备 SSL 证书,然后在启动仓库容器时添加证书相关的挂载和环境变量,具体可参考 Docker 官方文档的详细配置步骤。