Docker Swarm
和Docker Compose
一样,都是Docker
官方容器编排项目,但不同的是,Docker Compose
是一个在单个服务器或主机上创建多个容器的工具,而Docker Swarm
则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然Docker Swarm
会更加适合。
运行 Docker
的主机可以主动初始化一个 Swarm
集群或者加入一个已存在的 Swarm
集群,这样这个运行 Docker
的主机就成为一个 Swarm
集群的节点 (node)
。
- 管理节点(manager node):管理节点用于 Swarm 集群的管理,
docker swarm
命令基本只能在管理节点执行(节点退出集群命令docker swarm leave
可以在工作节点执行)。一个 Swarm 集群可以有多个管理节点,但只有一个管理节点可以成为 leader,leader 通过 raft 协议实现。 - 工作节点(work node):管理节点将服务 (service) 下发至工作节点执行。管理节点默认也作为工作节点。你也可以通过配置让服务只运行在管理节点
-
任务 (Task)是 Swarm 中的最小的调度单位,目前来说就是一个单一的容器。
-
服务 (Services) 是指一组任务的集合,服务定义了任务的属性。服务有两种模式:
replicated services
按照一定规则在各个工作节点上运行指定个数的任务
global services
每个工作节点上运行一个任务.
两种模式通过 docker service create
的 --mode
参数指定。
# 创建节点
docker-machine create -d virtualbox manager
# 登录
docker-machine ssh manager
# 初始化swarm集群
docker swarm init --advertise-addr 192.168.99.100
# 查看集群
docker-machine ls
在创建的 Swarm 集群中运行一个名为 nginx 服务。
docker service create --replicas 3 -p 80:80 --name nginx nginx:1.13.7-alpine
查看当前 Swarm 集群运行的服务。
docker service ls
查看服务详情
docker service ps
查看某个服务的日志。
docker service nginx logs
当业务处于高峰期时,我们需要扩展服务运行的容器数量。
docker service scale nginx=5
当业务平稳时,我们需要减少服务运行的容器数量。
docker service scale nginx=2
docker service rm nginx
docker-compose.yml
一次启动多个服务,以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:
部署服务使用docker stack deploy
,其中-c
参数指定 compose 文件名。
docker stack deploy -c docker-compose.yml wordpress
查看服务
docker stack ls
output
NAME SERVICES ORCHESTRATOR
demo1 3 Swarm
demo2 2 Swarm
demo3 3 Swarm
查看某服务内容器
docker stack services demo1
output
ID NAME MODE REPLICAS IMAGE PORTS
j4bahl0l9znc demo1_redis replicated 1/1 redis:4
jtseig9ivpom demo1_html replicated 1/1 dockerhub.datagrand.com/yskg/kg_sim_outlier:0.6 *:30000->30000/tcp
ruaofu55pz0s demo1_api replicated 1/1 dockerhub.datagrand.com/yskg/kg_fusion_716:0.3 *:5510->5500/tcp
移出服务
docker stack down wordpress