我们才是战斗民族 發表於 2025-12-19 08:43:30

部署Docker Registry并配置认证登录教程

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">搭建 Docker Registry</a></li><ul class="second_class_ul"><li><a href="#_lab2_0_0">创建本地映射目录</a></li><li><a href="#_lab2_0_1">启动 Docker Registry</a></li><li><a href="#_lab2_0_2">配置 Docker Registry</a></li></ul><li><a href="#_label1">配置 Docker Registry 认证</a></li><ul class="second_class_ul"><li><a href="#_lab2_1_3">启动带认证的 Docker Registry</a></li><li><a href="#_lab2_1_4">配置 Docker Registry</a></li><li><a href="#_lab2_1_5">登录 Docker Registry</a></li></ul><li><a href="#_label2">测试 Docker Registry</a></li><ul class="second_class_ul"></ul><li><a href="#_label3">总结</a></li><ul class="second_class_ul"></ul></ul></div><p><a href="https://docs.docker.com/registry/" rel="external nofollow"   target="_blank">Docker Registry 官网</a></p>
<p>Docker Registry 需要 Docker 版本高于等于 1.6.0</p>
<p>Registry是一个无状态、高度可扩展的服务器侧应用程序,用于存储和允许您分发Docker镜像</p>
<p>内网环境下,可以使用 Docker Registry 来解决k8s集群的镜像拉取问题,当然,公网情况下, Docker Registry 私密性更高,比共有仓库更适合</p>
<p>如果需要 Docker Registry 开启认证功能,可以直接看<code>配置 Docker Registry 认证</code></p>
<p class="maodian"><a name="_label0"></a></p><h2>搭建 Docker Registry</h2>
<p class="maodian"><a name="_lab2_0_0"></a></p><h3>创建本地映射目录</h3>
<p>这个目录可以自定义,根据自身实际磁盘空间情况进行创建,将容器内的文件映射到本地,以此来达到持久化的效果</p>
<div class="jb51code"><pre class="brush:bash;"># mkdir /var/lib/registry
</pre></div>
<p class="maodian"><a name="_lab2_0_1"></a></p><h3>启动 Docker Registry</h3>
<p>docker命令中,冒号前面的为本地路径或端口,冒号后面的为容器内部的路径或端口</p>
<ul><li><code>-p</code>:将本地5000端口映射给容器内的5000端口(Docker Registry默认端口),本地端口可以自定义,只要是空闲的端口即可</li><li><code>--restart</code>:容器的重启策略</li><li><code>--name</code>:启动的容器名称</li><li><code>-v</code>:将本地目录映射到容器内的/var/lib/registry目录</li><li><code>-d</code>:将容器放到后台运行</li><li><code>registry</code>:镜像名,不加tag,默认拉取latest,如果本地不存在,启动容器前,会自动拉取</li></ul>
<div class="jb51code"><pre class="brush:bash;"># docker run -p 5000:5000 \
--restart=always \
--name registry \
-v /var/lib/registry:/var/lib/registry \
-d registry
</pre></div>
<p class="maodian"><a name="_lab2_0_2"></a></p><p class="maodian"><a name="_lab2_1_4"></a></p><h3>配置 Docker Registry</h3>
<div class="jb51code"><pre class="brush:bash;"># vim /etc/docker/daemon.json
</pre></div>
<p>注意json语法格式</p>
<p>如果重启docker失败,日志有如下输出,表示<code>daemon.json</code>文件的格式有错误,注意最后是否需要加上逗号</p>
<div class="jb51code"><pre class="brush:json;">unable to configure the Docker daemon with file /etc/docker/daemon.json: invalid character '"' after object key:value pair</pre></div>
<div class="jb51code"><pre class="brush:bash;">"insecure-registries": ["ip:端口"]
</pre></div>
<p>重启docker</p>
<div class="jb51code"><pre class="brush:bash;"># systemctl daemon-reload
# systemctl restart docker
</pre></div>
<p class="maodian"><a name="_label1"></a></p><h2>配置 Docker Registry 认证</h2>
<p>创建 Docker Registry 认证文件目录</p>
<div class="jb51code"><pre class="brush:bash;"># mkdir /var/lib/registry_auth
</pre></div>
<p>创建 Docker Registry 认证文件</p>
<p>使用 Apache 的 htpasswd 来创建加密文件</p>
<div class="jb51code"><pre class="brush:bash;"># yum install -y httpd-tools
# htpasswd -Bbn admin admin &gt; /var/lib/registry_auth/htpasswd
</pre></div>
<p class="maodian"><a name="_lab2_1_3"></a></p><h3>启动带认证的 Docker Registry</h3>
<ul><li><code>REGISTRY_AUTH=htpasswd</code> <code># 以 htpasswd 的方式认证</code></li><li><code>REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm</code> <code># 注册认证</code></li><li><code>REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd</code> <code># 认证的用户密码</code></li></ul>
<div class="jb51code"><pre class="brush:bash;"># docker run -p 5000:5000 \
--restart=always \
--name registry \
-v /var/lib/registry:/var/lib/registry \
-v /var/lib/registry_auth/:/auth/ \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \
-d registry
</pre></div>
<h3>配置 Docker Registry</h3>
<div class="jb51code"><pre class="brush:bash;"># vim /etc/docker/daemon.json
</pre></div>
<p>注意json语法格式</p>
<p>如果重启docker失败,日志有如下输出,表示<code>daemon.json</code>文件的格式有错误,注意最后是否需要加上逗号</p>
<div class="jb51code"><pre class="brush:json;">unable to configure the Docker daemon with file /etc/docker/daemon.json: invalid character '"' after object key:value pair</pre></div>
<div class="jb51code"><pre class="brush:bash;">"insecure-registries": ["ip:端口"]
</pre></div>
<p>重启docker</p>
<div class="jb51code"><pre class="brush:bash;"># systemctl daemon-reload
# systemctl restart docker
</pre></div>
<p class="maodian"><a name="_lab2_1_5"></a></p><h3>登录 Docker Registry</h3>
<p>登录可以是免交互式,也可以是交互式的</p>
<ul><li><code>docker login -u 用户名 -p 密码 ip:端口</code> <code># 一般不建议使用明文密码</code></li><li><code>docker login -u 用户名 -p ip:端口</code> <code># 不输入密码,回车后,使用交互式输入密码(输入的密码不会显示)</code></li><li><code>docker login ip:端口</code> <code># 不输入密码和用户名,回车后,使用交互式输入用户名和密码(输入的密码不会显示)</code></li></ul>
<div class="jb51code"><pre class="brush:bash;"># docker login ip:端口
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
</pre></div>
<p>退出登录</p>
<div class="jb51code"><pre class="brush:bash;"># docker logout ip:端口
</pre></div>
<p class="maodian"><a name="_label2"></a></p><h2>测试 Docker Registry</h2>
<p>给镜像打上 Docker Registry 的仓库标签</p>
<div class="jb51code"><pre class="brush:bash;"># docker tag centos:7 ip:端口/centos:7
</pre></div>
<p>将新打标签的镜像上传镜像到仓库</p>
<div class="jb51code"><pre class="brush:bash;"># docker push ip:端口/centos:7
</pre></div>
<p>查看镜像,可以看到我们上传的 centos 7 这个镜像了</p>
<div class="jb51code"><pre class="brush:bash;"># curl ip:端口/v2/_catalog -u admin
Enter host password for user 'admin':
{"repositories":["centos"]}
</pre></div>
<p>查看镜像包含的tag</p>
<p>需要先使用<code>_catalog</code>查看镜像的名称</p>
<div class="jb51code"><pre class="brush:bash;"># curl ip:端口/v2/centos/tags/list -u admin
Enter host password for user 'admin':
{"name":"centos","tags":["8","7","7.1"]}
</pre></div>
<p class="maodian"><a name="_label3"></a></p><h2>总结</h2>
<p>以上为个人经验,希望能给大家一个参考,也希望大家多多支持琼殿技术社区。</p>
頁: [1]
查看完整版本: 部署Docker Registry并配置认证登录教程