私有仓库registry搭建
<p><strong>环境</strong>
服务端机器 (主机名为192.168.1.2):docker私有仓库服务器,运行registry容器;</p>
<p><strong>1 下载镜像registry</strong></p>
<pre><code># docker pull registry</code></pre>
<p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/3a73277b808b773613a316087d704980?showdoc=.jpg" alt="" /></p>
<p><strong>2 查看镜下是否pull下来</strong></p>
<pre><code>docker images</code></pre>
<p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/c84f0a9c6c816738f2d60601f53cbf86?showdoc=.jpg" alt="" /></p>
<p><strong>3 运行registry容器</strong></p>
<pre><code>docker run -itd -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest </code></pre>
<p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/17048ee4d4b0cc82fc2854ef8138dc79?showdoc=.jpg" alt="" />
参数说明
-itd:在容器中打开一个伪终端进行交互操作,并在后台运行;
-v:把宿主机的/data/registry目录绑定 到 容器/var/lib/registry目录(这个目录是registry容器中存放镜像文件的目录),来实现数据的持久化;
-p:映射端口;访问宿主机的5000端口就访问到registry容器的服务了;
--restart=always:这是重启的策略,假如这个容器异常退出会自动重启容器;
--name registry:创建容器命名为registry,你可以随便命名;
registry:latest:这个是刚才pull下来的镜像;</p>
<p>远程服务器必须开启docker远程api(为maven-docker-plugin打包上传)</p>
<pre><code>vim /usr/lib/systemd/system/docker.service</code></pre>
<p>修改ExecStart行为下面内容,开启远程编译</p>
<pre><code>ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock \</code></pre>
<p>在[Service]下添加如下内容</p>
<pre><code>ExecStartPost=/sbin/iptables -I FORWARD -s 0.0.0.0/0 -j ACCEPT</code></pre>
<p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/da76a9bb344e652d3941cbb8916e8e96?showdoc=.jpg" alt="" /></p>
<p><strong>4 本地测试镜像仓库中所有的镜像</strong></p>
<pre><code>curl http://127.0.0.1:5000/v2/_catalog</code></pre>
<p>{"repositories":[]}
现在是空的,因为才刚运行,里面没有任何镜像内容。</p>
<p><strong>删除镜像时会出现overlay2的问题解决方法</strong></p>
<ol>
<li>umount /var/lib/docker/overlay2</li>
<li>rm -rf /var/lib/docker</li>
<li>service docker restart </li>
</ol>
<p>push镜像会出现500错误,将selinux禁用</p>
<h1>setenforce 0</h1>
<p>或者修改SELinux 工作模式
在 /etc/selinux/config 中设定</p>