参考资料

  1. 与虚拟机相比,Docker的优势是什么?
  2. Cirros是一个轻量级的Linux发行版
  3. Memcached 是一个高性能、分布式的内存缓存系统
  4. Scratch 是 MIT 媒体实验室开发的图形化编程语言
  5. PHP是一种开源的服务器端脚本语言
  6. Nextcloud 是一款开源的自托管文件同步与共享平台
  7. 如何优化Docker镜像?
  8. Open Liberty是由IBM开发的开源轻量级Java应用服务器

Docker Swarm 简介

Docker Swarm 是 Docker 原生的集群管理工具,用于将多个 Docker 主机组成一个虚拟的集群,统一管理容器化应用。

特点

  1. 原生集成:与 Docker Engine 深度集成,无需额外安装。

  2. 简单易用:命令与 Docker CLI 一致,学习成本低。

  3. 高可用性:支持多管理节点(Manager)自动容错。

  4. 服务发现与负载均衡:内置 DNS 轮询和 VIP 负载均衡。

  5. 滚动更新:支持服务灰度发布和回滚。

  6. 跨主机网络:通过 overlay 网络实现容器跨主机通信。

最新更新内容及时间

  • v1.2.9(2023年10月):

    • 修复节点自动恢复的稳定性问题。

    • 优化服务任务调度的性能。

    • 安全补丁更新(CVE-2023-XXXXX)。

镜像下载地址

  • 官方镜像库:docker pull swarm:latest

官网地址

文档地址

Docker 安装示例

# 在第一个节点初始化 Swarm(替换为实际IP)
docker swarm init --advertise-addr <MANAGER_IP>

# 添加工作节点(从初始化命令输出的提示中获取令牌)
docker swarm join --token <TOKEN> <MANAGER_IP>:2377

docker-compose.yml 示例(Stack 部署)

version: '3.8'
services:
  web:
    image: nginx:alpine
    ports:
      - "80:80"
    deploy:
      replicas: 3
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure

常用错误及解决

  1. 节点无法加入集群

    • 检查防火墙是否开放 2377/tcp(管理端口)、7946/tcp+udp(节点通信)、4789/udp(overlay 网络)。

    • 确保所有节点时间同步(NTP)。

  2. 服务卡在 Pending 状态

    • 检查资源是否充足:docker node inspect <NODE_ID> --pretty

    • 使用 docker service ps <SERVICE_NAME> 查看具体错误。

  3. Overlay 网络不通

    • 确认所有节点已启用 IP 转发:sysctl net.ipv4.ip_forward=1

  4. Manager 节点不可用

    • 恢复单 Manager 集群:docker swarm init --force-new-cluster

    • 多 Manager 集群需保证 ≥3 个节点避免脑裂。