跳至主要內容

Docker 进阶 - Docker Swarm (官方容器编排)

bsfc.tech大约 4 分钟DockerDocker Swarm

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

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):

    version: '3'
    services:
      web:
        image: nginx:latest
        ports:
          - "80:80"
        networks:
          - webnet
    networks:
      webnet:
    
  2. 初始化 Swarm 或连接到现有的 Swarm(如果尚未进行):

    # 初始化 Swarm(在管理节点上执行)
    docker swarm init
    
    # 如果要加入现有的 Swarm,使用提供的 join-token 和 manager/worker 地址
    docker swarm join --token SWMTKN... <manager-ip>:<manager-port>
    
  3. 部署服务栈

    docker stack deploy -c my-webapp.yml myweb
    

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

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

一些常用的 Docker Swarm 相关命令及其简要说明:

  1. 初始化 Swarm 集群

    • docker swarm init [--advertise-addr IP:PORT] 初始化一个新的 Swarm 集群,并将当前节点设置为第一个管理节点。--advertise-addr 参数用于指定其他节点连接到此管理节点的地址和端口。
  2. 加入 Swarm 集群

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

    • docker swarm leave [--force] 使当前节点离开 Swarm 集群。如果当前节点是管理节点,使用 --force 强制离开,这会导致集群失去一个管理节点。
  4. 查看加入令牌

    • docker swarm join-token [role] 显示用于加入集群的令牌,role 可以是 workermanager
  5. 更新 Swarm 集群配置

    • docker swarm update 更新 Swarm 集群的配置,例如更改副本数量或更新策略。
  6. 管理节点

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

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

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

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

这些命令提供了管理和操作 Swarm 集群的基础功能。在实际操作中,你可能需要结合具体的参数和选项来满足特定的需求。


以上是本篇文章的全部内容,如对你有帮助帮忙点赞 + 转发 + 收藏。