了解Swarm集群
集群是一组运行Docker并加入集群的计算机。在此之后,您继续运行您习惯使用的Docker命令,但现在它们由集群管理器在集群上执行。群中的机器可以是物理的或虚拟的。加入群组后,它们被称为节点。
Swarm管理器可以使用多种策略来运行容器,例如“emptiest node” - 它使用容器填充利用率最低的机器。或“global”确保每台机器只获得指定容器的一个实例。您指示swarm管理器在Compose文件中使用这些策略,就像您已经使用的那样。
集群管理器是群中唯一可以执行命令的机器,或授权其他机器作为工作者加入集群。工人只是在那里提供能力,并且没有权力告诉任何其他机器它能做什么和不能做什么。
到目前为止,您一直在本地计算机上以单主机模式使用Docker。但是Docker也可以切换到swarm模式,这就是使用集群的能力。立即启用集群模式使当前计算机成为集群管理器。从那时起,Docker就会运行您在管理的swarm上执行的命令,而不仅仅是在当前机器上。
Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源。Swarm和Kubernetes比较类似,但是更加轻,具有的功能也较kubernetes更少一些。
首先准备docker-composer.yml文件,例如:
version: "3"
services:
web:
image: 192.168.127.131:5000/friendlyhello
deploy:
replicas: 5
resources:
limits:
cpus: "0.1"
memory: 50M
restart_policy:
condition: on-failure
ports:
- "4000:80"
networks:
- webnet
networks:
webnet:
再初始化swarm。
[[email protected] docker]#docker swarm init
Swarm initialized: current node (xbw0ufz8ld238yvfyvynif4ho) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-3p4oxa51gl3n6fvgwcnsbmoh8l3brcepfclamg987mdkmxre5b-ch4r99ocogrvwazafnhiipzd5 192.168.127.131:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
根据提示,在需要加入这个swarm集群的节点上运行下面命令即可加入:
docker swarm join --token SWMTKN-1-3p4oxa51gl3n6fvgwcnsbmoh8l3brcepfclamg987mdkmxre5b-ch4r99ocogrvwazafnhiipzd5 192.168.127.131:2377
现在使用docker-compose.yml作为模板来启动app:
docker stack deploy -c docker-compose.yml getstartedlab
查看服务列表:
docker service ls
查找Web服务的输出,以您的应用名称为前缀。 如果您将其命名为与此示例中显示的相同,则名称为getstartedlab_web。 还列出了服务ID,以及副本数,映像名称和公开端口。
在服务中运行的单个容器称为任务。 任务被赋予以数字递增的唯一ID,最多为您在docker-compose.yml中定义的副本数。 列出您的服务任务:
[[email protected] docker]#docker service ps getstartedlab_web
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
61fkij121y3c getstartedlab_web.1 192.168.127.131:5000/friendlyhello:latest 192.168.127.132 Running Running 16 minutes ago
gfdhx4yi0dwf getstartedlab_web.2 192.168.127.131:5000/friendlyhello:latest 192.168.127.133 Running Running 16 minutes ago
21klyrcbbhfy getstartedlab_web.3 192.168.127.131:5000/friendlyhello:latest 192.168.127.131 Running Running 16 minutes ago
fmpm946ht130 getstartedlab_web.4 192.168.127.131:5000/friendlyhello:latest 192.168.127.132 Running Running 16 minutes ago
u8dpt9vq637p getstartedlab_web.5 192.168.127.131:5000/friendlyhello:latest 192.168.127.133 Running Running 16 minutes ago
伸缩应用程序
您可以通过更改docker-compose.yml中的副本值来保存更改,并重新运行docker stack deploy命令来伸缩应用程序;Docker就地更新,无需首先拆除堆栈或杀死任何容器。
docker stack deploy -c docker-compose.yml getstartedlab
关闭刚刚创建的app服务
docker stack rm getstartedlab
集群节点可以用docker swarm leave脱离集群
docker swarm leave --force
总结:
docker stack ls # List stacks or apps
docker stack deploy -c <composefile> <appname> # Run the specified Compose file
docker service ls # List running services associated with an app
docker service ps <service> # List tasks associated with an app
docker inspect <task or container> # Inspect task or container
docker container ls -q # List container IDs
docker stack rm <appname> # Tear down an application
docker swarm leave --force # Take down a single node swarm from the manager