Docker 容器部署 Consul 集群

一、docker安装与启动
1.1安装docker
[root@localhost /]# yum -y install docker-io

1.2更改配置文件
[root@localhost /]# vi /etc/sysconfig/docker
other-args列更改为:other_args="--exec-driver=lxc --selinux-enabled"

1.3启动docker服务
[root@localhost /]# service docker start
Starting cgconfig service: [ OK ]
Starting docker: [ OK ]

1.4将docker加入开机启动
[root@localhost /]# chkconfig docker on

1.5基本信息查看
docker version:查看docker的版本号,包括客户端、服务端、依赖的Go等

[root@localhost /]# docker version
Client version: 1.0.0
Client API version: 1.12
Go version (client): go1.2.2
Git commit (client): 63fe64c/1.0.0
Server version: 1.0.0
Server API version: 1.12
Go version (server): go1.2.2
Git commit (server): 63fe64c/1.0.0

docker info :查看系统(docker)层面信息,包括管理的images, containers数等
[root@localhost /]# docker info
Containers: 16
Images: 40
Storage Driver: devicemapper
Pool Name: docker-253:0-1183580-pool
Data file: /var/lib/docker/devicemapper/devicemapper/data
Metadata file: /var/lib/docker/devicemapper/devicemapper/metadata
Data Space Used: 2180.4 Mb
Data Space Total: 102400.0 Mb
Metadata Space Used: 3.4 Mb
Metadata Space Total: 2048.0 Mb
Execution Driver: lxc-0.9.0
Kernel Version: 2.6.32-431.el6.x86_64

二、progrium/consul镜像安装
2.1搜索镜像
[root@localhost /]# docker search consul

docker.io docker.io/progrium/consul 231 [OK]
docker.io docker.io/gliderlabs/consul 43 [OK]
……

2.2下载镜像progrium/consul
[root@localhost /]# docker pull docker.io/progrium/consul

2.3查看镜像
[root@localhost /]# docker images -a   ////列出所有的images(包含历史)

三、在Docker 容器中启动Consul Agent,这里的操作参考progrium/consul的官方说明https://hub.docker.com/r/progrium/consul/
3.1以Server 模式在容器中启动一个agent
[root@localhost /]# docker run -p 8400:8400 -p 8500:8500 -p 8600:53/udp -h node1 progrium/consul -server -bootstrap

我们测试一下,可以通过curl访问http端口:
[root@localhost /]# curl localhost:8500/v1/catalog/nodes

再测试一下,也可以通过dig访问一下 DNS 端口:
[root@localhost /]# dig @0.0.0.0 -p 8600 node1.node.consul

3.2用Docker 容器启动Consul集群
分别启动三个server节点,并且绑定到同一个ip
-bootstrap-expect:在一个datacenter中期望提供的server节点数目,当该值提供的时候,consul一直等到达到指定sever数目的时候才会引导整个集群

[root@localhost /]# docker run -d --name node1 -h node1 progrium/consul -server -bootstrap-expect 3
[root@localhost /]# JOIN_IP="$(docker inspect -f '{{.NetworkSettings.IPAddress}}' node1)" ////获取node1的ip地址
[root@localhost /]# docker run -d --name node2 -h node2 progrium/consul -server -join $JOIN_IP
[root@localhost /]# docker run -d --name node3 -h node3 progrium/consul -server -join $JOIN_IP
启动client节点
[root@localhost /]# docker run -d -p 8400:8400 -p 8500:8500 -p 8600:53/udp --name node4 -h node4 progrium/consul -join $JOIN_IP
这时使用nsenter工具连接到node1上运行consul info,可以到到node1为state = Leader

查看正在运行的容器
[root@localhost /]# docker ps
查看所有的容器(运行中和关闭的)
[root@localhost /]# docker ps -a
删除所有容器
[root@localhost /]# docker rm $(docker ps -a -q)

3.3进入docker容器操作查看
docker使用 -d 参数时,容器启动后会进入后台。
某些时候需要进入容器进行操作,特别是测试时。有很多种方法,包括使用ssh,docker attach命令或 nsenter工具等。

3.3.1使用docker attach,多个窗口不方便
[root@localhost /]# docker attach node3
2016/03/14 03:35:40 [INFO] agent: Synced service 'consul'

3.3.2使用nsenter
先安装

[root@localhost /]# cd /tmp
[root@localhost /]# curl https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz
[root@localhost /]# tar zxf util-linux-2.24.tar.gz
[root@localhost /]# cd util-linux-2.24
[root@localhost /]# ./configure --without-ncurses
[root@localhost /]# make nsenter
[root@localhost /]# cp nsenter /usr/local/bin ////不用make install,直接把make生成的nsenter 复制到/usr/local/bin目录下即可

[root@localhost /]# PID=`docker inspect --format "{{ .State.Pid }}" node1 `
[root@localhost /]# nsenter --target $PID --mount --uts --ipc --net --pid
上面2条命令可以合一:nsenter --target `docker inspect --format "{{ .State.Pid }}" node1` --mount --uts --ipc --net --pid
node1:/# ////ok了可以随便输入linux命令检查一下看看,比如
开始consul命令
node1:/# consul members
node1:/# consul info

Docker 容器部署 Consul 集群的更多相关文章

  1. 庐山真面目之十微服务架构 Net Core 基于 Docker 容器部署 Nginx 集群

    庐山真面目之十微服务架构 Net Core 基于 Docker 容器部署 Nginx 集群 一.简介      前面的两篇文章,我们已经介绍了Net Core项目基于Docker容器部署在Linux服 ...

  2. 【解决】docker 容器中 consul集群问题处理

    现象描述:   node1 和node2 日志反复出现 add remove node3节点. node3 节点 一直 驳回 node1 和node2 认为node3已经dead的消息  不断重启se ...

  3. Docker部署Consul集群

    服务介绍 Consul是一种分布式.高可用.支持水平扩展的服务注册与发现工具.包含的特性有:服务发现.健康检查.键值存储.多数据中心和服务管理页面等. 官方架构设计图: 图中包含两个Consul数据中 ...

  4. 使用docker安装部署Spark集群来训练CNN(含Python实例)

    使用docker安装部署Spark集群来训练CNN(含Python实例) http://blog.csdn.net/cyh_24/article/details/49683221 实验室有4台神服务器 ...

  5. Docker安装部署es集群

    Docker安装部署es集群:环境准备:已安装docker的centos服务器一台1. 拉取es版本docker pull elasticsearch:5.6.82. 新建文件夹 数据挂载目录 和 配 ...

  6. docker 快速部署ES集群 spark集群

    1) 拉下来 ES集群  spark集群 两套快速部署环境, 并只用docker跑起来,并保存到私库. 2)弄清楚怎么样打包 linux镜像(或者说制作). 3)试着改一下,让它们跑在集群里面. 4) ...

  7. Docker实战之Consul集群

    前言 最近参加了几场 Java 面试,发现大多数的微服务实践还是 Eureka 偏多,鉴于笔者的单位选型 Consul,这里对 Consul 做简单总结. 该篇是 Docker 实战系列的第三篇.传送 ...

  8. docker上搭建consul集群全流程

    consul简介: consul是提供服务发现.简单配置管理.分区部署的服务注册发现解决方案.主要特性:服务发现\健康检查\基于Key-Value的配置\支持TLS安全通讯\支持多数据中心部署 con ...

  9. Docker 下部署hadoop集群

    一.主机规划 3台主机:1个master.2个slaver/worker ip地址使用docker默认的分配地址: master: 主机名: hadoop2.ip地址: 172.17.0.2 slav ...

随机推荐

  1. linux下打包工具

    InstallAnyWhere  IzPack  InstallJammer; installshield 也支持rpm打包 Advanced Installer

  2. MYSQL单双向同步

    Master:192.168.1.101 Slave  :192.168.1.102 单向同步(一) 进入Master启动MYSQL [root@localhost ~]# service mysql ...

  3. box-shadow

    box-shadow:a b c d e; a-水平位置,相对于盒子本身在水平方向的正偏移距离: b-垂直位置: c-模糊距离: d-阴影尺寸,从盒子的边框开始算起的阴影的宽度: e-阴影颜色: f- ...

  4. UART接口基本知识

    Universal asynchronous transciever即同一异步收发器,也就是我们平时所说的串口,是一种最简单,最基本的通信接口. 通信接口按照不同的标准有不同的分类,常见的有同步或异步 ...

  5. pimpl idiom vs. bridge design pattern

    http://stackoverflow.com/questions/2346163/pimpl-idiom-vs-bridge-design-pattern

  6. centos6.3安装MySQL 5.6(转)

    1.下载地址:http://dev.mysql.com/downloads/mysql/5.6.html#downloads 选择“Source Code”, 用已经注册好的oracle账户登录后才能 ...

  7. eclipse新建文件模板默认charset=ISO-8859-1解决

    在安装目录下找到eclipse.ini用记事本打开,添加一行-Dfile.encoding=utf-8,就ok了. 这是应为模板中使用了encoding这个变量

  8. HDU 5512

    http://acm.hdu.edu.cn/showproblem.php?pid=5512 gcd(a,b)的位置都是可以选的,之后判断一下奇偶 #include <iostream> ...

  9. Bool 类型变量的使用

    定义一个bool类型的变量,默认为FALSE的 private bool BHaveBeenTip=false; private void label5_Click(object sender, Ev ...

  10. Shell脚本检测文件夹是否已被挂载的方法

    方法1: if grep -qs '/mnt/foo' /proc/mounts; then echo "It's mounted." else echo "It's n ...