网上乱七八糟的资料实在是太多了, 乱, 特别乱, 而看书呢, 我读了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 来部署的, 恩, 经过本人各种尝试, 和各种百度以及翻墙 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

装个 nginx, 挂个域名, 再装个 registry 啥的都是后续的玩法, 前面咱们已经搭起来玩的环境了, 我后面再写服务发现的例子, 这些够大家玩了, have fun, 自己体会吧.

本篇文章是我原创, 未经本人允许, 请勿转载. 谢谢!!

[原创]Docker学习记录: Shipyard+Swarm+Consul+Service Discover 搭建教程的更多相关文章

  1. Git学习记录 力做全网最强入门教程

    目录 Git学习记录 力做全网最强入门教程 什么是GitHub? 什么是Git? Git的配置 Git的安装(只介绍windos操作系统下) Git的配置 至此我们的入门教程到此结束,更新中级教程要等 ...

  2. Docker学习记录--入门了解+安装

    Docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制, ...

  3. 区块链Hyperledger Fabric 学习记录(一)开发环境搭建(ubuntu16.04/ubuntu18.04)

    目录 Fabric开发环境搭建 更新说明 教程环境及软件版本 Docker 安装Docker 配置用户组 配置Aliyun Docker加速器 安装docker-compose Go 下载源码 安装源 ...

  4. Springboot学习记录1--概念介绍以及环境搭建

    摘要:springboot学习记录,环境搭建: 官方文档地址:https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/ht ...

  5. Docker学习之——Node.js+MongoDB+Nginx环境搭建(一)

    最近在学习Node.js相关知识,在环境搭建上耗费了不少功夫,故此把这个过程写下来同大家分享一下,今天我先来介绍一下Docker,有很多人都写过相关知识,还有一些教程,在此我只想写一下,我的学习过程中 ...

  6. docker学习之使用 DockerFile 构建镜像并搭建 swarm+compose 集群

    题目要求 (1)将springboot应用程序打成jar包:Hot.jar (2)利用dockerfile将Hot.jar构建成镜像 (3)构建 Swarm 集群 (4)在 Swarm 集群中使用 c ...

  7. Docker 学习记录笔记(一)

    Docker 一些简单的命令列表docker build -t friendlyhello . # Create image using this directory's Dockerfiledock ...

  8. docker学习记录1

    起因 现在自己学习微服务,服务器越来越多,虽然自己写了一些shell脚本来安装需要的软件,比如mysql,redis,jdk等等,但是还是好麻烦.希望学习docker能够快速安装部署这些东西. 记录一 ...

  9. Docker 学习记录

    docker logs 查看日志 docker logs  容器id docker logs -f 容器id 这次命令后面添加了一个新的标识 -f. 和 tail -f 类似, docker logs ...

随机推荐

  1. JAVA基础之控制台输入输出

    ---恢复内容开始--- 输入需要用scanner机制 代码: 启用scanner机制 Scanner input = new Scanner(System.in); //String x= inpu ...

  2. webpack之理解loader

    我们在写webpack配置文件的时候,应该有注意到经常用到loader这个配置项,那么loader是用来做什么的呢? loader其实是用来将源文件经过转化处理之后再输出新文件. 如果是数组形式的话, ...

  3. const、let、var的主要区别

    接触ES6之后,以前定义变量的方式由var增加了let.const,平时看别人用也不知道如何区别具体差别,好好科普了一下记录下来,方便大家一起学习. var(大家最熟悉的定义方式) 1.可定义全局作用 ...

  4. 导入jar包和创建jar文件

    具体步骤   导入jar包 1.在第一个工程中编写工具类并运行生成.class文件 2.在myeclipse工具栏找到open in 文件夹图标找到.class文件所在的包,将其全部复制到某个盘符下( ...

  5. JQuery制作网页—— 第六章 jQuery选择器

    1.jQuery选择器:jQuery选择器类似于CSS选择器,用来选取网页中的元素.       Eg:$("h3").css("background",&qu ...

  6. ueditor 富文本编辑器 Uncaught TypeError: Cannot set property 'innerHTML' of undefined问题

    ueditor.addListener("ready", function () { ueditor.setContent(‘内容'); });

  7. 第5章 MapReduce操作

    目录 5.1 案例分析:单词计数 1.设计思路 2.程序源代码 3.程序解读 4.程序运行 5.2 案例分析:数据去重 1.设计思路 2.编写程序 3.程序解读 4.程序运行 5.3 案例分析:求平均 ...

  8. AS5600磁编码器开发记录

    AS5600使用简介--(程序员版) -----------------本文由"智御电子"提供,同时提供范例教程,以便电子爱好者交流学习.---------------- 前言: ...

  9. java 第七章 面向对象高级特性

    一.类的继承 (一)继承的含义 1.在Java中定义一个类时,让该类通过关键字extends继承一个已有的类,这就是类的继承(泛化). 2.被继承的类称为父类(超类,基类),新的类称为子类(派生类). ...

  10. 20145202马超 2016-2017-2 《Java程序设计》第10周学习总结

    学号 2016-2017-2 <Java程序设计>第X周学习总结 教材学习内容总结 一.网络编程 1.网络概述 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事 ...