Docker Swarm和Docker Compose都是由Docker官方提供的容器编排工具。它们之间的区别在于,Docker Compose主要用于在单个服务器或主机上创建多个容器,而Docker Swarm则可以在多个服务器或主机上创建容器集群服务。特别是在微服务的部署场景下,Docker Swarm显然更为适用,因为它能够实现在分布式环境中轻松管理和扩展容器服务。
准备
Swarm、Swarmkit和Swarm模式傻傻分不清
https://www.linuxprobe.com/swarm-swarmkit.html
https://sreeninet.wordpress.com/2016/07/14/comparing-swarm-swarmkit-and-swarm-mode/
3台服务器
节点 | 角色 | IP |
---|---|---|
node1 | manager | 192.168.0.13 |
node2 | worker | 192.168.0.12 |
node3 | worker | 192.168.0.11 |
这里我们使用在线服务: https://labs.play-with-docker.com/
开放端口
- Port 2377 TCP for communication with and between manager nodes
- Port 7946 TCP/UDP for overlay network node discovery
- Port 4789 UDP (configurable) for overlay network traffic
Manager 节点初始化
查看docker engine是否已激活swarm模式
代码语言:javascript复制docker info | grep Swarm
初始化一个swarm集群
代码语言:javascript复制[node1] (local) root@192.168.0.13 ~
$ docker swarm init --advertise-addr 192.168.0.13
Swarm initialized: current node (kmi05q0oc98hykhpjcd2kcbn2) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-0fta3d58gkcrqp7tf9u5lbhfr7cfilzzp875ixzxswlnep08pa-2hw90l3ykhsltn1hmv6s89ng2 192.168.0.13:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
#再次查看token
docker swarm join-token manager
Node1
加入一个已经存在的swarm集群
代码语言:javascript复制docker swarm join --token SWMTKN-1-0fta3d58gkcrqp7tf9u5lbhfr7cfilzzp875ixzxswlnep08pa-2hw90l3ykhsltn1hmv6s89ng2 192.168.0.13:2377
Node2节点
和node1节点的操作一致
服务
以下操作基于 manager 节点
代码语言:javascript复制#发布一个服务到集群
docker service create --replicas 1 --name helloworld alpine ping docker.com
#服务列表
docker service ls
#查看服务运行在哪个节点
docker service ps helloworld
#服务详情
docker service inspect --pretty helloworld
#容器列表
docker ps
#扩容
docker service scale helloworld=5
#删除服务
docker service rm helloworld
再发布一个服务到集群
代码语言:javascript复制docker service create --replicas 3 --name redis --update-delay 10s redis:3.0.6
将redis:3.0.6滚动升级为redis:3.0.7
代码语言:javascript复制docker service update --image redis:3.0.7 redis
node
代码语言:javascript复制#节点列表
docker node ls
#清空一个节点
docker node update --availability drain node2
#节点详情
docker node inspect --pretty node2
#恢复一个节点
docker node update --availability active node2
使用compose文件
代码语言:javascript复制#将应用程序部署到 Swarm
docker stack deploy -c bb-stack.yaml demo
#列出服务
docker service ls
#移除服务
docker stack rm demo
Docker Compose文件在普通的Docker环境和Swarm模式下的主要区别
- 在Swarm模式下,Compose文件的服务定义可能包含更多的配置项,如replicas(副本数)和deploy(部署配置)等。这些配置项用于指定服务在Swarm集群中的运行方式。
- 在Swarm模式下,你可以使用配置对象来存储敏感信息,以便在服务中共享。这是Swarm模式中一个重要的安全特性。
参考
https://blog.csdn.net/u022812849/article/details/134006815
https://docs.docker.com/engine/swarm/
https://docs.docker.com/compose/compose-file/compose-file-v3/#deploy