尝试在Mac上使用Docker 1.12的内置编排功能

我将尝试使用新加入的Docker内置编排功能。

我在完成这篇文章时,在Sakura Cloud上发现了使用docker v1.12多主机的编排功能。

虽然非常好写,但由于我打算在我的Mac本地测试,有一些小差别,所以我还是决定发布这个版本。

手续的流程如下所示。

    1. 创建Swarm Manager节点,并添加两个Swarm Worker节点。

 

    1. 尝试创建一个nginx容器。

 

    1. 创建多个nginx副本以进行扩展。

 

    1. 尝试删除一些副本以确认其行为。

 

    尝试删除一个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
广告
将在 10 秒后关闭
bannerAds