详解私有 Docker Registry 部署方案及用户手册
本文档旨在帮助在 Ubuntu 18.04 系统上从零开始部署一个私有的 Docker Registry(镜像仓库),并提供详细的使用说明。通过本文档,您将完成以下任务:
- 获取当前 Ubuntu 系统信息
- 安装 Docker 引擎
- 运行私有 Registry 容器
- 配置 Docker 客户端以使用 HTTP 私有仓库
- 测试推送和拉取镜像
- 多机访问配置
- 常用维护命令
1. 系统环境检查
在开始之前,请确认您的 Ubuntu 系统版本。执行以下命令查看发行版信息:
cat /etc/os-release
示例输出:
NAME="Ubuntu" VERSION="18.04.5 LTS (Bionic Beaver)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 18.04.5 LTS" VERSION_ID="18.04" ...
如果您的系统是 Ubuntu 18.04,则可以继续下面的步骤。其他版本可能略有差异,但整体流程相似。
2. 安装 Docker
Docker 是运行私有仓库的基础。我们将使用官方仓库安装最新版本的 Docker CE。
2.1 更新包索引并安装依赖
sudo apt-get update
sudo apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
2.2 添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
2.3 添加稳定版 Docker 仓库
sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"
2.4 安装 Docker CE
sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io
2.5 启动 Docker 并设置开机自启
sudo systemctl start docker sudo systemctl enable docker
2.6 (可选)将当前用户加入 docker 组
为了避免每次使用 Docker 都需要 sudo,可以将当前用户加入 docker 组:
sudo usermod -aG docker $USER
重要:执行该命令后,需要重新登录或者执行 newgrp docker 使组权限生效。
3. 部署私有 Docker Registry
我们将使用 Docker 官方提供的 registry:2 镜像来运行一个轻量级的私有仓库。
3.1 创建数据存储目录
镜像数据将持久化保存在宿主机的 /data/docker-registry 目录下,请确保该目录存在且 Docker 有读写权限:
sudo mkdir -p /data/docker-registry
3.2 运行 Registry 容器
执行以下命令启动 Registry 容器:
docker run -d \ --name docker-registry \ --restart=always \ -p 5000:5000 \ -v /data/docker-registry:/var/lib/registry \ -e REGISTRY_STORAGE_DELETE_ENABLED=true \ registry:2
参数说明:
-d:后台运行容器--name docker-registry:指定容器名称--restart=always:容器退出时自动重启-p 5000:5000:将宿主机的 5000 端口映射到容器的 5000 端口-v /data/docker-registry:/var/lib/registry:挂载数据卷,将镜像数据持久化到宿主机-e REGISTRY_STORAGE_DELETE_ENABLED=true:启用删除镜像的功能(可选)registry:2:使用的镜像名称和标签
执行后,Docker 会自动拉取 registry:2 镜像并启动容器。如果看到类似以下输出,则表示容器已成功启动:
Unable to find image 'registry:2' locally 2: Pulling from library/registry ... Digest: sha256:... Status: Downloaded newer image for registry:2 95792afadf5365eeb296a670c3f7ee11b82df0580260686a50527441d1d1585a
3.3 验证容器运行状态
docker ps
应该能看到名为 docker-registry 的容器,状态为 Up。同时可以通过 curl 测试 Registry API 是否正常:
curl http://localhost:5000/v2/
如果返回空 JSON {},说明 Registry 运行正常。
4. 配置 Docker 客户端
Docker 默认要求仓库使用 HTTPS 连接,而我们的私有仓库仅提供 HTTP 服务。因此需要将仓库地址添加到 Docker 的 insecure-registries 列表中。
4.1 编辑 Docker 配置文件
sudo vim /etc/docker/daemon.json
如果文件不存在,则新建。添加以下内容:
{
"insecure-registries": ["localhost:5000"]
}注意:如果要从其他机器访问此私有仓库,请将
localhost替换为该服务器的实际 IP 地址(例如192.168.1.100:5000)。并且需要在每一台需要访问此仓库的机器上都进行相同配置。
4.2 重启 Docker 服务
sudo systemctl restart docker
4.3 重新启动 Registry 容器
Docker 重启后会停止所有容器,需要手动启动 Registry 容器:
docker start docker-registry
5. 测试私有仓库
5.1 拉取测试镜像
docker pull hello-world
5.2 为镜像打上仓库地址标签
docker tag hello-world localhost:5000/hello-world:test
5.3 推送镜像到私有仓库
docker push localhost:5000/hello-world:test
推送成功后,会显示镜像的 layer 上传信息。
5.4 查看仓库中的镜像列表
curl http://localhost:5000/v2/_catalog
应输出类似 {"repositories":["hello-world"]}。
5.5 从私有仓库拉取镜像
先删除本地镜像,模拟新环境:
docker rmi hello-world localhost:5000/hello-world:test
然后从私有仓库拉取:
docker pull localhost:5000/hello-world:test
运行拉取的镜像:
docker run --rm localhost:5000/hello-world:test
如果看到 Hello-World 的输出,则整个流程成功。
6. 从其他机器访问私有仓库
6.1 确定服务器 IP 地址
在运行 Registry 的服务器上执行:
ip addr show # 或 ifconfig
找到内网 IP(如 192.168.1.100)或公网 IP。
6.2 在客户端机器上配置 insecure-registries
编辑客户端的 /etc/docker/daemon.json,添加:
{
"insecure-registries": ["服务器IP:5000"]
}重启客户端 Docker:
sudo systemctl restart docker
6.3 推送镜像到远程仓库
在客户端机器上,为镜像打标签并推送:
docker tag hello-world 服务器IP:5000/hello-world:test docker push 服务器IP:5000/hello-world:test
6.4 拉取镜像
docker pull 服务器IP:5000/hello-world:test
7. 防火墙设置
如果服务器启用了防火墙(如 ufw),需要开放 5000 端口:
sudo ufw allow 5000
8. 常用管理命令
查看容器状态
docker ps -a | grep docker-registry
查看容器日志
docker logs docker-registry
实时跟踪日志:docker logs -f docker-registry
停止/启动容器
docker stop docker-registry docker start docker-registry
查看存储使用情况
du -sh /data/docker-registry
列出仓库中的所有镜像
curl http://localhost:5000/v2/_catalog
查看某个镜像的所有标签
curl http://localhost:5000/v2/<镜像名>/tags/list
9. 常见问题
Q: 为什么推送镜像时报错http: server gave HTTP response to HTTPS client?
A: 因为没有将仓库地址添加到 insecure-registries,请按照第 4 节配置并重启 Docker。
Q: 如何删除私有仓库中的镜像?
A: Registry 默认不支持通过 API 直接删除镜像,需要先启用删除功能(已在启动命令中通过 -e REGISTRY_STORAGE_DELETE_ENABLED=true 启用),然后通过 Docker Registry API 进行删除,操作较复杂。建议使用 GC(垃圾回收)功能清理未使用的 blob。
Q: 镜像存储位置空间不足怎么办?
A: 可以挂载更大的磁盘到 /data/docker-registry,或者定期清理无用镜像。清理后需要手动执行垃圾回收:docker exec docker-registry registry garbage-collect /etc/docker/registry/config.yml
Q: 如何为私有仓库启用 HTTPS?
A: 生产环境强烈建议启用 HTTPS。可以通过配置 Registry 使用 SSL 证书实现,具体步骤请参考 Docker Registry 官方文档。
10. 总结
至此,您已经成功在 Ubuntu 18.04 上部署了私有的 Docker Registry,并掌握了基本的使用方法。该私有仓库可以用于团队内部共享镜像,节省公网带宽,并提升镜像拉取速度。更多相关私有 Docker Registry 部署内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Docker Compose 与 Harbor 私有仓库详解
本文将探讨Docker Compose多容器编排工具与Harbor企业级私有仓库的核心技术,帮助读者掌握从容器管理到镜像安全存储的完整解决方案,感兴趣的朋友一起看看吧2025-06-06
docker-compose管理容器network与ip问题
这篇文章主要介绍了docker-compose管理容器network与ip问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-01-01


最新评论