8. 使用 Docker Swarm进行容器编排

Docker Swarm 是 Docker 官方提供的容器编排工具,它能够让你轻松地将多个 Docker 主机组合成一个集群,进行服务的编排和管理。本文将全面介绍 Docker Swarm 的概念、如何创建和管理 Swarm 集群、服务的编排与管理,并探讨 Swarm 模式下的网络与存储配置。

1. Docker Swarm 概述

Docker Swarm 提供了一个简单的方式来管理多个 Docker 容器,支持集群管理、服务发现、负载均衡和滚动更新等功能。它使得容器集群的管理变得更加简单高效。

核心概念

  • Manager 节点:负责集群的管理和协调,包括服务部署、负载均衡和任务调度。一个 Swarm 集群至少需要一个 Manager 节点。
  • Worker 节点:负责运行服务容器,接受 Manager 节点的指令。
  • Service:定义了运行在集群中的容器的集合,可以设置副本数、负载均衡策略等。
  • Task:Service 的具体实例,每个 Task 是一个容器实例。

2. 创建和管理 Swarm 集群

准备工作

确保所有节点已经安装了 Docker,并且 Docker 版本为 1.13 及以上。以下命令在所有节点上进行安装和配置:

sudo apt-get update
sudo apt-get install -y docker.io
sudo systemctl start docker
sudo systemctl enable docker

初始化 Swarm 集群

在管理节点上,使用以下命令初始化 Swarm 集群:

docker swarm init --advertise-addr <MANAGER_IP>
  • --advertise-addr 指定 Swarm 集群的 IP 地址,通常是管理节点的 IP。

运行上述命令后,输出类似如下的信息:

Swarm initialized: current node (xxxxxx) is now a manager.

To add a worker to this swarm, run the following command:

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

To add a manager to this swarm, run the following command:

    docker swarm join --token <TOKEN> <MANAGER_IP>:2377 --manager

添加 Worker 节点

在每个 Worker 节点上,使用从管理节点复制的命令加入 Swarm 集群:

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

确保替换 <TOKEN><MANAGER_IP> 为实际的值。

验证集群状态

在管理节点上,使用以下命令查看集群状态:

docker node ls

输出示例:

ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
abcd1234        manager-node  Ready               Active              Leader              20.10.7
efgh5678        worker-node-1  Ready               Active                                  20.10.7
ijkl9012        worker-node-2  Ready               Active                                  20.10.7

3. 服务编排与管理

Docker Swarm 允许你定义和管理服务,通过服务编排来实现容器的自动扩展和负载均衡。以下是创建和管理服务的具体步骤。

定义服务

创建一个简单的 Web 服务,使用 nginx 镜像,指定副本数为 3:

docker service create --name web --replicas 3 -p 80:80 nginx
  • --name 指定服务名称。
  • --replicas 指定服务的副本数。
  • -p 映射端口。

查看服务状态

使用以下命令查看服务的状态:

docker service ls

输出示例:

ID             NAME  MODE         REPLICAS  IMAGE  PORTS
abc1234         web  replicated   3/3       nginx  *:80->80/tcp

查看服务详情

查看服务的详细信息,了解每个 Task 的状态:

docker service ps web

输出示例:

ID             NAME       IMAGE  NODE       DESIRED STATE  CURRENT STATE           ERROR  PORTS
xyz5678        web.1      nginx  manager-node  Running        Running 8 minutes ago
uvw9101        web.2      nginx  worker-node-1 Running        Running 8 minutes ago
rst2345        web.3      nginx  worker-node-2 Running        Running 8 minutes ago

更新服务

可以使用以下命令更新服务,例如将副本数增加到 5:

docker service update --replicas 5 web

删除服务

删除服务的命令如下:

docker service rm web

4. Swarm 模式下的网络与存储

网络配置

Docker Swarm 支持多种网络模式,默认的网络模式是 overlay 网络,可以跨多个主机进行通信。

创建自定义网络

在 Swarm 集群中创建一个 overlay 网络:

docker network create --driver overlay my_overlay_network
启动服务并连接网络

在指定网络的情况下启动服务:

docker service create --name web --network my_overlay_network -p 80:80 nginx

存储配置

Docker Swarm 也支持数据卷和数据卷集(Volume)管理,确保数据在服务重启或迁移时仍然可用。

创建数据卷

创建一个名为 my_data_volume 的数据卷:

docker volume create my_data_volume
使用数据卷

在启动服务时,将数据卷挂载到容器:

docker service create --name db --mount source=my_data_volume,target=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -p 3306:3306 mysql:5.7

高级网络配置

Docker Swarm 还支持配置不同的网络策略,如:

  • 覆盖网络(overlay network):适用于跨多个主机的服务通信。
  • 桥接网络(bridge network):适用于同一主机上的服务通信。

例如,创建一个桥接网络:

docker network create --driver bridge my_bridge_network

示例完整案例

下面是一个完整的 Docker Swarm 配置案例,演示如何创建一个 Web 服务和一个数据库服务,使用自定义网络和数据卷。

docker-compose.yml
version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    networks:
      - my_overlay_network

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: my-secret-pw
    volumes:
      - my_data_volume:/var/lib/mysql
    networks:
      - my_overlay_network

networks:
  my_overlay_network:
    driver: overlay

volumes:
  my_data_volume:

启动 Swarm 集群并部署应用

  1. 初始化 Swarm 集群:

    docker swarm init --advertise-addr <MANAGER_IP>
    
  2. 添加 Worker 节点:

    docker swarm join --token <TOKEN> <MANAGER_IP>:2377
    
  3. 使用 Docker Compose 部署服务:

    docker stack deploy -c docker-compose.yml my_stack
    
  4. 查看服务状态:

    docker stack services my_stack
    
  5. 查看服务的具体实例:

    docker service ps my_stack_web
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值