本文简介了 Docker Swarm,Docker 官方的容器集群管理和编排工具,适合快速搭建和管理多主机容器集群。Swarm 提供100% Docker API 兼容性、内置服务发现与负载均衡、高可用架构及滚动更新等功能,适用于寻求简易操作的中小型项目。文中还涵盖了在 CentOS 8 上安装配置 Docker Swarm 的步骤,包括初始化 Swarm、加入节点、部署服务和管理网络等关键操作。
Docker Swarm简介
Docker Swarm 是 Docker 官方推出的容器集群管理和编排工具,旨在简化多台主机上的 Docker 容器的部署、管理和扩展。它将一组 Docker 主机转换成一个虚拟的 Docker 主机,让用户可以像管理单个主机一样轻松地管理整个集群。Swarm 的设计目的是为了提供一种简单的方法来构建和运行分布式应用程序,同时保持与标准 Docker API 的完全兼容性,这意味着所有基于标准 Docker API 构建的工具都可以直接与 Swarm 一起工作。
主要特点
- 100% 支持 Docker API:这使得现有的 Docker 工具(如 Docker Compose)可以直接与 Swarm 集成,方便用户从单节点迁移到多节点环境。
- 内置服务发现和支持负载均衡:Swarm 内置了对 DNS 和外部负载均衡的支持,允许你很容易地在多个节点间分发流量。
- Raft 分布式一致性算法:用于选举 Manager 节点并确保集群状态的一致性。这种机制提高了系统的可靠性和容错能力。
- 高可用性架构:通过设置奇数个 Manager 节点(例如3或5),即使某些 Manager 节点失效,集群仍然能够正常运作。
- 易于使用的服务定义:你可以用简单的命令行接口定义和管理服务,包括指定镜像、副本数量、端口映射等参数。
- 滚动更新和回滚:支持平滑升级应用版本,并可以在出现问题时快速回滚到之前的稳定状态。
使用场景
Docker Swarm 适用于那些需要快速搭建容器集群并且希望操作尽可能简单的场合。对于中小企业或者不需要 Kubernetes 复杂功能的小型项目来说,Swarm 提供了一个轻量级且易用的选择。不过,随着业务的增长和技术的发展,很多组织可能会转向更强大的容器编排平台如 Kubernetes(K8S)。
总之,Docker Swarm 是一个强大但相对简单的容器编排解决方案,特别适合那些寻求快速入门容器化技术而不愿意投入过多时间和资源进行复杂配置的团队。
Docker Swarm架构
Docker Swarm安装
基于已经安装的 Docker,本文介绍通过简单的命令来初始化和配置 Docker Swarm 集群。在 CentOS 8 上启动和配置 Docker Swarm,并在其中部署和管理服务。在实际使用中,根据具体需求调整配置,以达到最佳效果。
任务实施
初始化 Docker Swarm
选择一个节点作为 Swarm 的管理节点(Manager),并初始化 Swarm 集群。
在管理节点上初始化 Swarm:
go
```
sudo docker swarm init
```
执行上述命令后,Docker 会输出一个加入 Swarm 集群的命令,类似于:
```
docker swarm join --token SWMTKN-1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 192.168.1.1:2377
```
这个命令包含了用于加入 Swarm 的令牌和管理节点的 IP 地址及端口。
加入 Worker 节点
在其他节点上,使用初始化 Swarm 时生成的命令将它们加入到 Swarm 集群中。
在 Worker 节点上执行加入命令:
go
```
sudo docker swarm join --token SWMTKN-1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 192.168.1.1:2377
```
查看 Swarm 状态
在管理节点上,可以使用以下命令查看集群的状态和节点信息。
查看节点列表:
go
```
sudo docker node ls
```
这个命令会列出集群中的所有节点,包括它们的角色(Manager 或 Worker)和状态。
部署服务
使用 docker service
命令可以在 Swarm 集群中部署服务。
-
创建一个简单的服务:
csssudo docker service create --replicas 3 -p 80:80 --name my-web nginx
这个命令会创建一个名为
my-web
的服务,使用 Nginx 镜像,并且在集群中运行 3 个副本。服务会将主机的 80 端口映射到容器的 80 端口。 -
查看服务状态:
bashsudo docker service ls
-
查看服务详细信息:
perlsudo docker service ps my-web
管理 Swarm
在 Swarm 集群中,管理节点负责服务的调度和集群的状态管理。你可以通过以下命令进行一些常见的管理任务。
-
添加新的 Manager 节点: 在管理节点上运行以下命令获取添加 Manager 的命令:
csharpsudo docker swarm join-token manager
然后在新节点上执行输出的命令。
-
添加新的 Worker 节点: 在管理节点上运行以下命令获取添加 Worker 的命令:
csharpsudo docker swarm join-token worker
然后在新节点上执行输出的命令。
-
移除节点 : 在管理节点上运行以下命令移除指定节点(假设要移除的节点 ID 为
node-id
):bashsudo docker node rm node-id
-
更新服务 : 可以使用
docker service update
命令来更新服务配置,例如增加副本数量: sudo docker service update --replicas 5 my-web
配置 Swarm 网络
Docker Swarm 支持多种网络模式,包括覆盖网络(Overlay Network),用于在多个节点之间通信。
-
创建覆盖网络:
csssudo docker network create --driver overlay --attachable my-network
-
在服务中使用覆盖网络:
csssudo docker service create --replicas 3 --network my-network --name my-web nginx
停止 Swarm 集群
如果你想停止 Swarm 集群,可以先移除所有节点,然后在管理节点上运行以下命令:
-
移除节点: 在管理节点上运行以下命令移除所有节点:
bashsudo docker node rm $(sudo docker node ls -q)
-
关闭 Swarm: 在管理节点上运行以下命令关闭 Swarm:
csssudo docker swarm leave --force
在 Worker 节点上运行以下命令离开 Swarm:
sudo docker swarm leave