Docker容器管理平台Humpback进阶-私有仓库

Docker私有仓库

Docker 中,当咱们执行 docker pull xxx 的时候,可能会比较好奇,docker 会去哪儿查找并下载镜像呢?node

它其实是从 registry.hub.docker.com 这个地址去查找,这就是Docker公司为咱们提供的公共仓库,上面的镜像,你们均可以看到,也可使用。git

因此,咱们也能够带上仓库地址去拉取镜像,如:docker pull registry.hub.docker.com/library/alpine,不过要注意,这种方式下载的镜像的默认名称就会长一些。github

若是要在公司中使用 Docker,咱们基本不可能把商业项目上传到公共仓库中,那若是要多个机器共享,又能怎么办呢?docker

正由于这种须要,因此私有仓库也就有用武之地了。数据库

所谓私有仓库,也就是在本地(局域网)搭建的一个相似公共仓库的东西,搭建好以后,咱们能够将镜像提交到私有仓库中。这样咱们既能使用 Docker 来运行咱们的项目镜像,也避免了商业项目暴露出去的风险。json

想一想以下场景:跨域

有一个商业项目,须要部署到N台机器上(也就是分布式部署)。浏览器

一、常规作法:生成部署文件,手动拷贝到各个服务器,调整各项配置,挨个运行。(大体耗时半小时)安全

二、常规作法高级版:在每台服务器上安装FTP Server(实际上除非静态,不然不够用),或者是SVN Server(相对FTP Server,能够还原版本),相对常规作法,优化了手动拷贝这个部署。(大体耗时20分钟)bash

三、使用Docker的作法(前提是要部署的服务器要安装好docker环境):在某台服务器上构建好镜像,拷贝镜像到其余机器,启动镜像(大体耗时10分钟)。

其中拷贝镜像的方式以下:

# 将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

# 接下来就能够经过镜像运行容器了。

这种方式中,用到了Docker的优点,可是拷贝文件这个,实在是山寨。

四、使用Docker+私有仓库的作法:在某台服务器上构建好镜像,推送到私有仓库,在其余要部署的服务器上,拉取镜像,而后运行。

对比以上的几种方式,咱们能够知道前三种都没法逃避拷贝文件,并登陆到服务器这个操做,这也是操做慢的根源,当咱们有了私有仓库以后,全部的步骤都差很少能够自动化了,能够说是大大提交的效率。

看到私有仓库有这么大的优点,确定要一探究竟了吧。别急,接下来,咱们就来看看如何部署和使用私有仓库,并利用 Humpback 来再次提升部署效率。

搭建私有仓库

既然是使用 Docker ,那毫无心外,私有仓库也是个容器化的东西。Docker官方早就为咱们考虑了私有化部署的场景,因此,它提供了官方的私有仓库镜像:registry。接下来,咱们就使用这个镜像来搭建私有仓库。

首先,按照常规思路,咱们先拉取镜像:docker pull registry:2.6.1。(建议带上Tag拉取)

通常来讲,有了镜像,咱们就能够直接运行它就好了。

为了定制一些配置,和在 Humpback 中使用,咱们还须要提供一个定制化的配置文件(使用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: [nosniff]
    Access-Control-Allow-Headers: ['*']
    Access-Control-Allow-Origin: ['*']
    Access-Control-Allow-Methods: ['GET,POST,PUT,DELETE']
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3

其中 storage 设置提交到仓库的镜像,应该存储在什么地方;http 节点中须要配置端口和安全码,其中关键的地方在于 http.headers 的配置。如上的配置,是为了可以跨域访问仓库API,这是要让仓库搭配 Humpback 必须的设置,Humpback会在浏览器端对仓库发起请求。

若是不设置 http.secret,会遇到以下错误:

No HTTP secret provided - generated random secret.

还须要注意,http.addr 的写法,:7000 并非错误的写法,不要省略了 : ,这表明使用全部地址的 7000 端口。

接着咱们把这个配置文件放在 /etc/docker/registry/ 目录下,而后就能够建立容器并运行了,命令以下:

# -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

运行好容器后,咱们经过直接访问地址 http://192.168.1.200:7000/v2/ 来检查仓库是否正常运行,当返回 {} 时,表示部署成功。

推送镜像到私有仓库

要推送镜像到私有仓库,须要先根据私有仓库地址来设定新标签。根据个人环境,我进行的操做以下:

# 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

在推送到的时候,可能会遇到问题:http: server gave HTTP response to HTTPS client,由于默认是提交到 https,但咱们的仓库是使用的http,此时要么建立一个https映射,要么将仓库地址加入到不安全的仓库列表中。

如何将仓库地址配置到不安全仓库列表中?

使用以下步骤:

# 编辑 /etc/docker/daemon.json
vi /etc/docker/daemon.json
# 增长配置项
{
  ... # 其余配置项
  "insecure-registries":[ # 关键配置项,将仓库将入到不安全的仓库列表中
    "192.168.1.200:7000"
  ]
}
# 重启Docker服务(CentOS 7.2)
systemctl restart docker

以后,再次执行 docker push 192.168.1.200:7000/alpine:3.6 就没问题了。

经过访问 http://192.168.1.200:7000/v2/alpine/tags/list 就能看到刚才提交的镜像了。

也能够经过 http://192.168.1.200:7000/v2/_catalog 来列出仓库中的镜像列表。

Humpback中使用私有仓库

至此,咱们已经安装好了私有仓库,接着,咱们就须要在 Humpback 中来使用私有仓库。

首先,须要在系统配置中启用私有仓库,并设置好咱们的仓库地址,以下:

启用仓库

以后,咱们就能够查看 Hub 功能了,截图以下:

查看私有仓库

接着,重点来了,咱们来建立容器的时候,可使用私有仓库的镜像了:

从私有仓库拉取镜像

结语

Humbpack 已经在我公司稳定迭代1年多,是一套比较简单易用,又不失强大的Docker管理平台。

Docker 运维需求,而又由于命令行的 Swarm 不够易用,强大的 K8S(Kubernetes) 难以部署和运维,那就赶快来尝试下 Humpback够用,易用,易部署

同时,用来做为本地开发部署环境也是极好的。好比我就喜欢把各类数据库,各类尝鲜的程序让 Humpback 来管理,用之即来挥之即去。

最后:Humpback开源免费,Github地址是:https://github.com/humpback/humpback,要是喜欢,还望不吝给个 Star;若是以为很差用,或者不够用,也欢迎给咱们提 Issue,固然,可以有 PR 那就更好了。

本文github地址

相关文章
相关标签/搜索