简介
Docker Swarm 是一个强大的集群管理和编排解决方案,可让你大规模部署和管理 Docker 容器。在本教程中,你将学习如何设置 Docker Swarm、管理和扩展你的 Swarm 服务,以及充分利用 Docker 容器编排功能的全部潜力。
了解 Docker Swarm
什么是 Docker Swarm?
Docker Swarm 是用于 Docker 容器的原生集群和编排工具。它允许你管理一组称为 Swarm 的 Docker 引擎,并将服务部署到 Swarm 中。在 Docker Swarm 中,Docker 引擎作为单个虚拟 Docker 主机协同工作。
Docker Swarm 中的关键概念
- 节点:节点是参与 Swarm 的各个 Docker 引擎。有两种类型的节点:管理器和工作节点。
- 管理器:管理器负责管理 Swarm,包括调度任务、维护 Swarm 的期望状态以及为 Swarm 提供入口点。
- 工作节点:工作节点负责在 Swarm 中运行实际的容器。
- 服务:服务定义应用程序的期望状态。一个服务可以是单个容器或一组协同工作的容器。
- 任务:任务是 Swarm 中调度的原子单元。每个服务被划分为任务,然后这些任务被调度到可用节点上运行。
- 负载均衡:Docker Swarm 为服务提供内置的负载均衡。管理器节点会自动在工作节点之间分配任务,确保高可用性和可扩展性。
Docker Swarm 的优势
- 原生编排:Docker Swarm 是原生编排工具,这意味着它内置于 Docker 引擎中,不需要任何额外的软件。
- 简单性:Docker Swarm 的设置和管理相对简单,使其成为中小型部署的不错选择。
- 高可用性:Docker Swarm 提供内置的高可用性特性,如自动任务调度和负载均衡。
- 可扩展性:Docker Swarm 可以根据需要轻松扩展或缩减节点和容器的数量。
- 安全性:Docker Swarm 使用与 Docker 引擎相同的安全特性,包括基于角色的访问控制和加密通信。
既然你对 Docker Swarm 有了基本的了解,让我们进入下一部分:初始化 Docker Swarm。
初始化 Docker Swarm
准备节点
在初始化 Docker Swarm 之前,你需要准备好一组 Docker 主机(节点)。你可以使用物理机或虚拟机,只要它们运行的是相同版本的 Docker。
初始化 Swarm
要初始化 Docker Swarm,你需要将其中一个节点指定为管理器。你可以通过在目标节点上运行以下命令来完成:
docker swarm init --advertise-addr <MANAGER-IP>
将 <MANAGER-IP> 替换为管理器节点的 IP 地址。
运行此命令后,你将收到一个令牌,可用于将其他节点作为工作节点加入到 Swarm 中。你可以通过在目标节点上运行以下命令将节点作为工作节点加入:
docker swarm join --token <TOKEN> <MANAGER-IP>:2377
将 <TOKEN> 替换为你从 docker swarm init 命令收到的令牌,并将 <MANAGER-IP> 替换为管理器节点的 IP 地址。
验证 Swarm
你可以通过在管理器节点上运行以下命令来验证 Swarm 的状态:
docker node ls
这将显示 Swarm 中所有节点的列表,以及它们的角色(管理器或工作节点)和状态。
保护 Swarm
默认情况下,Swarm 中节点之间的通信使用 Raft 协议进行加密。但是,你可以通过启用相互传输层安全(mTLS)身份验证来进一步保护你的 Swarm。
要启用 mTLS,你需要生成并分发必要的证书。你可以在管理器节点上使用 docker swarm ca 命令来完成此操作。
docker swarm ca --rotate
此命令将生成新的根证书和中间证书,并将它们分发给 Swarm 中的所有节点。
既然你已经初始化了 Docker Swarm,让我们进入下一部分:管理和扩展 Swarm 服务。
管理和扩展 Swarm 服务
部署服务
要将服务部署到 Docker Swarm,可以使用 docker service create 命令。例如,要部署一个 Nginx 网络服务器,可以运行以下命令:
docker service create --name nginx -p 80:80 nginx:latest
这将创建一个名为“nginx”的新服务并将其部署到 Swarm 中。该服务将在主机上公开端口 80,并将其转发到容器中的端口 80。
扩展服务
可以使用 docker service scale 命令来扩展服务的副本数(任务数)。例如,要将“nginx”服务扩展到 5 个副本,可以运行:
docker service scale nginx=5
这将为“nginx”服务创建另外 4 个任务,并且管理器节点将自动在可用的工作节点上调度它们。
更新服务
可以使用 docker service update 命令来更新服务的配置。例如,要将“nginx”服务更新为使用不同的镜像版本,可以运行:
docker service update --image nginx:1.19 nginx
这将把“nginx”服务更新为使用“nginx:1.19”镜像。
监控 Swarm 服务
可以使用 docker service ls 和 docker service ps 命令来监控 Swarm 服务的状态。docker service ls 命令将显示 Swarm 中运行的所有服务的列表,而 docker service ps 命令将显示服务内每个任务的状态。
## 列出所有服务
docker service ls
## 列出特定服务的任务
docker service ps nginx
排空节点
如果你需要对某个节点进行维护,可以将其“排空”,这将导致管理器将在该节点上运行的任何任务重新调度到其他可用节点。你可以使用 docker node update 命令来执行此操作:
docker node update --availability drain <NODE-ID>
将 <NODE-ID> 替换为你要排空的节点的 ID。
以上涵盖了管理和扩展 Docker Swarm 服务的基础知识。有了这些知识,你应该能够部署、扩展和维护在 Docker Swarm 上运行的应用程序。
总结
在本教程结束时,你将对 Docker Swarm 以及如何轻松设置它、管理你的 Swarm 服务和扩展你的容器化应用程序有扎实的理解。利用 Docker Swarm 的强大功能简化你的容器部署和管理流程,确保你的应用程序具有高可用性和可扩展性。



