Docker镜像的使用已经成为日常部署的基础手段,但当镜像全部依赖 Docker Hub 或第三方公共仓库时,会逐渐暴露出带宽受限、拉取速度慢、镜像不可控以及安全审计困难等问题。尤其是在内网环境或者对数据安全要求较高的生产系统中,搭建一个属于自己的 Docker 私有仓库几乎是必选项。CentOS 7 虽然已经逐步退出主流维护周期,但在不少存量服务器中仍然广泛存在,因此在这个系统上完成 Docker Registry 的部署与镜像管理依然具有很强的现实意义。本文围绕 CentOS 7 环境,从安装 Docker、部署私有仓库、配置基础认证,到镜像推送、拉取以及库内镜像删除与垃圾回收,做一次相对完整的实战整理。
一、基础环境准备与Docker安装
在开始之前,需要确认系统环境本身是干净且可用的 CentOS 7,内核版本建议在 3.10 以上。虽然 Docker 对内核版本有一定要求,但在 CentOS 7 默认内核下运行 Registry 并不会有太大问题。首先要做的是更新系统并安装必要依赖工具,这一步看似简单,但在实际生产环境中经常会被忽略,从而导致后续证书、网络或者存储挂载出现隐性问题。
系统更新可以通过 yum update -y 完成,然后安装一些基础工具包,例如 yum-utils、device-mapper-persistent-data 和 lvm2,这些组件主要用于 Docker 存储驱动的支持。完成基础依赖后,就可以正式添加 Docker 官方仓库并安装 Docker Engine。
在 CentOS 7 上安装 Docker 通常采用如下方式:
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io
安装完成后启动 Docker 服务并设置开机自启:
systemctl start docker
systemctl enable docker
执行 docker version 如果能够正常输出客户端与服务端信息,说明 Docker 已经在系统中运行正常。此时的环境已经具备运行私有镜像仓库的基础条件。
二、部署 Docker Registry 私有镜像仓库
Docker 官方提供了一个非常轻量级的镜像仓库服务 registry,它本身就是一个标准 Docker 镜像,因此部署起来非常简单,不需要复杂的软件安装过程。在生产环境中,这种方式被广泛使用,尤其适合中小规模镜像管理。
首先拉取 registry 镜像:
docker pull registry:2
然后创建本地存储目录,用于持久化镜像数据:
mkdir -p /data/registry
接下来启动容器:
docker run -d \
--name registry \
-p 5000:5000 \
-v /data/registry:/var/lib/registry \
registry:2
此时,一个最基础的 Docker 私有仓库已经运行在本机 5000 端口上。访问 http://服务器IP:5000/v2/_catalog 如果返回空 JSON,说明仓库已经正常工作。
不过在实际生产中,这样的配置只能算“能用”,并不能算“可用”。因为默认 registry 没有认证、没有 HTTPS,也没有访问控制,这在内网测试可以接受,但在企业环境中是明显不安全的。
三、配置基础认证与访问控制
为了避免任何人都可以随意 push 或 pull 镜像,通常会为 registry 增加一个简单的 HTTP Basic Auth 认证机制。实现方式主要依赖 htpasswd。
首先安装工具:
yum install -y httpd-tools
创建认证文件:
mkdir -p /auth
htpasswd -Bbn admin 123456 > /auth/htpasswd
这里的用户名是 admin,密码是 123456,实际环境中应设置复杂密码。
重新启动 registry 容器,并挂载认证文件:
docker run -d \
--name registry \
-p 5000:5000 \
-v /data/registry:/var/lib/registry \
-v /auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \
registry:2
完成后再次访问仓库时,就会要求输入用户名和密码,这一步虽然简单,但在实际生产环境中非常关键,因为它直接决定镜像仓库是否具备基础安全能力。
四、客户端推送与拉取镜像测试
仓库搭建完成后,需要在客户端进行测试。默认情况下 Docker 不允许直接使用 HTTP 仓库,因此需要修改 Docker 配置。
编辑 /etc/docker/daemon.json:
{
"insecure-registries": ["192.168.1.10:5000"]
}
这里的 IP 替换为你的 registry 服务器地址。
然后重启 Docker:
systemctl restart docker
接下来测试镜像推送流程。首先给本地镜像打标签:
docker tag nginx 192.168.1.10:5000/nginx:v1
登录仓库:
docker login 192.168.1.10:5000
输入刚才创建的用户名和密码后执行推送:
docker push 192.168.1.10:5000/nginx:v1
如果上传成功,就可以在仓库中看到该镜像已经存在。此时再从其他机器执行 pull 操作,就可以直接使用内网镜像源,大幅提升部署效率。
五、查看仓库镜像结构与基础管理
Docker Registry 本身提供了简单的 HTTP API,可以用来查看当前仓库中的镜像列表。
查看所有仓库名称:
curl http://192.168.1.10:5000/v2/_catalog
返回类似:
{"repositories":["nginx"]}
查看某个镜像的标签:
curl http://192.168.1.10:5000/v2/nginx/tags/list
这对于后期做镜像清理非常重要,因为 Registry 本身不会主动提供可视化管理界面,一切操作都依赖 API 或手动管理。
六、删除 Docker 私有仓库中的镜像
很多人会误以为在 Docker Registry 中执行 docker rmi 就可以删除仓库镜像,但实际上这是完全错误的。Registry 是独立存储系统,镜像删除必须通过 API 或文件层面清理。
首先需要开启删除支持,在启动 registry 时加入环境变量:
-e "REGISTRY_STORAGE_DELETE_ENABLED=true"
如果已经运行,可以删除容器重新创建。
接下来执行删除操作,需要先获取 digest:
curl -I -X GET http://192.168.1.10:5000/v2/nginx/manifests/v1
在返回头中找到 Docker-Content-Digest,类似:
sha256:xxxxxxxxxxxx
然后执行删除:
curl -X DELETE http://192.168.1.10:5000/v2/nginx/manifests/sha256:xxxxxxxxxxxx
注意,这一步只是逻辑删除,镜像文件实际上仍然存在磁盘中。
七、执行垃圾回收释放磁盘空间
如果长期使用 Registry 而不做清理,磁盘会迅速膨胀,这是很多人踩坑的地方。删除镜像只是删除索引,不会立即释放空间,必须执行 garbage-collect。
首先停止 registry 容器:
docker stop registry
然后执行垃圾回收:
docker run --rm \
-v /data/registry:/var/lib/registry \
registry:2 garbage-collect /etc/docker/registry/config.yml
如果没有 config 文件,可以自定义一个基础配置。
执行完成后,磁盘空间才会真正释放。

最后重新启动 registry:
docker start registry
八、生产环境中的一些实际建议
在真实环境中,Docker 私有仓库往往不会以单节点形式存在,因为单点 registry 存在明显风险,比如磁盘损坏、服务宕机或者误删数据。因此更常见的做法是结合 NFS 或对象存储进行持久化,同时配合 Nginx 做 HTTPS 反向代理。
另外,在镜像管理上也建议引入版本规范,比如 v1.0.0、release-2026-06 这种方式,而不是简单使用 latest。否则在镜像清理时很容易误删生产版本。
如果是企业级使用,还可以考虑 Harbor 这种带 UI、权限控制、审计日志的镜像仓库系统,但对于轻量环境或学习环境来说,registry 已经完全足够。
在 CentOS 7 上搭建 Docker 私有仓库的过程并不复杂,本质上就是运行一个 registry 容器,但真正复杂的部分其实在后续的管理上,包括权限控制、镜像规范、删除机制以及磁盘回收。如果只是“能用”,几条 docker run 命令就能解决问题,但如果要“稳定可持续使用”,就必须把认证、安全、清理策略一起设计进去。

全球服务器测评

