Docker容器编排:Linux-Tutorial中的Docker Swarm入门实战

Docker容器编排:Linux-Tutorial中的Docker Swarm入门实战

【免费下载链接】Linux-Tutorial Linux-Tutorial是一个Linux系统教程,适合用于学习和掌握Linux命令行操作和系统管理技能。特点:内容详细、实例丰富、适合入门。 【免费下载链接】Linux-Tutorial 项目地址: https://gitcode.com/gh_mirrors/li/Linux-Tutorial

你是否还在为多容器应用的部署头疼?服务器资源利用率低、容器间网络配置复杂、故障恢复需要手动操作?本文将通过Linux-Tutorial项目中的实战案例,带你快速掌握Docker Swarm(容器集群)的核心技能,实现容器的自动化部署与管理。读完本文你将能够:搭建Swarm集群环境、使用docker-compose编排多服务应用、实现服务的动态扩缩容、配置高可用负载均衡。

Docker Swarm基础概念

Docker Swarm是Docker官方提供的容器编排工具,可将多个Docker主机组成一个虚拟的"超级计算机",统一管理容器的生命周期。相比单机Docker,Swarm提供三大核心能力:

  • 集群管理:通过Manager节点管理Worker节点,实现多主机统一控制
  • 服务编排:使用声明式语法定义服务,自动处理容器调度与部署
  • 高可用保障:服务故障自动恢复,支持滚动更新与回滚

Linux-Tutorial项目中提供了完整的Docker环境支持,基础Docker安装可参考Docker 安装与使用。Swarm作为Docker Engine内置功能,无需额外安装,只需通过命令初始化即可启用。

Swarm核心组件

Docker Swarm架构

  • Manager节点:负责集群管理决策,包括服务调度、状态维护、集群配置等
  • Worker节点:运行实际容器,接收并执行Manager节点的任务
  • Service:定义容器的运行模板,包括镜像、端口、环境变量等配置
  • Task:Swarm集群的最小调度单元,通常对应一个容器实例

搭建Swarm集群环境

环境准备

本次实战使用3台CentOS 7主机,节点规划如下:

节点角色IP地址硬件配置
Manager192.168.1.102核4G
Worker1192.168.1.112核4G
Worker2192.168.1.122核4G

所有节点需先安装Docker环境,可使用项目提供的自动化脚本快速部署:

# 使用项目中的Docker安装脚本
sh favorite-file/shell/install_docker_centos7.sh

初始化Swarm集群

在Manager节点执行初始化命令:

# 初始化Swarm集群,指定Manager节点的IP地址
docker swarm init --advertise-addr 192.168.1.10

成功执行后会输出类似以下内容:

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

To add a worker to this swarm, run the following command:
    docker swarm join --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c 192.168.1.10:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

添加Worker节点

在两台Worker节点分别执行上一步输出的join命令:

docker swarm join --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c 192.168.1.10:2377

验证集群状态

在Manager节点执行以下命令检查集群状态:

# 查看集群节点
docker node ls

# 输出示例
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
abc123def456 *                manager-node        Ready               Active              Leader              20.10.12
ghj789ikl012                  worker1-node        Ready               Active                                  20.10.12
mno345pqr678                  worker2-node        Ready               Active                                  20.10.12

使用docker-compose编排服务

Linux-Tutorial项目的favorite-file/gravitee-docker-compose目录提供了多个docker-compose实战案例,我们以platform/docker-compose.yml为基础,改造为Swarm适用的版本。

创建docker-compose.yml

version: '3.8'

services:
  nginx:
    image: nginx:1.15-alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./nginx/ssl:/etc/ssl
    deploy:
      replicas: 1
      placement:
        constraints: [node.role == manager]

  mongodb:
    image: mongo:3.4
    volumes:
      - mongodb_data:/data/db
    deploy:
      replicas: 1
      resources:
        limits:
          cpus: '0.5'
          memory: 512M

  elasticsearch:
    image: elasticsearch:6.4.0
    environment:
      - http.host=0.0.0.0
      - transport.host=0.0.0.0
      - xpack.security.enabled=false
    ulimits:
      nofile: 65536
    volumes:
      - elasticsearch_data:/usr/share/elasticsearch/data
    deploy:
      replicas: 1
      resources:
        limits:
          cpus: '1'
          memory: 2G

  apim_gateway:
    image: graviteeio/gateway:latest
    environment:
      - gravitee_management_mongodb_uri=mongodb://mongodb:27017/gravitee
      - gravitee_reporters_elasticsearch_endpoints_0=http://elasticsearch:9200
    depends_on:
      - mongodb
      - elasticsearch
    deploy:
      replicas: 3
      update_config:
        parallelism: 1
        delay: 10s
      restart_policy:
        condition: on-failure

volumes:
  mongodb_data:
  elasticsearch_data:

核心配置说明

  1. deploy配置:Swarm模式特有的部署配置,包括:

    • replicas:指定服务副本数
    • placement:节点调度约束
    • resources:资源限制
    • update_config:滚动更新策略
  2. 持久化存储:使用命名卷(volumes)而非宿主机绑定挂载,确保数据在集群中可用

  3. 服务发现:通过服务名自动发现,如mongodb://mongodb:27017

部署与管理Swarm服务

部署栈服务

在Manager节点执行以下命令部署整个应用栈:

# 部署栈,指定栈名称和compose文件
docker stack deploy -c docker-compose.yml gravitee

查看服务状态

# 查看栈中的所有服务
docker stack services gravitee

# 查看服务运行日志
docker service logs -f gravitee_apim_gateway

# 查看单个服务详情
docker service inspect gravitee_apim_gateway

动态扩缩容

当流量增加时,可快速扩展服务实例数量:

# 将apim_gateway服务扩展到5个实例
docker service scale gravitee_apim_gateway=5

# 缩减到2个实例
docker service scale gravitee_apim_gateway=2

滚动更新服务

更新服务镜像版本,实现零停机部署:

# 更新服务镜像
docker service update --image graviteeio/gateway:1.30.0 gravitee_apim_gateway

Swarm会自动执行滚动更新:先启动新实例,健康检查通过后停止旧实例,逐个替换所有副本。

服务监控与维护

查看集群资源使用情况

# 查看节点资源使用
docker node ps

# 查看容器资源占用
docker stats

备份数据卷

项目中提供了Prometheus监控配置,可参考platform/prometheus.yml配置监控系统。数据备份可使用以下命令:

# 备份mongodb数据卷
docker run --rm -v gravitee_mongodb_data:/source -v $(pwd):/backup alpine tar -czf /backup/mongodb_backup.tar.gz -C /source .

故障处理示例

当某个Worker节点故障时,Swarm会自动将该节点上的容器调度到其他健康节点。可通过以下步骤模拟和观察:

  1. 在Worker节点执行docker node update --availability drain worker1-node将节点设为不可用
  2. 观察容器自动迁移到其他节点:docker stack ps gravitee
  3. 恢复节点:docker node update --availability active worker1-node

总结与进阶

通过本文实战,你已掌握Docker Swarm的核心操作:从集群搭建、服务编排到动态扩缩容。Linux-Tutorial项目还提供了更多高级场景示例:

进阶学习路径:

  1. 配置Swarm可视化管理界面(如Portainer)
  2. 实现跨主机网络加密与安全策略
  3. 结合GitLab CI/CD实现自动部署
  4. 学习Docker Swarm与Kubernetes的选型对比

收藏本文,关注Linux-Tutorial项目获取更多容器编排实战案例。下期将带来"Docker Swarm与外部存储集成"的深度教程。

【免费下载链接】Linux-Tutorial Linux-Tutorial是一个Linux系统教程,适合用于学习和掌握Linux命令行操作和系统管理技能。特点:内容详细、实例丰富、适合入门。 【免费下载链接】Linux-Tutorial 项目地址: https://gitcode.com/gh_mirrors/li/Linux-Tutorial

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值