docker-swarm
初始化集群
docker swarm init
创建自定义 Overlay 网络
docker network create \
--driver overlay \
--subnet 10.0.0.0/24 \
--opt encrypted \
--attachable \
default-network
加入集群
# 显示manager节点的TOKEN
docker swarm join-token manager
# 加入manager节点到集群
docker swarm join --token <token> ip:2377
# 显示worker节点的TOKEN
docker swarm join-token worker
# 加入worker节点到集群
docker swarm join --token <token> ip:2377
Docker Swarm
提供Docker容器集群服务,是Docker官方对容器云生态进行支持的核心方案
Swarm是使用SwarmKit构建的Docker引擎内置(原生)的集群管理和编排工具
使用Swarm集群之前需要了解以下几个概念
节点
- 节点 - 分为管理(manager)节点和工作(worker)节点
- 管理节点用于Swarm集群的管理,docker swarm命令基本只能在管理节点执行
- 节点退出集群命令docker swarm leave可以在工作节点执行
- 集群可以有多个管理节点,但只有一个管理节点可以成为leader,leader通过raft协议实现
任务
- 任务(Task)是Swarm中的最小的调度单位,目前来说就是一个单一的容器
服务
- 服务(Services)是指一组任务的集合,服务定义了任务的属性。服务有两种模式
- replicated services按照一定规则在各个工作节点上运行指定个数的任务
- global services每个工作节点上运行一个任务
- 两种模式通过docker service create --mode参数指定
创建Swarm集群
创建3个或者更多docker容器
进入管理节点容器,输入docker swarm init --advertise-addr 192.168.10.11
初始化一个swarm集群
进入另外两个容器,分别输入docker swarm join --token your_token 192.168.10.11:2377
加入管理节点
相关命令
# 查看节点
docker node ls
# 在manager主机中创建3个nginx副本的集群
docker service create --replicas 3 -p 80:80 --name nginx nginx:1.13.7-alpine
# 查看服务
docker service ls
# 查看某个服务的详情
docker service ps nginx
# 查看某个服务的日志
docker service logs nginx
# 服务伸缩
docker service scale nginx=5
# 删除服务
docker service rm nginx
compose文件部署服务
以wordpress为例
# 部署wordpress
docker stack deploy -c docker-compose.yml wordpress
# 查看服务
docker stack ls
# 移除服务
docker stack down
docker-compose.yml如下
version: "1.0.0"
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: