设为首页 收藏本站
查看: 927|回复: 0

[经验分享] Docker容器管理平台Humpback进阶

[复制链接]

尚未签到

发表于 2017-12-5 16:02:21 | 显示全部楼层 |阅读模式
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分钟)。
  其中拷贝镜像的方式如下:
# 将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的优势,但是拷贝文件这个,实在是山寨。
  4、使用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
  
# 增加配置项
  
{
  ... # 其他配置项
  &quot;insecure-registries&quot;:[ # 关键配置项,将仓库将入到不安全的仓库列表中
  &quot;192.168.1.200:7000&quot;
  ]
  
}
  
# 重启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 中来使用私有仓库。
  首先,需要在系统配置中启用私有仓库,并设置好我们的仓库地址,如下:
DSC0000.jpg

  之后,我们就可以查看 Hub 功能了,截图如下:
DSC0001.jpg

  接着,重点来了,我们来创建容器的时候,可以使用私有仓库的镜像了:
DSC0002.jpg


结语
  Humbpack 已经在我公司稳定迭代1年多,是一套比较简单易用,又不失强大的Docker管理平台。
  有 Docker 运维需求,而又因为命令行的 Swarm 不够易用,强大的 K8S(Kubernetes) 难以部署和运维,那就赶快来尝试下 Humpback,够用,易用,易部署
  同时,用来作为本地开发部署环境也是极好的。比如我就喜欢把各种数据库,各种尝鲜的程序让 Humpback 来管理,用之即来挥之即去。

最后:Humpback开源免费,Github地址是:https://github.com/humpback/humpback,要是喜欢,还望不吝给个 Star;如果觉得不好用,或者不够用,也欢迎给我们提 Issue,当然,能够有 PR 那就更好了。
  本文github地址

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-420865-1-1.html 上篇帖子: Docker 入门实践 下篇帖子: 升级项目到.NET Core 2.0,在Linux上安装Docker,并成功部署
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表