Skip to content

Docker Swarm

Docker Swarm 是 Docker 官方提供的容器编排工具,它允许用户轻松地管理和扩展容器化应用到多台主机上。Docker Swarm 将一组 Docker 引擎组成的集群作为一个单一的虚拟系统来管理,实现了服务的自动化部署和管理,以及容器的负载均衡。

Docker Swarm 模式

  • 管理模式:Swarm 由管理节点(Manager Nodes)和工作节点(Worker Nodes)组成。管理节点负责集群的管理任务,如维持服务期望的状态、执行编排操作、以及对集群进行扩展或收缩等。工作节点则负责执行由管理节点分配的任务,运行容器服务。

  • 服务发现与负载均衡:Swarm 自带服务发现机制,自动维护服务的可用性,并且可以跨节点自动负载均衡容器服务的请求。

  • 安全性:Docker Swarm 支持 TLS 加密和安全集群接入令牌,确保集群间通信的安全。同时,它还提供了安全的密钥管理机制,如 Secrets,用于存储敏感信息如密码和密钥。

  • 网络:Swarm 内置对 Docker 网络插件的支持,使得跨节点的容器通信变得简单,可以方便地创建覆盖网络(Overlay Networks)实现容器间的隔离和通信。

  • 滚动更新与回滚:Swarm 支持服务的滚动更新,可以在不影响服务可用性的前提下,逐步更新服务的容器到新版本。同时,如果更新过程中出现问题,还可以轻松回滚到之前的版本。

  • 声明式配置:通过 Docker Compose YAML 文件格式定义服务,使用 docker stack deploy 命令部署整个服务栈,实现服务的声明式管理。

示例:部署服务到 Docker Swarm

假设你已经有了一个 Swarm 集群,下面是如何使用 Docker Compose YAML 文件部署一个简单的 Web 服务栈的步骤:

  1. 创建 Docker Compose 文件(例如 my-webapp.yml):
yaml
version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    networks:
      - webnet
networks:
  webnet:
  1. 初始化 Swarm 或连接到现有的 Swarm(如果尚未进行):
bash
docker swarm init
docker swarm join --token SWMTKN... <manager-ip>:<manager-port>
  1. 部署服务栈
bash
docker stack deploy -c my-webapp.yml myweb

以上命令会基于 my-webapp.yml 文件中的定义,在 Swarm 集群上部署名为 myweb 的服务栈,包含一个使用 Nginx 镜像的 Web 服务,并通过内置的网络和负载均衡功能使其可访问。

常用命令

  1. 初始化 Swarm 集群

    • docker swarm init [--advertise-addr IP:PORT]:初始化一个新的 Swarm 集群,并将当前节点设置为第一个管理节点。
  2. 加入 Swarm 集群

    • docker swarm join --token <TOKEN> <MANAGER-IP>:<PORT>:使用从管理节点获得的加入令牌将节点加入到 Swarm 集群中。
  3. 离开 Swarm 集群

    • docker swarm leave [--force]:使当前节点离开 Swarm 集群。
  4. 查看加入令牌

    • docker swarm join-token [role]:显示用于加入集群的令牌,role 可以是 workermanager
  5. 管理节点

    • docker node ls:列出 Swarm 集群中的所有节点。
    • docker node rm <NODE-ID>:从集群中移除一个节点。
    • docker node promote <NODE-ID>:将工作节点提升为管理节点。
    • docker node demote <NODE-ID>:将管理节点降级为工作节点。
  6. 服务管理

    • docker service create:创建一个新的服务。
    • docker service ls:列出所有服务。
    • docker service inspect <SERVICE-ID>:查看服务的详细信息。
    • docker service scale <SERVICE-ID>=<REPLICAS>:设置服务的副本数量。
    • docker service update <SERVICE-ID>:更新服务的配置。
  7. 栈(Stacks)管理

    • docker stack deploy -c <COMPOSE-FILE> <STACK-NAME>:使用 Docker Compose 文件部署一个栈。
    • docker stack ls:列出所有栈。
    • docker stack rm <STACK-NAME>:移除一个栈。
  8. 秘密管理

    • docker secret ls:列出所有的秘密。
    • docker secret create <SECRET-NAME> <FILE>:创建一个新的秘密。
    • docker secret inspect <SECRET-NAME>:查看秘密的详细信息。
    • docker secret rm <SECRET-NAME>:移除一个秘密。

Docker Swarm 提供了一种相对轻量级且易于使用的容器编排解决方案,特别适合那些寻求快速部署和管理微服务架构的团队。然而,对于需要更高级特性和扩展性的场景,可能需要考虑如 Kubernetes 这类更为强大的编排平台。