一、概述
本文将详细介绍如何在本地搭建一个 Docker 私有 Registry 仓库,并实现镜像的上传和管理。通过私有仓库,可以方便地在本地网络中存储和分发 Docker 镜像,提高开发和部署效率。
二、搭建步骤
(一)下载 Docker Registry 镜像
-
命令:
docker pull registry
-
解析:
-
docker pull
是 Docker 的命令,用于从 Docker Hub 下载指定的镜像。 -
registry
是 Docker 官方提供的 Registry 镜像,用于搭建私有仓库。 -
默认情况下,
docker pull
会下载最新版本的镜像(latest
标签)。
-
(二)启动 Docker Registry 容器
-
命令:
docker run -d -p 5000:5000 --restart=always --name registry registry
-
解析:
-
-d
:表示以守护进程模式运行容器(后台运行)。 -
-p 5000:5000
:将容器的 5000 端口映射到宿主机的 5000 端口,用于访问私有仓库。 -
--restart=always
:设置容器在退出后自动重启,确保仓库服务始终可用。 -
--name registry
:为容器指定名称registry
,便于后续管理。 -
registry
:指定使用的镜像名称(即之前下载的registry
镜像)。
-
-
验证容器是否启动成功:
docker ps
如果看到名为
registry
的容器正在运行,并且端口映射正确,说明启动成功。
(三)配置 Docker 客户端以信任私有仓库
由于私有仓库默认使用 HTTPS协议,Docker 客户端需要配置为信任该仓库。
-
编辑
/etc/docker/daemon.json
文件:vim /etc/docker/daemon.json
添加以下内容:
{ "insecure-registries": ["192.168.65.131:5000"] }
-
insecure-registries
:指定不安全的仓库地址,允许 Docker 客户端通过 HTTP 协议访问该地址。
-
-
重启 Docker 服务:
systemctl restart docker
重启 Docker 服务后,配置生效。
(四)上传镜像到私有仓库
-
标记镜像:
docker tag nginx:latest 192.168.65131:5000/nginx:latest
-
docker tag
:用于为镜像重新标记一个新的名称和标签。 -
nginx:latest
:本地已有的镜像名称和标签。 -
nginx:5000/nginx:latest
:目标仓库地址和镜像名称。
-
-
推送镜像到私有仓库:
docker push 192.168.65.131:5000/nginx:latest
-
docker push
:将标记后的镜像推送到指定的仓库地址。 -
如果推送成功,会显示镜像层的上传进度和最终的摘要信息。
-
(五)验证镜像是否上传成功
-
通过 API 查看仓库中的镜像:
curl 192.168.65.131:5000/v2/_catalog
-
如果返回类似以下内容,说明镜像已成功上传:
-
三、常见问题及解决方法
(一)无法连接到私有仓库
-
问题描述: 在推送或拉取镜像时,可能会遇到以下错误:
Get "https://192.168.65.131:5000/v2/": dial tcp 192.168.65.131:5000: connect: connection refused
-
解决方法:
-
确保
/etc/docker/daemon.json
文件中正确配置了insecure-registries
。 -
确保 Docker 服务已重启。
-
确保仓库地址正确,且防火墙允许访问 5000 端口。
-
(二)网络问题导致无法解析地址
-
问题描述: 如果尝试访问
http://192.168.65.131:5000
或https://192.168.65.131:5000/v2/
时,可能会遇到解析失败的问题。 -
解决方法:
-
检查仓库地址是否正确,确保 IP 地址和端口无误。
-
确保网络连接正常,可以尝试
ping
或curl
测试连通性。 -
如果问题仍然存在,可能是网络配置或防火墙限制,建议检查网络设置或联系网络管理员。
-