参考资料

  1. 能否用Docker替代虚拟化?
  2. 禅道(zentao)是一款开源的项目管理软件
  3. NAS中为何使用Docker?
  4. Pony 是一个高性能、并发安全的编程语言,专为构建高并发系统设计
  5. Cloudreve 启用 JWT(JSON Web Tokens)加密通信
  6. api-firewall 是一个开源的 API 防火墙
  7. Matomo(原名 Piwik)是一个开源的网站分析平台
  8. io.js是Node.js的一个分支,由社区主导开发,旨在提供更快的迭代和更开放的治理模式

Docker Swarm 是 Docker 原生的集群管理工具

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 个节点避免脑裂。