使用 Docker Machine 构建 Swarm 集群

节点, 服务, 任务

节点就是一个部署了 Docker 的主机(分为 Manager 和 Worker).

任务就是一个容器功能, 服务就是多个任务功能(容器)组合起来可以对外提供工作的整体. nginx(任务) + php(任务) + mysql(任务) ==> 服务

创建 Machine 机器

1
2
3
4
5
6
7
8
9
10
11
12
NAME=$1

if [ "$NAME" == "" ]; then
NAME=dev
fi

docker-machine create -d hyperv \
--engine-opt dns=114.114.114.114 \
--engine-registry-mirror https://registry.docker-cn.com \
--hyperv-memory "1024" \
--hyperv-cpu-count "1" \
$NAME

根据脚本, 创建 manager, worker1, worker2, worker3 4台机器

查看机器状态 docker-machine ls

登录 master 机器 docker-machine ssh master

登录 worker 机器 docker-machine ssh workerX

创建 Swarm 集群

Manager

在 manager 机器上初始化 swarm manager

1
2
3
docker swarm init --help

docker swarm init

执行结束后, 会输出加入当前 swarm 集群的方式: docker swarm join --token SWMTKN-1-1n1lffbs5h094l6rtzosb7xoecpx998e4udfb0kr5tprxqvyhj-4rjc2wkg7h2ndlu8l0gj25q5m 10.0.201.70:2377

Worker

在 worker 机器上初始化 swarm worker

1
2
3
docker swarm join --help

docker swarm join --token SWMTKN-xxx host:port

集群查看管理

通过 docker machine 管理主机

1
2
# 主机列表
docker-machine ls

通过 swarm manager 管理集群

1
2
3
4
# 节点列表
docker node ls
# 服务列表
docker service ls

服务管理

部署服务

1
2
3
4
5
docker service create \
--replicas 3 \
-p xx:xx \
--name SERVICENAME \
IMAGENAME

查看服务日志 docker service logs SERVICENAME

查看服务列表 docker service ps SERVICENAME

删除服务 docker service rm SERVICENAME

使用 docker-compose.yml 管理服务

1
2
3
4
5
6
7
deploy:
mode: replicated
replicas: 3

deploy:
placement:
constraints: [node.role == manager]

以上调度策略, 控制哪些服务是部署在 manager 节点的, 哪些是可扩展部署.

参考文档: https://docs.docker.com/swarm/scheduler/filter/

部署服务

1
2
3
docker stack deploy \
-c docker-compose.yml \
STACKNAME

查看服务 docker stack ls

删除服务 docker stack down STACKNAME

Donate - Support to make this site better.
捐助 - 支持我让我做得更好.