一、Swarm 关键概念

1、Swarm

集群的管理和编排是使用嵌入到 docker 引擎的 SwarmKit,可以在 docker 初始化时启动 swarm 模式或者加入已存在的 swarm

2、Node

一个节点(node)是已加入到 swarm 的 Docker 引擎的实例 当部署应用到集群,你将会提交服务定义到管理节点,接着 Manager管理节点调度任务到 worker 节点,manager 节点还执行维护集群的状态的编排和群集管理功能,worker 节点接收并执行来自

manager 节点的任务。通常,manager 节点也可以是 worker 节点,worker 节点会报告当前状态给 manager 节点

3、服务(Service)

服务是要在 worker 节点上要执行任务的定义,它在工作者节点上执行,当你创建服务的时,你需要指定容器镜像

4、任务(Task)

任务是在 docekr 容器中执行的命令,Manager 节点根据指定数量的任务副本分配任务给 worker 节点

docker swarm 子节点服务器 down docker swarm 指定节点运行_docker

二、环境准备
3台虚拟机:
系统:Linux Center OS 7
Docker版本: 19.03.1
虚拟机1:192.168.226.145(swarm01)
虚拟机2:192.168.226.146(swarm02)
虚拟机3:192.168.226.147(swarm03)

1、修改主机名
修改主机名

hostnamectl set-hostname swarm01

查看主机名

hostname

2、swarm安装

docker pull swarm

3、建立集群
swarm01为leader,swarm02、swarm03为节点
3.1 master机器上swarm初始化

docker swarm init

命令执行后,该机器自动加入到swarm集群。这个会创建一个集群token,获取全球唯一的 token,作为集群唯一标识。后续将其他节点加入集群都会用到这个token值

docker swarm 子节点服务器 down docker swarm 指定节点运行_主机名_02


3.2查看该集群相关信息

docker node ls

docker swarm 子节点服务器 down docker swarm 指定节点运行_主机名_03


3.3.节点执行初始化集群时提供的命令

docker swarm 子节点服务器 down docker swarm 指定节点运行_主机名_04


3.4再次查看集群

docker node ls

docker swarm 子节点服务器 down docker swarm 指定节点运行_docker_05


3.5 节点离开集群

docker swarm leave  --froce

3.6 leader删除节点

docker node rm

3.7 再次获取leader上的token信息

docker swarm join-token manager

docker swarm 子节点服务器 down docker swarm 指定节点运行_主机名_06


3.8 查看集群网络

docker network ls

docker swarm 子节点服务器 down docker swarm 指定节点运行_主机名_07

3.9 创建集群网络(用于内部通信)

docker network create -d  overlay --attachable 网络名称

再次查看

docker network ls

docker swarm 子节点服务器 down docker swarm 指定节点运行_主机名_08


4、创建服务

4.1创建服务

docker service create 服务名

docker service rm 服务名

参数
–name 服务名
–network 集群网络名称
–mount 数据挂载
–constraint node.hostname==主机名
–env 环境

示例:

docker service rm test-service
docker service create \
--name test-service \
--network test-net\
--mount type=bind,source="$(pwd)"/app.tgz,target=/server/data/app.tgz \
--constraint node.hostname==master \
--replicas 1 -p 9055:9055 \
--log-opt "tag=citydew-admin" \
--env "downloadURL=file:///server/data/app.tgz"  \
--env "redis_ip=ip" \
--env "postgresql_ip=ip" \
--env "postgresql_user=用户" \
--env "postgresql_pwd=密码" \
--env "database_name=库名" \
11.23.254.120:5000/public/openjdk:1.0.0