CodeGym /课程 /Docker SELF /Docker Swarm 入门

Docker Swarm 入门

Docker SELF
第 18 级 , 课程 0
可用

6.1 Docker Swarm 基本概念

Docker Swarm 是 Docker 提供的内置容器编排系统。它让你可以创建、管理和扩展由 Docker 主机组成的集群,把它们变成一个可供运行容器的逻辑主机。Swarm 会自动在节点之间分配任务,提供方便性和容错能力。这节课我们会学习 Docker Swarm 的关键组件和基础管理命令。

Docker Swarm 的基本概念:

  1. 集群 (Swarm): 一组 Docker 主机组成的逻辑集群。
  2. 管理节点 (Managers): 管理集群并分配任务给工作节点的节点。
  3. 工作节点 (Workers): 执行任务并运行容器的节点。
  4. 服务 (Services): 应用的逻辑表示,描述需要执行的任务以及需要运行多少个容器实例。
  5. 任务 (Tasks): 作为服务实例的单个容器。

Docker Swarm 的架构:

Docker Swarm 采用基于管理节点和工作节点的架构。管理节点负责集群状态管理,而工作节点执行任务。

管理节点:

  • 管理集群的状态与配置。
  • 在工作节点之间分配任务。
  • 提供容错和高可用性 (当存在多个管理节点时)。

工作节点:

  • 执行管理节点分配的任务。
  • 根据任务运行容器。

Docker Swarm 的基本命令:

  1. docker swarm init: 初始化新的 Swarm 集群。
  2. docker swarm join: 加入节点到现有集群。
  3. docker node ls: 查看集群中的节点列表。
  4. docker service create: 创建一个新服务。
  5. docker service ls: 查看正在运行的服务。
  6. docker service scale: 扩展服务到指定数量的实例。
  7. docker service rm: 从集群中删除服务。

使用 Docker Swarm 可以简化分布式系统中的应用管理,提供容错能力、可扩展性和部署的方便性。

6.2 创建 Docker Swarm 集群

创建和管理 Docker Swarm 集群

步骤 1: 初始化集群

在第一个主机(管理员)上执行以下命令:

Terminal

docker swarm init --advertise-addr <MANAGER_IP>

这条命令会初始化一个新的 Swarm 集群,将当前节点变为管理员,并输出用于连接工作节点的命令。

步骤 2: 加入工作节点

在其他主机上执行 docker swarm init 输出的命令,将其加入到集群中:

Terminal

docker swarm join --token <SWARM_TOKEN> <MANAGER_IP>:2377

其中:

  • <SWARM_TOKEN>: 用于连接集群的令牌(由 docker swarm init 提供)。
  • <MANAGER_IP>: 管理员节点的 IP 地址。

步骤 3: 查看节点

使用以下命令查看集群中的所有节点:

Terminal

docker node ls

这条命令将显示所有节点的列表,包括它们的角色、状态和可用性。

docker node ls 命令的输出示例

Terminal

ID                                    HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS
qwertyuiop12345    manager-node        Ready               Active             Leader
asdfghjkl67890      worker-node1       Ready               Active
zxcvbnm09876       worker-node2       Ready               Active

列解释:

  • ID: 节点的唯一标识符。
  • HOSTNAME: 运行节点的主机名。
  • STATUS: 节点的当前状态(比如 Ready)。
  • AVAILABILITY: 节点的可用性(比如 Active)。
  • MANAGER STATUS: 显示节点是否为管理员(比如 Leader, Reachable) 或工作节点(空)。

现在 Docker Swarm 集群已经配置好,你可以用它来创建和扩展应用程序了。

6.3 管理 Docker Swarm

管理 Docker Swarm 的服务

1. 创建服务

创建一个具有指定副本数量的服务:

Terminal

docker service create --name my_web --replicas 3 -p 8080:80 nginx

在这个例子中,会创建一个名为 my_web 的服务,运行 3 个 Nginx 实例。容器会将端口 80 暴露到主机的端口 8080。

2. 查看服务

要查看集群中所有正在运行的服务,请使用以下命令:

Terminal

docker service ls

命令 docker service ls 的输出示例

Terminal

ID                     NAME         MODE           REPLICAS     IMAGE
ab12345               my_web       replicated     3/3          nginx:latest

3. 服务扩展

要更改服务的实例(副本)数量,请使用命令 docker service scale

Terminal

docker service scale my_web=5

现在服务 my_web 将有 5 个实例。

4. 更新服务

要将服务的镜像更新到新的版本,请使用命令 docker service update

Terminal

docker service update --image nginx:latest my_web

实现高可用性

Docker Swarm 通过以下方式支持高可用性:

  1. 任务分配:在集群节点之间分配任务,在故障时自动恢复容器。
  2. 支持多个管理节点:建议使用奇数数量的管理节点(例如 3 或 5 个),以避免 quorum 的问题。
  3. 使用副本:为每个服务设置多个副本,以提高容错能力。

Quorum 的概念

Quorum 是指 多数节点 必须对某个操作(例如数据写入或领导者选举)达成一致,使其生效。例如,在一个 5 节点的集群中,quorum 是 3 个节点。

有用的建议! 确保管理节点分布在不同的物理或云服务器上,以尽量减少同时发生故障的风险。

6.4 一个Docker ComposeDocker Swarm配置示例

Docker Compose可以和Docker Swarm一起使用,以简化多容器应用程序的管理。

文件docker-compose.yml的示例

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "8080-8090:80"
    deploy:
      replicas: 3
      restart_policy:
        condition: on-failure
    networks:
      - my_overlay_network

  db:
    image: postgres:latest
    environment:
      POSTGRES_PASSWORD: example
    deploy:
      replicas: 1
      restart_policy:
        condition: on-failure
    networks:
      - my_overlay_network

networks:
  my_overlay_network:
    driver: overlay
    

Swarm中启动Docker Compose堆栈

要在Docker Swarm中部署堆栈,请使用以下命令:

Terminal

docker stack deploy -c docker-compose.yml mystack

查看堆栈

查看已部署的堆栈:

Terminal

docker stack ls

查看堆栈中的服务

Terminal

docker stack services mystack
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION