Docker容器管理平台Humpback进阶-私有仓库
<h1 id="docker私有仓库">Docker私有仓库</h1><p>在 <code>Docker</code> 中,当我们执行 <code>docker pull xxx</code> 的时候,可能会比较好奇,<code>docker</code> 会去哪儿查找并下载镜像呢?</p>
<p>它实际上是从 <code>registry.hub.docker.com</code> 这个地址去查找,这就是Docker公司为我们提供的公共仓库,上面的镜像,大家都可以看到,也可以使用。</p>
<p><strong>所以,我们也可以带上仓库地址去拉取镜像,如:<code>docker pull registry.hub.docker.com/library/alpine</code>,不过要注意,这种方式下载的镜像的默认名称就会长一些。</strong></p>
<p>如果要在公司中使用 <code>Docker</code>,我们基本不可能把商业项目上传到公共仓库中,那如果要多个机器共享,又能怎么办呢?</p>
<p>正因为这种需要,所以私有仓库也就有用武之地了。</p>
<p>所谓私有仓库,也就是在本地(局域网)搭建的一个类似公共仓库的东西,搭建好之后,我们可以将镜像提交到私有仓库中。这样我们既能使用 <code>Docker</code> 来运行我们的项目镜像,也避免了商业项目暴露出去的风险。</p>
<p>想想如下场景:</p>
<p>有一个商业项目,需要部署到N台机器上(也就是分布式部署)。</p>
<p><strong>1、常规做法</strong>:生成部署文件,手动拷贝到各个服务器,调整各项配置,挨个运行。(大致耗时半小时)</p>
<p><strong>2、常规做法高级版</strong>:在每台服务器上安装FTP Server(实际上除非静态,否则不够用),或者是SVN Server(相对FTP Server,可以还原版本),相对常规做法,优化了手动拷贝这个部署。(大致耗时20分钟)</p>
<p><strong>3、使用Docker的做法(前提是要部署的服务器要安装好docker环境)</strong>:在某台服务器上构建好镜像,拷贝镜像到其他机器,启动镜像(大致耗时10分钟)。</p>
<p>其中拷贝镜像的方式如下:</p>
<pre><code class="language-bash"># 将docker镜像保存为tar文件。
docker save <image name> > <tar file address>
# 如
docker save node-test > /tmp/node-test.tar
# 拷贝这个tar文件到需要使用该镜像的服务器上(FTP,SCP等等)
# 将tar文件文件加载为镜像
docker load < /tmp/node-test.tar
# 接下来就可以通过镜像运行容器了。
</code></pre>
<p><strong>这种方式中,用到了Docker的优势,但是拷贝文件这个,实在是山寨。</strong></p>
<p><strong>4、使用Docker+私有仓库的做法</strong>:在某台服务器上构建好镜像,推送到私有仓库,在其他要部署的服务器上,拉取镜像,然后运行。</p>
<p><strong>对比以上的几种方式,我们可以知道前三种都无法逃避拷贝文件,并登录到服务器这个操作,这也是操作慢的根源,当我们有了私有仓库之后,所有的步骤都差不多可以自动化了,可以说是大大提交的效率。</strong></p>
<p>看到私有仓库有这么大的优势,肯定要一探究竟了吧。别急,接下来,我们就来看看如何部署和使用私有仓库,并利用 <code>Humpback</code> 来再次提高部署效率。</p>
<h1 id="搭建私有仓库">搭建私有仓库</h1>
<p>既然是使用 <code>Docker</code> ,那毫无意外,私有仓库也是个容器化的东西。Docker官方早就为我们考虑了私有化部署的场景,所以,它提供了官方的私有仓库镜像:<code>registry</code>。接下来,我们就使用这个镜像来搭建私有仓库。</p>
<p>首先,按照常规思路,我们先拉取镜像:<code>docker pull registry:2.6.1</code>。(建议带上Tag拉取)</p>
<p>一般来说,有了镜像,我们就可以直接运行它就行了。</p>
<p>为了定制一些配置,和在 <code>Humpback</code> 中使用,我们还需要提供一个定制化的配置文件(使用yml来编写配置文件),如下:</p>
<pre><code class="language-yml"># config.yml 内容
version: 0.1
log:
fields:
service: registry
storage:
cache:
blobdescriptor: inmemory
filesystem:
rootdirectory: /var/lib/registry
http:
addr: :7000
secret: docker-registry
headers:
X-Content-Type-Options:
Access-Control-Allow-Headers: ['*']
Access-Control-Allow-Origin: ['*']
Access-Control-Allow-Methods: ['GET,POST,PUT,DELETE']
health:
storagedriver:
enabled: true
interval: 10s
threshold: 3
</code></pre>
<p>其中 <code>storage</code> 设置提交到仓库的镜像,应该存储在什么地方;<code>http</code> 节点中需要配置端口和安全码,其中关键的地方在于 <code>http.headers</code> 的配置。如上的配置,是为了能够跨域访问仓库API,这是要让仓库搭配 <code>Humpback</code> 必须的设置,Humpback会在浏览器端对仓库发起请求。</p>
<p><strong>如果不设置 <code>http.secret</code>,会遇到如下错误:</strong></p>
<pre><code>No HTTP secret provided - generated random secret.
</code></pre>
<p><strong>还需要注意,<code>http.addr</code> 的写法,<code>:7000</code> 并不是错误的写法,不要省略了 <code>:</code> ,这代表使用所有地址的 <code>7000</code> 端口。</strong></p>
<p>接着我们把这个配置文件放在 <code>/etc/docker/registry/</code> 目录下,然后就可以创建容器并运行了,命令如下:</p>
<pre><code class="language-bash"># -p映射端口,格式为:主机端口:容器内部端口
# -v映射volumn(目录或者文件),格式为:主机目录:容器内目录
# --name 设置容器名称
# 最后的 `registry:2.6.1` 则是镜像名称
docker run -d -p 7000:7000 --restart=always \
-v /var/lib/registry/:/var/lib/registry/ \
-v /etc/docker/registry/config.yml:/etc/docker/registry/config.yml \
--name humpback-registry \
registry:2.6.1
</code></pre>
<p>运行好容器后,我们通过直接访问地址 <code>http://192.168.1.200:7000/v2/</code> 来检查仓库是否正常运行,当返回 <code>{}</code> 时,表示部署成功。</p>
<h2 id="推送镜像到私有仓库">推送镜像到私有仓库</h2>
<p>要推送镜像到私有仓库,需要先根据私有仓库地址来设定新标签。根据我的环境,我进行的操作如下:</p>
<pre><code class="language-bash"># pull image from docker hub(从官方仓库拉取一个镜像)
docker pull alpine:3.6
# 根据私有仓库,设定标签(必须)
# 为镜像 `alpine:3.6` 创建一个新标签 `192.168.1.200:7000/alpine:3.6`
docker tag alpine:3.6 192.168.1.200:7000/alpine:3.6
# 推送到私有仓库中
docker push 192.168.1.200:7000/alpine:3.6
</code></pre>
<p><strong>在推送到的时候,可能会遇到问题:<code>http: server gave HTTP response to HTTPS client</code>,因为默认是提交到 <code>https</code>,但我们的仓库是使用的http,此时要么创建一个https映射,要么将仓库地址加入到不安全的仓库列表中。</strong></p>
<p><em>如何将仓库地址配置到不安全仓库列表中?</em></p>
<p>使用如下步骤:</p>
<pre><code class="language-bash"># 编辑 /etc/docker/daemon.json
vi /etc/docker/daemon.json
# 增加配置项
{
... # 其他配置项
"insecure-registries":[ # 关键配置项,将仓库将入到不安全的仓库列表中
"192.168.1.200:7000"
]
}
# 重启Docker服务(CentOS 7.2)
systemctl restart docker
</code></pre>
<p>之后,再次执行 <code>docker push 192.168.1.200:7000/alpine:3.6</code> 就没问题了。</p>
<p>通过访问 <code>http://192.168.1.200:7000/v2/alpine/tags/list</code> 就能看到刚才提交的镜像了。</p>
<p>也可以通过 <code>http://192.168.1.200:7000/v2/_catalog</code> 来列出仓库中的镜像列表。</p>
<h1 id="humpback中使用私有仓库">Humpback中使用私有仓库</h1>
<p>至此,我们已经安装好了私有仓库,接着,我们就需要在 <code>Humpback</code> 中来使用私有仓库。</p>
<p>首先,需要在系统配置中启用私有仓库,并设置好我们的仓库地址,如下:</p>
<p><img src="http://img.hstar.org/humpback-md-21.jpg" alt="启用仓库" loading="lazy"></p>
<p>之后,我们就可以查看 <code>Hub</code> 功能了,截图如下:</p>
<p><img src="http://img.hstar.org/humpback-md-22.jpg" alt="查看私有仓库" loading="lazy"></p>
<p>接着,重点来了,我们来创建容器的时候,可以使用私有仓库的镜像了:</p>
<p><img src="http://img.hstar.org/humpback-md-23.jpg" alt="从私有仓库拉取镜像" loading="lazy"></p>
<h1 id="结语">结语</h1>
<p><code>Humbpack</code> 已经在我公司稳定迭代1年多,是一套比较简单易用,又不失强大的Docker管理平台。</p>
<p>有 <code>Docker</code> 运维需求,而又因为命令行的 <code>Swarm</code> 不够易用,强大的 <code>K8S</code>(Kubernetes) 难以部署和运维,那就赶快来尝试下 <code>Humpback</code>,<strong>够用,易用,易部署</strong>。</p>
<p>同时,用来作为本地开发部署环境也是极好的。比如我就喜欢把各种数据库,各种尝鲜的程序让 <code>Humpback</code> 来管理,用之即来挥之即去。</p>
<h2 id="最后humpback开源免费github地址是httpsgithubcomhumpbackhumpback要是喜欢还望不吝给个-star如果觉得不好用或者不够用也欢迎给我们提-issue当然能够有-pr-那就更好了">最后:<strong>Humpback开源免费,Github地址是:https://github.com/humpback/humpback,要是喜欢,还望不吝给个 <code>Star</code>;如果觉得不好用,或者不够用,也欢迎给我们提 <code>Issue</code>,当然,能够有 <code>PR</code> 那就更好了。</strong></h2>
<p>本文github地址</p><br><br>
来源:https://www.cnblogs.com/humin/p/6970212.html
頁:
[1]