Docker Swarm 是 Docker 官方提供的容器编排工具,它可以让我们轻松管理多个 Docker 容器,实现高可用、负载均衡、自动扩缩容等功能。本文将介绍 Docker Swarm 的基本概念和使用方法,并提供实践指南,帮助读者快速上手。
Docker Swarm 概念
Docker Swarm 由一组 Docker 主机组成,其中一个主机为 Swarm Manager,其他主机为 Swarm Node。Swarm Manager 负责管理整个 Swarm 集群,包括容器部署、服务发现、负载均衡等。Swarm Node 则负责运行容器,接受 Swarm Manager 的指令。
Docker Swarm 中的基本概念如下:
Service(服务):定义了一个可扩展的应用程序,由多个容器组成。Swarm Manager 会根据 Service 的定义,在 Swarm Node 上启动容器,并进行负载均衡。
Task(任务):Service 中每个容器的运行实例称为 Task。Swarm Manager 会根据 Service 的定义,决定在哪些 Swarm Node 上启动 Task,并监控 Task 的健康状态。
Node(节点):Swarm 集群中的 Docker 主机称为 Node。Node 可以是 Swarm Manager 或 Swarm Node。
Overlay Network(覆盖网络):Swarm 集群内的容器需要进行通信,Overlay Network 提供了跨主机的虚拟网络环境,容器可以通过 Overlay Network 进行通信。
Docker Swarm 使用
准备工作
在使用 Docker Swarm 之前,需要准备一组 Docker 主机。这些主机可以是物理机、虚拟机或云主机,需要安装 Docker,并在同一网络环境下。
其中一个主机将作为 Swarm Manager,其他主机将作为 Swarm Node。在 Swarm Manager 上执行以下命令,初始化 Swarm 集群:
$ docker swarm init --advertise-addr <MANAGER-IP>
执行成功后,会输出一个加入 Swarm 集群的命令,例如:
Swarm initialized: current node (m8hj6c4m4z1j4yf7x9p9fejx7) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-2i3yj4t5w6f7g8h9i0j1k2l3m4n5o6p7q8r9s0t1u2v3w4x5y6z-1234567890abcdef 192.168.0.1:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
将输出的命令复制到其他主机上执行,即可将其加入到 Swarm 集群中。
创建 Service
在 Swarm Manager 上执行以下命令,创建一个 Service:
$ docker service create --name web --replicas 3 -p 80:80 nginx
该命令创建了一个名为 web 的 Service,该 Service 包含 3 个 Task,每个 Task 运行一个 nginx 容器。-p 80:80 参数指定了容器端口和主机端口的映射关系。
执行以下命令,查看 Service 运行情况:
$ docker service ls ID NAME MODE REPLICAS IMAGE s2s1s2s2s2s2s web replicated 3/3 nginx:latest
执行以下命令,查看 Task 运行情况:
$ docker service ps web ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR 8nw7n0g6p3bl web.1 nginx:latest node-1 Running Running 5 minutes ago 5n7n1h5g2p2b web.2 nginx:latest node-2 Running Running 5 minutes ago 4m6n4h6g1p7c web.3 nginx:latest node-3 Running Running 5 minutes ago
扩缩容 Service
在 Swarm Manager 上执行以下命令,将 Service 的 Task 数量扩展到 5:
$ docker service scale web=5
执行以下命令,查看 Task 运行情况:
$ docker service ps web ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR 8nw7n0g6p3bl web.1 nginx:latest node-1 Running Running 5 minutes ago 5n7n1h5g2p2b web.2 nginx:latest node-2 Running Running 5 minutes ago 4m6n4h6g1p7c web.3 nginx:latest node-3 Running Running 5 minutes ago 7h5n2g2p0b5d web.4 nginx:latest node-2 Running Running 1 minute ago 6j4n4g4p6c8f web.5 nginx:latest node-1 Running Running 1 minute ago
在 Swarm Manager 上执行以下命令,将 Service 的 Task 数量缩减到 2:
$ docker service scale web=2
执行以下命令,查看 Task 运行情况:
$ docker service ps web ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR 8nw7n0g6p3bl web.1 nginx:latest node-1 Running Running 8 minutes ago 5n7n1h5g2p2b web.2 nginx:latest node-2 Running Running 8 minutes ago
更新 Service
在 Swarm Manager 上执行以下命令,修改 Service 的镜像为 nginx:alpine:
$ docker service update --image nginx:alpine web
该命令会更新 Service 的镜像,并重启所有 Task。执行以下命令,查看更新后的镜像:
$ docker service ps web ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR 8nw7n0g6p3bl web.1 nginx:alpine node-1 Running Running 10 minutes ago 5n7n1h5g2p2b web.2 nginx:alpine node-2 Running Running 10 minutes ago
删除 Service
在 Swarm Manager 上执行以下命令,删除 Service:
$ docker service rm web
该命令会删除 Service,并停止所有 Task。
实践指南
使用 Docker Compose 部署服务
Docker Compose 是 Docker 官方提供的工具,可以通过编写 YAML 文件,定义多个容器的部署方式。在 Swarm 集群中,可以通过 Docker Compose 部署 Service,简化部署流程。
例如,以下是一个部署 WordPress 应用程序的 Docker Compose 文件:
// javascriptcn.com 代码示例 version: '3' services: db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: example wordpress: depends_on: - db image: wordpress:latest ports: - "80:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_PASSWORD: example volumes: db_data:
该文件定义了两个 Service:db 和 wordpress。db Service 运行一个 MySQL 容器,wordpress Service 运行一个 WordPress 容器。两个 Service 通过 Overlay Network 进行通信。
在 Swarm Manager 上执行以下命令,部署该应用程序:
$ docker stack deploy -c docker-compose.yml wordpress
该命令会创建一个名为 wordpress 的 Stack,包含两个 Service:db 和 wordpress。执行以下命令,查看 Stack 运行情况:
$ docker stack ls NAME SERVICES wordpress 2
执行以下命令,查看 Service 运行情况:
$ docker service ls ID NAME MODE REPLICAS IMAGE s2s1s2s2s2s2s wordpress_db replicated 1/1 mysql:5.7 s2s1s2s2s2s2s wordpress_wordpress replicated 1/1 wordpress:latest
使用 Swarm Visualizer 监控集群状态
Swarm Visualizer 是一个开源的 Docker 容器,可以可视化显示 Swarm 集群的状态。使用 Swarm Visualizer 可以方便地监控集群状态和容器运行情况。
在 Swarm Manager 上执行以下命令,启动 Swarm Visualizer 容器:
$ docker run -it -d -p 8080:8080 -v /var/run/docker.sock:/var/run/docker.sock manomarks/visualizer
该命令会启动 Swarm Visualizer 容器,并将容器端口 8080 映射到主机端口 8080。执行以下命令,访问 Swarm Visualizer:
http://<MANAGER-IP>:8080
在 Swarm Visualizer 中,可以查看 Swarm 集群的状态和容器运行情况。
总结
Docker Swarm 是一个强大的容器编排工具,可以方便地管理多个 Docker 容器,实现高可用、负载均衡、自动扩缩容等功能。本文介绍了 Docker Swarm 的基本概念和使用方法,并提供了实践指南,帮助读者快速上手。使用 Docker Swarm 可以大大简化容器部署和管理的工作,提高工作效率。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65871254d2f5e1655d153f06