网上乱七八糟的资料实在是太多了, 乱, 特别乱, 而看书呢, 我读了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. oracle带输入输出参数存储过程(包括sql分页功能)

    记录一下,免得以后忘记了又要到处去找. begin /*这里不能直接执行select语句但可以直接执行update.delete.insert语句*/ end里面不能接执行select语句,声明会话级 ...

  2. MySql is marked as crashed and should be repaired问题

    在一次电脑不知道为什么重启之后数据库某表出现了 is marked as crashed and should be repaired这个错误,百度了一下,很多都是去找什么工具然后输入命令之类的,因为 ...

  3. CentOS 6.8安装Ceph

    机器规划 IP 主机名 角色 10.101.0.1 ceph01 mon admin mds 10.101.0.2 ceph02 ods 10.101.0.3 ceph03 ods 10.101.0. ...

  4. Django学习笔记3-静态文件调用

    1.settings.py 静态文件相关示例代码及说明: # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.c ...

  5. Spring Cloud 微服务入门(二)--Spring Cloud 架构

    Spring Cloud整体核心架构:Rest服务,在Spring Cloud配置过程中,都是遵循Rest风格规范,在Rest处理中,必不可少两个对象端:服务的提供者(provider)和服务消费者( ...

  6. rz/sz:工作原理

    我们知道用linux命令rz/sz可以通过一些终端软件如secureCRT等在linux服务器与本地windows之间传文件.在服务器上rz一下,在本地windows下就跳出一个窗口,选择文件后就传到 ...

  7. 剑指Offer-二维数组查找

    题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. ...

  8. linux学习--字符设备驱动

    目录 1.字符设备驱动抽象结构 2.设备号及设备节点 2.1 设备号分配与管理 2.2 设备节点的生成 3.打开设备文件 linux驱动有基本的接口进行注册和卸载,这里不再做详细说明,本文主要关注li ...

  9. python3 练习题100例 (三)

    题目三:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? #!/usr/bin/env python3 # -*- coding: utf-8 -*- &qu ...

  10. python基础 抽象类(接口类)

    Python中没有接口.接口类,抽象类:定义 制定一个规范 #必须要导入from abc import ABCMeta,abstractmethod class Payment(metaclass = ...