在 Swarm 集群中使用 compose 文件
正如之前使用 docker-compose.yml 来一次配置、启动多个容器,在 Swarm 集群中也可以使用 compose 文件 (docker-compose.yml) 来配置、启动多个服务。
上一节中,我们使用 docker service create 一次只能部署一个服务,使用 docker-compose.yml 我们可以一次启动多个关联的服务。
我们以在 Swarm 集群中部署 WordPress 为例进行说明。
version: "3"
services:
wordpress:
image: wordpress
ports:
- 80:80
networks:
- overlay
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
deploy:
mode: replicated
replicas: 3
db:
image: mysql
networks:
- overlay
volumes:
- db-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
deploy:
placement:
constraints: [node.role == manager]
visualizer:
image: dockersamples/visualizer:stable
ports:
- "8080:8080"
stop_grace_period: 1m30s
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints: [node.role == manager]
volumes:
db-data:
networks:
overlay:
在 Swarm 集群管理节点新建该文件,其中的 visualizer 服务提供一个可视化页面,我们可以从浏览器中很直观的查看集群中各个服务的运行节点。
在 Swarm 集群中使用 docker-compose.yml 我们用 docker stack 命令,下面我们对该命令进行详细讲解。
部署服务
部署服务使用 docker stack deploy,其中 -c 参数指定 compose 文件名。
docker stack deploy -c docker-compose.yml wordpress
现在我们打开浏览器输入 任一节点IP:8080 即可看到各节点运行状态。如下图所示:
在浏览器新的标签页输入 任一节点IP 即可看到 WordPress 安装界面,安装完成之后,输入 任一节点IP 即可看到 WordPress 页面。
查看服务
[root@localhost compose]# docker stack ls
NAME SERVICES
wordpress 3
使用 docker service ls 来查看当前 Swarm 集群运行的服务。
[root@localhost compose]# docker service ls
ID NAME MODE REPLICAS IMAGE
ldxsxk6tpw54 wordpress_wordpress replicated 2/2 wordpress:latest
pctcposa5rik wordpress_db replicated 1/1 mysql:5.7
ri2aue23t1mj wordpress_visualizer replicated 1/1 dockersamples/visualizer:stable
使用 docker service ps 来查看某个服务的详情。
[root@localhost compose]# docker service ps wordpress_wordpress
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
90gxpq73z6x5 wordpress_wordpress.3 wordpress:latest localhost.localdomain Running Running 2 hours ago
itq9ql1iqakd wordpress_wordpress.4 wordpress:latest localhost.localdomain Running Running 2 hours ago
[root@localhost compose]# docker service ps wordpress_db
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
x3685shewj76 wordpress_db.1 mysql:5.7 localhost.localdomain Running Running 2 hours ago
[root@localhost compose]# docker service ps wordpress_visualizer
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
sitpybdh59hv wordpress_visualizer.1 dockersamples/visualizer:stable localhost.localdomain Running Running 2 hours ago
服务伸缩
我们可以使用 docker service scale 对一个服务运行的容器数量进行伸缩。
当业务处于高峰期时,我们需要扩展服务运行的容器数量。
[root@localhost compose]# docker service scale wordpress_wordpress=5
wordpress_wordpress scaled to 5
[root@localhost compose]# docker service ls
ID NAME MODE REPLICAS IMAGE
ldxsxk6tpw54 wordpress_wordpress replicated 4/5 wordpress:latest
pctcposa5rik wordpress_db replicated 1/1 mysql:5.7
ri2aue23t1mj wordpress_visualizer replicated 1/1 dockersamples/visualizer:stable
当业务平稳时,我们需要减少服务运行的容器数量。
[root@localhost compose]# docker service scale wordpress_wordpress=2
wordpress_wordpress scaled to 2
[root@localhost compose]# docker service ls
ID NAME MODE REPLICAS IMAGE
ldxsxk6tpw54 wordpress_wordpress replicated 2/2 wordpress:latest
pctcposa5rik wordpress_db replicated 1/1 mysql:5.7
ri2aue23t1mj wordpress_visualizer replicated 1/1 dockersamples/visualizer:stable
移除服务
使用命令 docker stack down 移除服务
[root@localhost compose]# docker stack down wordpress
Removing service wordpress_db
Removing service wordpress_visualizer
Removing service wordpress_wordpress
Removing network wordpress_overlay
Removing network wordpress_default
该命令不会移除服务所使用的 数据卷,如果你想移除数据卷请使用 docker volume rm
首先查看所有的volume,然后找到需要删除的即可
[root@localhost compose]# docker volume ls
DRIVER VOLUME NAME
local d259d2576970ec05faa9717622848336cdfac651de40853ccad5ddda233bcd0f
local portainer_data
local wordpress_db-data
[root@localhost compose]# docker volume rm wordpress_db-data