Docker 集群管理 - Swarm模式

2024-01-26 10:57:01 浏览数 (1)

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

0 人点赞