Docker私有仓库

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

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

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

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

正因为这种需要,所以私有仓库也就有用武之地了。

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

想想如下场景:

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

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

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

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

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

  1. # 将docker镜像保存为tar文件。
  2. docker save <image name> > <tar file address>
  3. # 如
  4. docker save node-test > /tmp/node-test.tar
  5. # 拷贝这个tar文件到需要使用该镜像的服务器上(FTP,SCP等等)
  6. # 将tar文件文件加载为镜像
  7. docker load < /tmp/node-test.tar
  8. # 接下来就可以通过镜像运行容器了。

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

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

对比以上的几种方式,我们可以知道前三种都无法逃避拷贝文件,并登录到服务器这个操作,这也是操作慢的根源,当我们有了私有仓库之后,所有的步骤都差不多可以自动化了,可以说是大大提交的效率。

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

搭建私有仓库

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

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

一般来说,有了镜像,我们就可以直接运行它就行了。

为了定制一些配置,和在 Humpback 中使用,我们还需要提供一个定制化的配置文件(使用yml来编写配置文件),如下:

  1. # config.yml 内容
  2. version: 0.1
  3. log:
  4. fields:
  5. service: registry
  6. storage:
  7. cache:
  8. blobdescriptor: inmemory
  9. filesystem:
  10. rootdirectory: /var/lib/registry
  11. http:
  12. addr: :7000
  13. secret: docker-registry
  14. headers:
  15. X-Content-Type-Options: [nosniff]
  16. Access-Control-Allow-Headers: ['*']
  17. Access-Control-Allow-Origin: ['*']
  18. Access-Control-Allow-Methods: ['GET,POST,PUT,DELETE']
  19. health:
  20. storagedriver:
  21. enabled: true
  22. interval: 10s
  23. threshold: 3

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

如果不设置 http.secret,会遇到如下错误:

  1. No HTTP secret provided - generated random secret.

还需要注意,http.addr 的写法,:7000 并不是错误的写法,不要省略了 : ,这代表使用所有地址的 7000 端口。

接着我们把这个配置文件放在 /etc/docker/registry/ 目录下,然后就可以创建容器并运行了,命令如下:

  1. # -p映射端口,格式为:主机端口:容器内部端口
  2. # -v映射volumn(目录或者文件),格式为:主机目录:容器内目录
  3. # --name 设置容器名称
  4. # 最后的 `registry:2.6.1` 则是镜像名称
  5. docker run -d -p 7000:7000 --restart=always \
  6. -v /var/lib/registry/:/var/lib/registry/ \
  7. -v /etc/docker/registry/config.yml:/etc/docker/registry/config.yml \
  8. --name humpback-registry \
  9. registry:2.6.1

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

推送镜像到私有仓库

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

  1. # pull image from docker hub(从官方仓库拉取一个镜像)
  2. docker pull alpine:3.6
  3. # 根据私有仓库,设定标签(必须)
  4. # 为镜像 `alpine:3.6` 创建一个新标签 `192.168.1.200:7000/alpine:3.6`
  5. docker tag alpine:3.6 192.168.1.200:7000/alpine:3.6
  6. # 推送到私有仓库中
  7. docker push 192.168.1.200:7000/alpine:3.6

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

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

使用如下步骤:

  1. # 编辑 /etc/docker/daemon.json
  2. vi /etc/docker/daemon.json
  3. # 增加配置项
  4. {
  5. ... # 其他配置项
  6. "insecure-registries":[ # 关键配置项,将仓库将入到不安全的仓库列表中
  7. "192.168.1.200:7000"
  8. ]
  9. }
  10. # 重启Docker服务(CentOS 7.2)
  11. 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地址

Docker容器管理平台Humpback进阶-私有仓库的更多相关文章

  1. 一个简单易用的容器管理平台-Humpback

    什么是Humpback? 在回答这个问题前,我们得先了解下什么的 Docker(哦,现在叫 Moby,文中还是继续称 Docker). 在 Docker-百度百科 中,对 Docker 已经解释得很清 ...

  2. Docker容器管理平台Rancher高可用部署——看这篇就够了

    记得刚接触Rancher时,看了官方文档云里雾里,跟着官网文档部署了高可用Rancher,发现不管怎么折腾都无法部署成功(相信已尝试的朋友也有类似的感觉),今天腾出空来写个总结,给看到的朋友留个参考( ...

  3. Linux高级运维 第八章 部署docker容器虚拟化平台

    8.1  Docker概述 实验环境: CENTOS7.4-63 64位 Dcoker概述 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到 ...

  4. Rancher 容器管理平台-免费视频培训-链接及内容-第三季

    Rancher 容器管理平台-免费视频培训-链接及内容 第三季 第5期-2018年05月10日-持续集成的容器化实践回放网址:http://www.itdks.com/liveevent/detail ...

  5. docker容器管理及网络管理

    防火墙规则—— INPUT 主要用于主机防火墙,设置规则屏蔽处理进入本机的数据包示例:禁止10.180.100.141这个机器访问我本机的web服务iptables -t filter -A INPU ...

  6. 【linxu】部署docker容器虚拟化平台

    实验所涉内容 Docker 概述 部署 docker 容器虚拟化平台 docker 平台基本使用方法 创建docker镜像和发布镜像方法 Container 容器端口映射 一 Docker 概述 Do ...

  7. 基于kubernetes自研容器管理平台的技术实践

    一.容器云的背景 伴随着微服务的架构的普及,结合开源的Dubbo和Spring Cloud等微服务框架,宜信内部很多业务线逐渐了从原来的单体架构逐渐转移到微服务架构.应用从有状态到无状态,具体来说将业 ...

  8. [转帖]devops 容器管理平台 rancher 简介

    https://testerhome.com/topics/10828 chenhengjie123 for PPmoney · 2017年11月13日 · 最后由 c19950809 回复于 201 ...

  9. Docker 容器管理:rancher

    Rancher:https://www.cnrancher.com/ 是一个开源的企业级全栈化容器部署及管理平台. 定位上和 K8s 比较接近,都是通过 web 界面赋予完全的 docker 服务编排 ...

随机推荐

  1. 对百度WebUploader的二次封装,精简前端代码之图片预览上传(两句代码搞定上传)

    前言 本篇文章上一篇: 对百度WebUploader开源上传控件的二次封装,精简前端代码(两句代码搞定上传) 此篇是在上面的基础上扩展出来专门上传图片的控件封装. 首先我们看看效果: 正文 使用方式同 ...

  2. CSAcademy Beta Round #4 Swap Pairing

    题目链接:https://csacademy.com/contest/arhiva/#task/swap_pairing/ 大意是给2*n个包含n种数字,每种数字出现恰好2次的数列,每一步操作可以交换 ...

  3. Mac 下载安装MySQL

    step 1. 从官网上下载MySQL Community Server step 2. 安装MySQL step 3. 配置mysql和mysqladmin的alias $ vim ~/.bashr ...

  4. openMP编程(下篇)之数据私有与任务调度

    title: openMP编程(下篇)之数据处理子句与任务调度 tags: ["openMP"] notebook: 分布式程序_Linux --- openMP并行编程中数据的共 ...

  5. linux操作系统中对大小端的判断

    static union { char c[4]; unsigned long l; } endian_test = { { 'l', '?', '?', 'b' } }; #define ENDIA ...

  6. salesforce零基础学习(七十一)级联表DML操作

    曾经做项目没有考虑那么多,对于级联表操作都是正常的一步一步操作,没有考虑过失败情况,最近项目遇见了失败的情况,导致碰到了相应的情况,特此mark一下,免得后期继续踩坑. 需求如下:新建页面,页面中包含 ...

  7. 使用bootstrap的插件实现模态框效果

    在上一篇文章中,我们使用 js+css 实现了模态框效果,在理解了模态框的基本实现方法和实现效果后,我们就要寻找更快捷的方法,又快又好的来完成模态框开发需求,从而节约时间,提高效率.一个好的轮子,不仅 ...

  8. VM VirtrualBox 安装centos6.5后的网络设置

    小白学习linux(一) 本文只是介绍VirtrualBox安装centos完成后的网络设置: 每次用虚拟机装完centos后,捣鼓半天才能上网.熟话说的好,好记性不如烂笔头,写个随笔记录下设置过程, ...

  9. 用react系列技术栈实现的demo整合系统

    引子 学生时代为了掌握某个知识点会不断地做习题,做总结,步入岗位之后何尝不是一样呢?做业务就如同做习题,如果‘课后’适当地进行总结,必然更快地提升自己的水平. 由于公司采用的react+node的技术 ...

  10. php学习之重要内置函数

    1. require_once()函数 此函数在脚本执行期间包含并执行指定的文件,与require语句类似,唯一区别是如果该文件中的代码已经被包含了,则不会再次包含. require_once()函数 ...