惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

阮一峰的网络日志
阮一峰的网络日志
D
Darknet – Hacking Tools, Hacker News & Cyber Security
S
Schneier on Security
The Last Watchdog
The Last Watchdog
Cyberwarzone
Cyberwarzone
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Cyber Attacks, Cyber Crime and Cyber Security
L
Lohrmann on Cybersecurity
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
The Cloudflare Blog
V
V2EX
博客园_首页
博客园 - 聂微东
Vercel News
Vercel News
人人都是产品经理
人人都是产品经理
G
GRAHAM CLULEY
T
Tenable Blog
Last Week in AI
Last Week in AI
Y
Y Combinator Blog
L
LINUX DO - 最新话题
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
SecWiki News
SecWiki News
博客园 - 三生石上(FineUI控件)
S
Secure Thoughts
N
News | PayPal Newsroom
T
The Blog of Author Tim Ferriss
The GitHub Blog
The GitHub Blog
T
Troy Hunt's Blog
博客园 - 【当耐特】
Forbes - Security
Forbes - Security
H
Hacker News: Front Page
A
About on SuperTechFans
B
Blog RSS Feed
Engineering at Meta
Engineering at Meta
MongoDB | Blog
MongoDB | Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
罗磊的独立博客
D
DataBreaches.Net
P
Privacy & Cybersecurity Law Blog
Schneier on Security
Schneier on Security
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Google DeepMind News
Google DeepMind News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Jina AI
Jina AI
D
Docker
P
Proofpoint News Feed

博客园 - Hex

大辉谈-备战双十一之动静分离实战 [知识库:python-tornado]异步调用中的上下文控制Tornado stack context 在 CentOS 下手工安装 Docker v1.1x Docker: 如何修改 Docker 的镜像存储位置 Docker学习记录3: 搭建 Private Registry - Hex 解决mac OS 10.9 下python 在terminal下崩溃的问题 ssh连接失败, 记下来原因和解决方案 centos+nginx+redmine+gitosis安装指南 面向对象控与python内存泄漏 python 之禅:import this 新头衔:热酷高级python软件工程师,你问我去热酷干嘛? 使用AuthToken架构保护用户帐号验证Cookie的安全性 热酷,新的领域,新的发展 恩,终于有我自己的时间整理下这两年的思路了 [思想火花]:函数命名及参数 MouseOut和RollOut的区别 关于VS2008单元测试中加载配置文件的问题 竟然遇到取FormAuthentication的值取不出来的情况 实现一个Ajax模式的文件上传功能有多难?
[原创]Docker学习记录: Shipyard+Swarm+Consul+Service Discover 搭建教程
Hex · 2016-03-22 · via 博客园 - Hex

网上乱七八糟的资料实在是太多了, 乱, 特别乱, 而看书呢, 我读了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 -r

4.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 :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 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

装个 nginx, 挂个域名, 再装个 registry 啥的都是后续的玩法, 前面咱们已经搭起来玩的环境了, 我后面再写服务发现的例子, 这些够大家玩了, have fun, 自己体会吧.
本篇文章是我原创, 未经本人允许, 请勿转载. 谢谢!!