张哥仔 發表於 2025-12-22 15:21:05

Docker Registry私有仓库简单搭建过程

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">一、概述</a></li><li><a href="#_label1">二、搭建步骤</a></li><ul class="second_class_ul"><li><a href="#_lab2_1_0">(一)下载 Docker Registry 镜像</a></li><li><a href="#_lab2_1_1">(二)启动 Docker Registry 容器</a></li><li><a href="#_lab2_1_2">(三)配置 Docker 客户端以信任私有仓库</a></li><li><a href="#_lab2_1_3">(四)上传镜像到私有仓库</a></li><li><a href="#_lab2_1_4">(五)验证镜像是否上传成功</a></li></ul><li><a href="#_label2">三、常见问题及解决方法</a></li><ul class="second_class_ul"><li><a href="#_lab2_2_5">(一)无法连接到私有仓库</a></li><li><a href="#_lab2_2_6">(二)网络问题导致无法解析地址</a></li></ul><li><a href="#_label3">总结</a></li><ul class="second_class_ul"></ul></ul></div><p class="maodian"><a name="_label0"></a></p><h2>一、概述</h2>
<p>本文将详细介绍如何在本地搭建一个 Docker 私有 Registry 仓库,并实现镜像的上传和管理。通过私有仓库,可以方便地在本地网络中存储和分发 Docker 镜像,提高开发和部署效率。</p>
<p class="maodian"><a name="_label1"></a></p><h2>二、搭建步骤</h2>
<p class="maodian"><a name="_lab2_1_0"></a></p><h3>(一)下载 Docker Registry 镜像</h3>
<p><strong>命令</strong>:</p>
<div class="jb51code"><pre class="brush:bash;">docker pull registry</pre></div>
<p><strong>解析</strong>:</p>
<ul><li><code>docker pull</code> 是 Docker 的命令,用于从 Docker Hub 下载指定的镜像。</li><li><code>registry</code> 是 Docker 官方提供的 Registry 镜像,用于搭建私有仓库。</li><li>默认情况下,<code>docker pull</code> 会下载最新版本的镜像(<code>latest</code> 标签)。</li></ul>
<p class="maodian"><a name="_lab2_1_1"></a></p><h3>(二)启动 Docker Registry 容器</h3>
<p><strong>命令</strong>:</p>
<div class="jb51code"><pre class="brush:bash;">docker run -d -p 5000:5000 --restart=always --name registry registry</pre></div>
<p><strong>解析</strong>:</p>
<ul><li><code>-d</code>:表示以守护进程模式运行容器(后台运行)。</li><li><code>-p 5000:5000</code>:将容器的 5000 端口映射到宿主机的 5000 端口,用于访问私有仓库。</li><li><code>--restart=always</code>:设置容器在退出后自动重启,确保仓库服务始终可用。</li><li><code>--name registry</code>:为容器指定名称 <code>registry</code>,便于后续管理。</li><li><code>registry</code>:指定使用的镜像名称(即之前下载的 <code>registry</code> 镜像)。</li></ul>
<p><strong>验证容器是否启动成功</strong>:</p>
<div class="jb51code"><pre class="brush:bash;">docker ps</pre></div>
<p>如果看到名为 <code>registry</code> 的容器正在运行,并且端口映射正确,说明启动成功。</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025122215192422.png" /></p>
<p class="maodian"><a name="_lab2_1_2"></a></p><h3>(三)配置 Docker 客户端以信任私有仓库</h3>
<p><span>由于私有仓库默认使用 HTTPS协议,Docker 客户端需要配置为信任该仓库</span>。</p>
<p><strong>编辑 </strong><code>/etc/docker/daemon.json</code><strong> 文件</strong>:</p>
<div class="jb51code"><pre class="brush:bash;">vim /etc/docker/daemon.json</pre></div>
<p>添加以下内容:</p>
<div class="jb51code"><pre class="brush:bash;">{
    "insecure-registries": ["192.168.65.131:5000"]
}</pre></div>
<ul><li><code><span>insecure-registries</span></code><span>:指定不安全的仓库地址,允许 Docker 客户端通过 HTTP 协议访问该地址。</span></li></ul>
<p><strong>重启 Docker 服务</strong>:</p>
<div class="jb51code"><pre class="brush:bash;">systemctl restart docker</pre></div>
<p>重启 Docker 服务后,配置生效。</p>
<p class="maodian"><a name="_lab2_1_3"></a></p><h3>(四)上传镜像到私有仓库</h3>
<p><strong>标记镜像</strong>:</p>
<div class="jb51code"><pre class="brush:bash;">docker tag nginx:latest 192.168.65131:5000/nginx:latest</pre></div>
<ul><li><code>docker tag</code>:用于为镜像重新标记一个新的名称和标签。</li><li><code>nginx:latest</code>:本地已有的镜像名称和标签。</li><li><code>nginx:5000/nginx:latest</code>:目标仓库地址和镜像名称。</li></ul>
<p><strong>推送镜像到私有仓库</strong>:</p>
<div class="jb51code"><pre class="brush:bash;">docker push 192.168.65.131:5000/nginx:latest</pre></div>
<ul><li><code>docker push</code>:将标记后的镜像推送到指定的仓库地址。</li><li>如果推送成功,会显示镜像层的上传进度和最终的摘要信息。</li></ul>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025122215192490.png" /></p>
<p class="maodian"><a name="_lab2_1_4"></a></p><h3>(五)验证镜像是否上传成功</h3>
<p><strong>通过 API 查看仓库中的镜像</strong>:</p>
<div class="jb51code"><pre class="brush:bash;">curl 192.168.65.131:5000/v2/_catalog</pre></div>
<p>如果返回类似以下内容,说明镜像已成功上传:</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025122215192477.png" /></p>
<p class="maodian"><a name="_label2"></a></p><h2>三、常见问题及解决方法</h2>
<p class="maodian"><a name="_lab2_2_5"></a></p><h3>(一)无法连接到私有仓库</h3>
<p><strong>问题描述</strong>:</p>
<p>在推送或拉取镜像时,可能会遇到以下错误:</p>
<blockquote><p>Get &quot;https://192.168.65.131:5000/v2/&quot;: dial tcp 192.168.65.131:5000: connect: connection refused</p></blockquote>
<p><strong>解决方法</strong>:</p>
<ul><li>确保 <code>/etc/docker/daemon.json</code> 文件中正确配置了 <code>insecure-registries</code>。</li><li>确保 Docker 服务已重启。</li><li>确保仓库地址正确,且防火墙允许访问 5000 端口。</li></ul>
<p class="maodian"><a name="_lab2_2_6"></a></p><h3>(二)网络问题导致无法解析地址</h3>
<p><strong>问题描述</strong>: 如果尝试访问 <code>http://192.168.65.131:5000</code> 或 <code>https://192.168.65.131:5000/v2/</code> 时,可能会遇到解析失败的问题。</p>
<p><strong>解决方法</strong>:</p>
<ul><li>检查仓库地址是否正确,确保 IP 地址和端口无误。</li><li>确保网络连接正常,可以尝试 <code>ping</code> 或 <code>curl</code> 测试连通性。</li><li>如果问题仍然存在,可能是网络配置或防火墙限制,建议检查网络设置或联系网络管理员。</li></ul>
<p class="maodian"><a name="_label3"></a></p><h2>总结</h2>
<p>以上为个人经验,希望能给大家一个参考,也希望大家多多支持琼殿技术社区。</p>
頁: [1]
查看完整版本: Docker Registry私有仓库简单搭建过程