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