一、概述
本文将详细介绍如何在本地搭建一个 Docker 私有 Registry 仓库,并实现镜像的上传和管理。通过私有仓库,可以方便地在本地网络中存储和分发 Docker 镜像,提高开发和部署效率。
二、搭建步骤
(一)下载Docker Registry镜像
1. 命令:
2. 解析:
- docker pull 是 Docker 的命令,用于从 Docker Hub 下载指定的镜像。
- registry 是 Docker 官方提供的 Registry 镜像,用于搭建私有仓库。
- 默认情况下,docker pull 会下载最新版本的镜像(latest 标签)。
(二)启动Docker Registry容器
1. 命令:
2. 解析:
- -d:表示以守护进程模式运行容器(后台运行)。
- -p 5000:6000:将容器的 5000 端口映射到宿主机的 6000 端口,用于访问私有仓库。
- --restart=always:设置容器在退出后自动重启,确保仓库服务始终可用。
- --name registry:为容器指定名称 registry,便于后续管理。
- registry:指定使用的镜像名称(即之前下载的 registry 镜像)。
3. 验证容器是否启动成功:
如果看到名为 registry 的容器正在运行,并且端口映射正确,说明启动成功。
(三)配置Docker客户端以信任私有仓库
由于私有仓库默认使用 HTTPS 协议,Docker 客户端需要配置为信任该仓库。
编辑 /etc/docker/daemon.json 文件:
添加以下内容:
insecure-registries:指定不安全的仓库地址,允许 Docker 客户端通过 HTTP 协议访问该地址。
重启 Docker 服务:
重启 Docker 服务后,配置生效。
如果使用的是 Docker Desktop 则参考下图修改:
(四)上传镜像到私有仓库
此部分功能暂时不能使用 Podman 替代
1. 标记镜像:
- docker image tag:用于为镜像重新标记一个新的名称和标签。
- nginx:latest:本地已有的镜像名称和标签。
- 10.10.10.189:6000/docker.io/library/nginx:latest:目标仓库地址和镜像名称。
2. 推送镜像到私有仓库:
- docker push:将标记后的镜像推送到指定的仓库地址。
- 如果推送成功,会显示镜像层的上传进度和最终的摘要信息。
(五)验证镜像是否上传成功
通过 API 查看仓库中的镜像:
三、常见问题及解决方法
(一)无法连接到私有仓库
1. 问题描述:
2. 解决方法:
- 确保 /etc/docker/daemon.json 文件中正确配置了 insecure-registries。
- 确保 Docker 服务已重启。
- 确保仓库地址正确,且防火墙允许访问 6000 端口。
(二)网络问题导致无法解析地址
1. 问题描述: 如果尝试访问 http://10.10.10.189:6000 或 https://10.10.10.189:6000/v2/ 时,可能会遇到解析失败的问题。
2. 解决方法:
- 检查仓库地址是否正确,确保 IP 地址和端口无误。
- 确保网络连接正常,可以尝试 ping 或 curl 测试连通性。
- 如果问题仍然存在,可能是网络配置或防火墙限制,建议检查网络设置或联系网络管理员。
(三)是否可以使用 Podman 替代
目前测试 push 镜像功能是有问题的,在推送的时候会报错,其他功能都是正常的。
如下:
使用 docker 执行上述命令不会报错。
参考链接
- Docker Registry 私有仓库简单搭建
- Docker/DockerHub 国内镜像源/加速列表(4月18日更新-长期维护)
- 南京大学开源镜像
- docker registry 指定目录
- 快速搭建并迁移离线docker registry镜像仓库
- 解决docker:denied: requested access to the resource is denied
- 使用 podman 推送数据到私有仓库的 3 个问题记录
- 【K8S】docker打过tag标签后向镜像仓库推送镜像(push)
- Docker部署私有仓库(registry&Harbor)
- OCI Distribution Specification.
- Distribution Registry