全网最全的docker-swarm入门教程

全网最全的docker-swarm入门教程

1. 什么是 Docker Swarm

Docker Swarm 是用来管理 Docker 集群的工具,从 Docker v1.12.0 版本开始,Docker Swarm 已经包含在 Docker 引擎中。官方文档:Docker Swarm Official。

2. 与 Docker Compose 的异同

两者都是为了简化容器化应用程序的部署、管理扩展的工具:

1. 相同点:两者都是为了简化容器化应用程序的部署和管理。2. 不同点:

Docker Compose:适用于单机上的容器化应用程序编排。Docker Swarm:用于容器化应用程序在生产环境中的需求,提供集群管理和容器编排功能。

3. Docker Swarm 的工作原理

3.1 基本概念

节点 (Node):Swarm 集群中的每个 Docker 主机。

Manager 节点:负责集群管理和控制,可以有多个,但只有一个 Leader。Worker 节点:接收来自 Manager 节点的任务并执行相应的容器操作。 Raft 协议:用于选举Manager节点的Leader(至少2个Manager节点参与选举),并确保Manager节点之间的状态信息同步。

3.2 工作流程

集群初始化:使用 docker swarm init 初始化集群,执行该命令的主机会自动成为 Manager 节点(Leader)。节点加入:其他 Docker 主机可以通过 Manager 节点提供的 token 加入集群。服务定义:用户定义服务来描述容器应用程序,Manager 节点负责任务调度(任务是swarm中的最小调度单位,表现为一个单一的容器。服务是一组任务的集合且定义了任务属性)。调度策略:Leader节点根据调度策略(spread-默认,binpack和random),在集群中选择合适的节点来部署容器实例。容器编排:Leader节点负责对容器进行编排和管理,包括创建、启动、停止、重启容器实例等操作。

4. Swarm 集群管理

4.1 准备工作

2 个 Manager 节点和 2 个 Worker 节点

Manager1:192.168.5.101,hostname=manager1Manager2:192.168.5.102,hostname=manager2Worker1:192.168.5.103,hostname=worker1Worker2:192.168.5.104,hostname=worker2

4.2 初始化集群

在 Manager1 上执行命令:docker swarm init --advertise-addr=192.168.5.101

说明:参数–advertise-addr叫做广播地址。指定其他节点用来与当前节点通信的IP(端口默认2377)这一参数是可选的,当节点上有多个IP时(多网卡情况),最好指定使用哪个IP。特别说明:命令执行成功后,Swarm会自动将当前节点作为Manager节点并自动生成集群的token。 token分两类:管理token和工作token,分别用于其他的管理节点和工作节点加入集群使用。

docker swarm join-token worker #管理节点查看工作token

docker swarm join-token manager #管理节点查看管理token

4.3 加入节点

加入Manager2节点。Manager2上执行如下命令:

docker swarm join --advertise-addr=Manager2的广播地址 --token 管理token Manager1广播地址:2377例如:docker swarm join --advertise-addr=192.168.5.102 --token SWMTKN-1-2e40bfiw4djkimlzzfk3o88893bj69qtb5pe9shc4qlflexg6u-8yhth9a72fd5ebiiaae1qqfox 192.168.5.101:2377。 加入worker1、worker2节点。在对应的节点上执行如下命令:

docker swarm join --advertise-addr=Worker的广播地址 --token 工作token Manager1广播地址:2377。例如:docker swarm join --advertise-addr=192.168.5.103 --token SWMTKN-1-2e40bfiw4djkimlzzfk3o88893bj69qtb5pe9shc4qlflexg6u-6u24u39mfkvhklsv4xd4l86xe 192.168.5.101:2377。

4.4 集群解散

docker swarm leave --force # 节点退出集群,manager节点退出加--force

docker node rm 退出节点的主机名 # Manager上操作

5. 节点管理

注意:节点管理命令均在管理节点上操作,工作节点无操作权限。

5.1查看集群节点

docker node ls #查看集群所有节点

docker node inspect 节点的主机名 #查看集群指定节点

5.2节点升级和降级

docker node promote 节点的主机名 # worker升级成manager

docker node demote 节点的主机名 # manager降级成worker

5.3 节点下线

docker node update --availability drain 节点的主机名 #节点暂停接受任务

5.4节点上线

docker node update --availability active 节点的主机名 #节点重新接受任务

6. 服务管理

注意:节点管理命令均在管理节点上操作,工作节点无操作权限。

6.1 服务定义

docker service create --name 服务名 [-d] [-p] [-e] [--network] [--replicas] [--mount] image:tag

说明:

-d 代表后台运行

-p 代表端口映射

-e 代表环境变量

--network 代表使用的网络

--replicas 代表副本数量

--mount 代表文件系统挂载

image:tag 代表基础镜像和tag

6.2服务查看

docker service ls #查看集群中的所有服务

docker service ps 服务名 #查看集群中的指定服务(包含服务运行的节点)

6.3 服务移除

docker service rm服务名 #移除集群中的一个或多个服务

6.4服务模式

docker service create ... --mode replicated ...

说明:副本服务模式(默认)。在每个 node 上可以运行一个或多个副本

docker service create ... --mode global ...

说明:全局服务模式。强制在每个 node 上都运行一个副本(例如收集所有容器的日志)

6.5 服务日志

docker service logs 服务名

7. Swarm 集群的弹性伸缩

弹性伸缩就是动态的增加或减少集中某个服务的任务数目:

docker service create -d --name mydb --replicas=2 \

-p 3306:3306

-e MYSOL ROOT PASSWORD=123456 \

mysql:5.7

7.1 实现方式一

docker service update --replicas 新副本数 服务名

7.2 实现方式二

docker service scale 服务名=新副本数

8. Swarm 集群服务的滚动更新

滚动更新允许在不停止服务的情况下更新服务,也称为灰度更新。

docker service update

--image 基础镜像

--update-delay 定义滚动更新的时间间隔(默认0),单位如s、m、h,1h28m30s即1小时20分30秒

--update-parallelism 定义并行更新的最大数量(正更新的这些任务不可用)

服务名

8.1 visualizer镜像

可让Swarm的服务滚动更新实时显示在UI界面上,便于观察滚动更新的过程。

manager1节点上执行:

docker service create \

--name=viz \

--publish=888:8080/tcp \

--constraint=node.role==manager \

--mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \

dockersamples/visualizer

访问manager1节点的viz服务:

http://manager1节点IP:8088/http://192.168.5.101:8088

8.2 实验:升级MySQL服务基础镜像(v5.7 --> v8.0),由原来2个副本扩展到5个副本,每60秒扩容5个

9. Swarm中使docker compose

在Swarm上运行Docker Compose是一种将Docker Compose文件部署到Docker Swarm集群的方法。Docker Compose是一个用于定义和运行多个Docker容器的工具,而Swarm是Docker的原生容器编排和集群管理工具。

Docker Compose文件是一个YAML格式的文件,用于定义应用程序的各个服务、网络、卷等配置。通过在Swarm集群上运行Docker Compose文件,可以实现在多个主机上同时部署和管理应用程序。

注意:docker create service的缺点,一个命令仅能创建一个service,对于多service的应用程序而言,实属繁琐

9.1 docker compose

docker-compose.yml中有关swarm集群的属性

version: '3.8'

services:

my_service:

image: your_image_name # 替换为你的镜像名

deploy:

replicas: 2 # 服务的副本数量

mode: replicated # 服务的模式(副本模式)

placement: # 服务部署的目标节点

constraints:

- node.id==nodeid # 根据节点id部署任务

- node.hostname==nodehostname # 根据节点主机名部署任务

restart_policy: # 指定服务部署的重启策略

condition: on-failure # none不重启; on-failure容器故障时

delay: 10s # 尝试重启的时间间隔(默认5s)

max_attempts: 3 # 最多的尝试次数(默认无限制)

说明:docker-compose up方式会忽略 deploy 部分的内容!

9.2 docker stack

Swarm堆栈管理工具,可以结合docker-compose实现多service应用程序的部署。 官网文档:https://docs.docker.com/reference/cli/docker/stack/。

docker stack deploy -c yml文件 自定义STACK名

docker stack ls

docker stack ps 自定义STACK名

docker statck down 自定义STACK名

10. 参考资料

Docker Swarm 官方文档Docker Swarm 教程Docker Swarm 实战指南Docker Swarm 速查表

相关推荐

游艇常识分享之游艇的停泊
365足球打水封号还严重嘛

游艇常识分享之游艇的停泊

📅 07-09 👁️ 2991
一加宣布新机质保期为2年,关于手机“三包”你了解多少?
365足球打水封号还严重嘛

一加宣布新机质保期为2年,关于手机“三包”你了解多少?

📅 07-23 👁️ 208
css特效是什么(重新设计风格CSS效果简述)
Microsoft365个人版

css特效是什么(重新设计风格CSS效果简述)

📅 07-23 👁️ 1101
大模型量化压缩技术对比分析:K-Quants、imatrix和i-quants
365足球打水封号还严重嘛

大模型量化压缩技术对比分析:K-Quants、imatrix和i-quants

📅 07-17 👁️ 670
曹彰的身世如何?曹操是如何看待他的?
Microsoft365个人版

曹彰的身世如何?曹操是如何看待他的?

📅 07-20 👁️ 3368
曼陀罗 (植物)
365bet娱乐游戏

曼陀罗 (植物)

📅 07-22 👁️ 1930
为什么不要和猫对视,猫盯着你预示什么
Microsoft365个人版

为什么不要和猫对视,猫盯着你预示什么

📅 08-09 👁️ 4742
国美电器投诉电话是多少?
365bet娱乐游戏

国美电器投诉电话是多少?

📅 08-17 👁️ 7596
柞水县情简介
Microsoft365个人版

柞水县情简介

📅 07-24 👁️ 2494
大腿肌肉僵硬怎么回事
365足球打水封号还严重嘛

大腿肌肉僵硬怎么回事

📅 08-09 👁️ 6374
什么是BIM软件,常用的BIM软件又有哪些?
365足球打水封号还严重嘛

什么是BIM软件,常用的BIM软件又有哪些?

📅 08-05 👁️ 9659
大红牛贷款平台靠谱吗?真实用户测评+申请攻略
365足球打水封号还严重嘛

大红牛贷款平台靠谱吗?真实用户测评+申请攻略

📅 09-07 👁️ 1668