第23章 快速搭建容器集群Docker三剑客之Docker Swarm安装和配置

本文简介了 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 集群中部署服务。

  1. 创建一个简单的服务

    css 复制代码
    sudo docker service create --replicas 3 -p 80:80 --name my-web nginx

    这个命令会创建一个名为 my-web 的服务,使用 Nginx 镜像,并且在集群中运行 3 个副本。服务会将主机的 80 端口映射到容器的 80 端口。

  2. 查看服务状态

    bash 复制代码
    sudo docker service ls
  3. 查看服务详细信息

    perl 复制代码
    sudo docker service ps my-web

管理 Swarm

在 Swarm 集群中,管理节点负责服务的调度和集群的状态管理。你可以通过以下命令进行一些常见的管理任务。

  1. 添加新的 Manager 节点: 在管理节点上运行以下命令获取添加 Manager 的命令:

    csharp 复制代码
    sudo docker swarm join-token manager

    然后在新节点上执行输出的命令。

  2. 添加新的 Worker 节点: 在管理节点上运行以下命令获取添加 Worker 的命令:

    csharp 复制代码
    sudo docker swarm join-token worker

    然后在新节点上执行输出的命令。

  3. 移除节点 : 在管理节点上运行以下命令移除指定节点(假设要移除的节点 ID 为 node-id):

    bash 复制代码
    sudo docker node rm node-id
  4. 更新服务 : 可以使用 docker service update 命令来更新服务配置,例如增加副本数量: sudo docker service update --replicas 5 my-web

配置 Swarm 网络

Docker Swarm 支持多种网络模式,包括覆盖网络(Overlay Network),用于在多个节点之间通信。

  1. 创建覆盖网络

    css 复制代码
    sudo docker network create --driver overlay --attachable my-network
  2. 在服务中使用覆盖网络

    css 复制代码
    sudo docker service create --replicas 3 --network my-network --name my-web nginx

停止 Swarm 集群

如果你想停止 Swarm 集群,可以先移除所有节点,然后在管理节点上运行以下命令:

  1. 移除节点: 在管理节点上运行以下命令移除所有节点:

    bash 复制代码
    sudo docker node rm $(sudo docker node ls -q)
  2. 关闭 Swarm: 在管理节点上运行以下命令关闭 Swarm:

    css 复制代码
    sudo docker swarm leave --force

    在 Worker 节点上运行以下命令离开 Swarm:

    复制代码
    sudo docker swarm leave
相关推荐
上天_去_做颗惺星 EVE_BLUE21 分钟前
Docker高效使用指南:从基础到实战模板
开发语言·ubuntu·docker·容器·mac·虚拟环境
Yana.nice1 小时前
openssl将证书从p7b转换为crt格式
java·linux
AI逐月1 小时前
tmux 常用命令总结:从入门到稳定使用的一篇实战博客
linux·服务器·ssh·php
小白跃升坊1 小时前
基于1Panel的AI运维
linux·运维·人工智能·ai大模型·教学·ai agent
跃渊Yuey2 小时前
【Linux】线程同步与互斥
linux·笔记
舰长1152 小时前
linux 实现文件共享的实现方式比较
linux·服务器·网络
好好沉淀2 小时前
Docker开发笔记(详解)
运维·docker·容器
zmjjdank1ng2 小时前
Linux 输出重定向
linux·运维
路由侠内网穿透.2 小时前
本地部署智能家居集成解决方案 ESPHome 并实现外部访问( Linux 版本)
linux·运维·服务器·网络协议·智能家居
VekiSon2 小时前
Linux内核驱动——基础概念与开发环境搭建
linux·运维·服务器·c语言·arm开发