【Docker】Docker学习记录: Shipyard+Swarm+Consul+Service Discover 搭建教程

网上乱七八糟的资料实在是太多了, 乱, 特别乱, 而看书呢, 我读了2本书, 一本叫做<<第一本 Docker 书>>, 另一本叫做<< Docker进阶与实战>> 在 服务发现这块讲的又不清不楚的, 坑死个人. 今天特意记录下, 并整理下来,以防自己哪天又忘了, 也给同在研究Docker 的朋友们一个安装教程. 我单位测试机一共四台, 各位可以起4个虚拟机对应, 假定分别是141,142,143,144. 都是 CentOS 6.x 系统.

Step1. 升级 CentOS 内核到3.10版本以上

首先升级141, 其它机器也是同样的方法. 访问elrepo.org, 按照网站上的提示一步步的安装public key.

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

然后141是 CentOS6.x, 所以选择安装CentOS 6.x 的版本

rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm

装好了后, 点击elrepo 网站最上面的Packages 菜单, 找到 kernel-lt http://elrepo.org/tiki/kernel-lt

按照提示直接装最新版的 kernel long term 版本

yum --enablerepo=elrepo-kernel install kernel-lt

然后编辑/etc/grub.conf 文件, 找到 default=1, 改成 default=0, 然后重启 linux, 就搞定了!!!

其它服务器依照此方法分别都更新. 更新完了, 用下面的命令看是否内核正确调用了.

# uname -r4.1.2-1.el6.elrepo.x86_64

Step2. 安装 Docker

访问 Docker 官网, 找到针对CentOS 的安装指示页面. https://docs.docker.com/engine/installation/linux/centos/

安装官方的安装说明安装吧, 我就不为了显摆而复述了. 其它机器也是这样安装. 装好了请不要着急启动 docker deamon... 因为还有坑... 请执行下面的命令修改 Docker 的默认启动参数.

针对 ubuntu, 修改下面的文件:

vi /etc/default/docker

添加这么一行:

 DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"

针对 CentOS, 则改为下面的这个文件:

vi /etc/sysconfig/docker

修改 other_args 为

other_args="-H unix:///var/run/docker.sock -H 0.0.0.0:2375"

然后你就可以启动Docker服务了.

service start docker

Step3. Consul

这就开始了, 因为有了docker,所以千万千万就不要老想着源代码安装了,那样太 low B 了, 恩. consul 的概念请阅读 consul 官网的资料(当然跟上面一样都是英文的). https://www.consul.io/intro/getting-started/install.html

上面是原理, 看懂了就得了, 因为安装的话我们是用 Docker 来部署的, 恩, 经过本人各种尝试, 和各种百度以及FQ Google, 终于搭建起来了可以跨主机互联的服务发现, 下面是我的总结:

docker run -d \
    -p 8300:8300 \
    -p 8301:8301 \
    -p 8301:8301/udp \
    -p 8302:8302 \
    -p 8302:8302/udp \
    -p 8400:8400 \
    -p 8500:8500 \
    -p 8600:53 \
    -p 8600:53/udp \
    -h dev141 \
    --restart=always \
    --name=consul progrium/consul -server -bootstrap -ui-dir=/ui -advertise 192.168.123.141 -client 0.0.0.0  

解释下各个参数:

  • -d 容器在后台运行, detached mode
  • --restart=always 重启模式, always 表示永远
  • -p 8400:8400 映射 consul的 rpc 端口8400
  • -p 192.168.123.141:8500:8500 映射到公共 IP 这样方便我们使用 UI 界面.
  • -p 172.17.42.1:53:53/udp 绑定udp 端口53(默认 DNS端口)在 docker0 bridge 地址上.
  • -advertise 192.168.123.141 服务对外公布的 IP, 这里特意设置为141, 否则 service 会显示为内部的容器的 IP 地址, 这样就访问不到了.
  • -client 0.0.0.0 consul 监听的地址.

然后咱们开始部署其它三台consul agent机器, 这次要增加 -join 参数, 先部署142, 假设142的 docker0的 bridge 地址依然是172.17.42.1

docker run -d --restart=always \
   -p 8300:8300 \
   -p 8301:8301 \
   -p 8301:8301/udp \
   -p 8302:8302 \
   -p 8302:8302/udp \
   -p 8400:8400 \
   -p 8500:8500 \
    -h dev142 \
   --name=consul progrium/consul -server  -join 192.168.123.141 -advertise 192.168.123.142 -client 0.0.0.0      

然后是143服务器

docker run -d --restart=always  \
   -p 8300:8300 \
   -p 8301:8301 \
   -p 8301:8301/udp \
   -p 8302:8302 \
   -p 8302:8302/udp \
   -p 8400:8400 \
   -p 8500:8500 \
   -h dev143 \
   --name=consul progrium/consul -join 192.168.123.141 -advertise 192.168.123.143 -client 0.0.0.0 

144

docker run -d --restart=always  \
   -p 8300:8300 \
   -p 8301:8301 \
   -p 8301:8301/udp \
   -p 8302:8302 \
   -p 8302:8302/udp \
   -p 8400:8400 \
   -p 8500:8500 \
   -h dev144 \
   --name=consul progrium/consul -join 192.168.123.141 -advertise 192.168.123.144 -client 0.0.0.0 

看看 consul 的节点是不是增加了.

Step4. Swarm+Shipyard

swarm的资料在 docker 官网上有给, 所以你可以先看看 docker 官网的介绍资料, 恩, 还是那句话, 你先看看, 部署的话不要用那个... 下面有讲.

https://docs.docker.com/swarm/overview/

恩, swarm 的比较知名的而且经过我实际测试的非常牛逼的docker管理系统 是 shipyard, 官网是 http://www.shipyard-project.com

看完shipyard 介绍请移步它的安装页面.

http://www.shipyard-project.com/docs/deploy/manual/

不要看着 Deploy 有个自动的就想去装自动那个啊, 自动那个是 etcd 不是 consul 的, consul 是 docker 官网推荐的, 阿里云啊, 新浪啊都是 consul 流派, 另外我看着名字好听也是倾向 consul 啊.

先在141服务器装 rethinkdb 数据库, 按照我给的命令来装哈, 要不然你会装不成功, 当然我这个是入门基础搭建教程, 不是原理教程, 先搭起来你再慢慢想呗?

docker run -d --restart=always --name shipyard-rethinkdb rethinkdb

然后下一步shipped 的 discovery 的就不要装了,还有 proxy 那个也不用装了. 咱们在141上继续装 swarm manager, 请参照下面的命令来安装, IP-OF-CONSUL-HOST替换为你的 consul 安装的 ip地址.

docker run -d -p 3375:3375 --restart=always --name shipyard-swarm-manager swarm:latest manage --host tcp://0.0.0.0:3375 consul://192.168.123.141:8500

然后在142,143,144上分别安装 swarm agent. ip-of-host是指你部署的机器的 ip 地址, 你在哪台机器上部署swarm agent容器你就设置哪个地址.

docker run -d --restart=always --name shipyard-swarm-agent swarm:latest join --addr <ip-of-host>:2375 consul://192.168.123.141:8500

然后回到141机器部署 shipyard.

docker run -d --restart=always --name shipyard-controller --link shipyard-rethinkdb:rethinkdb --link shipyard-swarm-manager:swarm -p 8080:8080 shipyard/shipyard:latest    server -d tcp://swarm:3375

然后你就可以在浏览器访问141这台机器的8080端口, 就能看到 shipyard 的登录页面拉, 默认账户是 admin, 密码shipyard.

Step5. Registrator

registrator 是基于 docker 的 sock 文件来做服务发现的一个第三方的方案, 我试了下, 使用起来非常简单. 在141-143机器上执行下面的命令分别安装registrtator

docker run -d --restart=always --name=registrator --net=host -v /var/run/docker.sock:/tmp/docker.sock gliderlabs/registrator -ip <ip-of-host> consul://localhost:8500

参数解释:

  • -v /var/run/docker.sock:/tmp/docker.sock 映射 docker 的 socket 到 container 中的对应位置, 这样 registration 就能监控有哪些服务启动了.
  • <ip-of-host>registration 所属的主机 IP, 一定要设置此属性, 否则服务IP会显示为127.0.0.1
  • consul://localhost:8500 consul 绑定到本地的 consul 接口上

参考资料:

Docker DNS & Service Discovery with Consul and Registrator

原文发布于微信公众号 - 好雨云(goodrain-cloud)

原文发表时间:2016-06-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏自由而无用的灵魂的碎碎念

最近几天玩freebsd奋斗成果总结

http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/

12720
来自专栏程序员的知识天地

总结Django一些开发经验

最喜欢的还是 Django 的 ORM 框架。公司的项目都是前后分离的,使用 Django 做后端接口开发还是很高效的。

19510
来自专栏CodeSheep的技术分享

利用TICK搭建Docker容器可视化监控中心

性能监控是容器服务必不可少的基础设施,容器化应用运行于宿主机上,我们需要知道该容器的运行情况,包括 CPU使用率、内存占用、网络状况以及磁盘空间等等一系列信息。...

34740
来自专栏北京马哥教育

手把手教你用永恒之蓝(Eternalblue)勒索病毒漏洞的高阶用法

? 作者:7sDream 来源: https://www.zybuluo.com/7sDream/note/729295 安装 MSF Linux & Ma...

51580
来自专栏生信技能树

R包终极解决方案

写在前面: 在如何通过Google来使用ggplot2可视化这篇文章中,我们曾经介绍过R语言在生物信息学中的重要性。 这篇文章也激发了很多小伙伴学习的热情。学习...

64870
来自专栏FreeBuf

代理上网行为检测逃脱之本地路由引导+SSH隧道

相信很多公司为了限制员工上网,都会选择一些深信服的设备对用户的流量做控制,一般只会给用户普通的权限,比如只允许浏览某些网页啦,打开个优酷都会被拦截啦。本文简单介...

24080
来自专栏点滴积累

OpenStack(企业私有云)万里长征第六步——OpenStack网络及虚拟机存储位置

一、前言 昨天又装了一遍OpenStack。码农这项工作就如同人生,永远有你想不到的意外在等着你,时而是惊喜时而是悲伤。在装的过程中倒是很顺利,只是在安装完成之...

431100
来自专栏FreeBuf

打狗棒法之:Cknife(C刀)自定义模式秒过安全狗

免责声明:本站提供安全工具、程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负! 0x00 前言 很多朋友在使用Cknife时都误以为她只是菜刀的跨平...

34880
来自专栏CodeSheep的技术分享

Docker容器可视化监控中心搭建

288100
来自专栏13blog.site

将数据的初始化放到docker中的整个工作过程(问题记录)

由于是打算作为个人博客,所以对于install这个步骤,我从一开始就打算删掉的,前面一个多星期一直在修bug,到前天才开始做这个事情. 过程中也是碰到了各种问...

35750

扫码关注云+社区

领取腾讯云代金券