Docker swarm 实践思考

来源:互联网 发布:c语言工资计算系统 编辑:程序博客网 时间:2024/06/05 07:14

Main Reference:https://marshal.ohtly.com/2016/12/19/create-simple-service-with-docker-swarm-mode/

创建Swarm

上面创建了3个节点。计划让:

  • t1作为manager节点,swarm的操作命令只能在manager节点上执行
  • t2t3作为worker节点

可通过docker-machinessh命令无需密码登录到t1节点:

1
docker-machine ssh t1

t1节点创建swarm:

1
docker swarm init --advertise-addr 192.168.99.100

执行后会输出类似这样的结果:

1
2
3
docker swarm join \
--token SWMTKN-1-04e9uir3hzkfvog5r3idnanic1e3en3ffdtizrqondf9flus0e-46akedpdhu9upa6nmw7q6fusm \
192.168.99.100:2377

退出t1,再次通过docker-machine ssh命令登录到t2t3,执行上述命令加入到t1创建的swarm中,即:

1
2
3
docker swarm join \
--token SWMTKN-1-04e9uir3hzkfvog5r3idnanic1e3en3ffdtizrqondf9flus0e-46akedpdhu9upa6nmw7q6fusm \
192.168.99.100:2377

然后,再次登录t1,可通过如下命令查看swarm加入的情况:

1
2
3
4
5
docker@t1:~$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
0vbcfw1f5ozy74yy1wzkdgqlz t3 Ready Active
4muoqgiwxig9y4xks6ua8ssf5 * t1 Ready Active Leader
65h5he04on3n93o250fcs1nuo t2 Ready Active

创建服务

t1节点,执行命令创建服务:

1
docker service create -p 3000:3000 --name hello-service marshalw/hello-service:0.1.0

这个命令类似docker的run命令:

1
docker run -d -p 3000:3000 marshalw/hello-service

区别是,docker run命令只在当前docker服务器上创建容器,docker service create将在创建的swarm中创建容器。上面创建服务的命令只跑了1个服务实例:

1
2
3
$ docker service ls
ID NAME REPLICAS IMAGE COMMAND
2itleggpnm14 hello-service 1/1 marshalw/hello-service

虽然服务只部署在swarm其中一个节点,但无论访问其中哪个节点,都可获得服务:

1
2
3
4
5
6
$ curl http://192.168.99.100:3000/hello/name
{"status":"OK"}
$ curl http://192.168.99.101:3000/hello/name
{"status":"OK"}
$ curl http://192.168.99.102:3000/hello/name
{"status":"OK"}

原因是未部署服务的节点会自动转发请求到服务所在的节点上去。

改变服务的实例数

下面命令将目前1个实例数改为3个:

1
docker service scale hello-service=3

可以通过docker service ps命令查看具体节点上服务的状态:

1
2
3
4
5
$ docker service ps hello-service
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR
cls3ozabbapthazz670s3psof hello-service.1 marshalw/hello-service t1 Running Shutdown 6 minutes ago
6jut42y57l6z7awuz9ylmk2bf hello-service.2 marshalw/hello-service t2 Running Running 6 minutes ago
8ou2s46wvibm7wc74mncrvkax hello-service.3 marshalw/hello-service t3 Running Shutdown 6 minutes ago

当服务实例失效后swarm自动创建新服务实例

执行:

1
docker service scale hello-service=2

让当前实例数为2。

执行:

1
2
3
4
5
$ docker service ps hello-service
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR
2hx76y324601nzh4oroozyykx hello-service.1 marshalw/hello-service t3 Running Running 42 seconds ago
6jut42y57l6z7awuz9ylmk2bf hello-service.2 marshalw/hello-service t2 Running Running 9 minutes ago
...

发现t2t3上有部署服务,停掉t3节点:

1
docker-machine stop t3

然后在t1上执行:

1
2
3
$ docker service ls
ID NAME REPLICAS IMAGE COMMAND
2itleggpnm14 hello-service 2/2 marshalw/hello-service

发现运行的服务实例还是2个,说明swarm的自动创建新服务实例功能是有效的。


  • Docker Swarm 相關問題

我的 Docker 版本是 1.12,請問我跑的是一代 Swarm 還是二代 Swarm 啊? 

……自己運行的 Swarm 怎麼會連自己都不知道跑的是啥? </div> <div class=

阅读全文
0 0
原创粉丝点击