尝试在Mac上使用Docker 1.12的内置编排功能
我将尝试使用新加入的Docker内置编排功能。
我在完成这篇文章时,在Sakura Cloud上发现了使用docker v1.12多主机的编排功能。
虽然非常好写,但由于我打算在我的Mac本地测试,有一些小差别,所以我还是决定发布这个版本。
手续的流程如下所示。
-
- 创建Swarm Manager节点,并添加两个Swarm Worker节点。
-
- 尝试创建一个nginx容器。
-
- 创建多个nginx副本以进行扩展。
-
- 尝试删除一些副本以确认其行为。
- 尝试删除一个Worker节点以确认其行为。
暂时将Docker升级到1.12版本。
由于手上的环境是Mac OS X,所以假设已经安装了Docker for Mac。首先,确认已经将Docker for Mac更新到版本1.12.0-rc2。
$ docker --version
Docker version 1.12.0-rc2, build 906eacd, experimental
创建三个Docker机器,分别称为manager1、worker1和worker2。
# manager1を作る
$ docker-machine create --driver virtualbox manager1
# worker1を作る
$ docker-machine create --driver virtualbox worker1
# worker2を作る
$ docker-machine create --driver virtualbox worker2
# 確認する
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
manager1 * virtualbox Running tcp://192.168.99.100:2376 v1.12.0-rc2
worker1 - virtualbox Running tcp://192.168.99.101:2376 v1.12.0-rc2
worker2 - virtualbox Running tcp://192.168.99.102:2376 v1.12.0-rc2
在接下来的内容中,我们将假设设备和IP地址之间的相互关联如下。
MachineIP Addressmanager1192.168.99.100worker1192.168.99.101worker2192.168.99.102
创建Swarm Manager
$ eval $(docker-machine env manager1)
$ docker swarm init --listen-addr 192.168.99.100:2377
$ docker info|egrep '^Swarm| IsManager'
Swarm: active
IsManager: Yes
添加工人
# worker1を作る
$ eval $(docker-machine env worker1)
$ docker swarm join 192.168.99.100:2377
$ docker info|egrep '^Swarm| IsManager'
Swarm: active
IsManager: No
# worker2を作る
$ eval $(docker-machine env worker2)
$ docker swarm join 192.168.99.100:2377
$ docker info|egrep '^Swarm| IsManager'
Swarm: active
IsManager: No
# 確認する
$ eval $(docker-machine env manager1)
$ docker node ls
ID NAME MEMBERSHIP STATUS AVAILABILITY MANAGER STATUS
0ra8kxzmb58pe6ft5va64w7ua * manager1 Accepted Ready Active Leader
5gv3ybyzn9m8b7tc6wizyjhix worker2 Accepted Ready Active
bom2mr6g2lej017m4v8fou0eu worker1 Accepted Ready Active
尝试创建nginx服务
# manager1の環境を準備する
$ eval $(docker-machine env manager1)
# テスト用のネットワークを作る
$ docker network create -d overlay test_net
# nginxサービスを作る
$ docker service create --name nginx --replicas 1 --network test_net -p 80:80/tcp nginx
# nginxサービスのタスクを確認する
$ docker service tasks nginx
ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE
2rnlb559hs612vp1f5ntl46kh nginx.1 nginx nginx Running 50 seconds Running manager1
下载nginx镜像可能需要一些时间,但当LAST STATE从Preparing…变为Running…后,通过浏览器打开http://192.168.99.100/来确认是否能看到”Welcome to nginx!”的消息。
添加副本
# レプリカを5つにする
$ docker service scale nginx=5
# 確認する
$ docker service tasks nginx
ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE
2rnlb559hs612vp1f5ntl46kh nginx.1 nginx nginx Running 12 minutes Running manager1
cck9rmwa3mfelzykktlhwsoa2 nginx.2 nginx nginx Running 5 seconds Running manager1
dslg4jbsii0q7b5ztjtljjkik nginx.3 nginx nginx Running 5 seconds Running worker2
9g37ap7xh7132nxf4nreh0afl nginx.4 nginx nginx Running 5 seconds Running worker1
c28qiurspqxuqoze01winmwgt nginx.5 nginx nginx Running 5 seconds Running worker1
我试着删除manager1上的副本。
# 無理やりmanager1上にあるレプリカを削除してみます
$ docker ps -qa|xargs docker rm -f
Docker Swarm似乎能够检测到Manager1上的容器消失了,当发生这种情况时,它会自动重新创建已减少的容器。这真是方便啊。
# しばらく待ってからレプリカの数が減っていないことを確認する
$ docker service tasks nginx
ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE
6n9h53h6326ef5lhfo7nzc5a3 nginx.1 nginx nginx Running 9 seconds Running manager1
4pt5qy4vhedyhnww1yrtw0epz nginx.2 nginx nginx Running 10 seconds Running worker2
dslg4jbsii0q7b5ztjtljjkik nginx.3 nginx nginx Running 5 minutes Running worker2
9g37ap7xh7132nxf4nreh0afl nginx.4 nginx nginx Running 5 minutes Running worker1
c28qiurspqxuqoze01winmwgt nginx.5 nginx nginx Running 5 minutes Running worker1
尝试删除 Worker2 看看。
# worker2を削除する
docker-machine rm worker2
# しばらく待って、レプリカの数を確認してみる
docker service tasks nginx
ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE
760crpv5j1gwcxtw6j2cwpjj7 nginx.1 nginx nginx Running 14 seconds Running worker1
b9uigex1dlfp0932xqgn26c8i nginx.2 nginx nginx Running 14 seconds Running worker1
7j0qfo99l29sw9rkv0ud16idm nginx.3 nginx nginx Running 48 seconds Running manager1
erwcg6nz50mkfgj1xcl8gzw7a nginx.4 nginx nginx Running 48 seconds Running manager1
ckfluns4d0ptwlphz8zlof6cq nginx.5 nginx nginx Running 48 seconds Running worker1
整理整理
docker service rm nginx
docker-machine rm manager1 worker1
总结
-
- Swarmの構築が驚くほど簡単になっていて、今後はマルチノードがデフォルト化していくように思えます。
-
- サービスという新しい概念が導入されて、docker psではswarm全体のコンテナは見えません。今後はdocker runやdocker psはカスタム・イメージの準備とデバッグ以外では使わなくなるかもしれませんね。
- 今のところdocker service createにはvolumeをマウントするオプションがなさそうです。(* 後でもう少し調べてみます。)
参考链接 de
- Getting started with swarm mode