docker-swarm环境搭建

防火墙

需要开放三个端口:

  1. 2377 集群管理端口
  2. 7946 TCP与UDP通信端口
  3. 4789 overlay网络通讯端口

方法一 、手动搭建docker swarm集群(不推荐了)

至少准备两台装有docker的机器 master worker

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# 开放端口2377

firewall-cmd --zone=public --add-port=2377/tcp --permanent 

firewall-cmd --reload

# 初始化docker swarm

docker swarm init

# 根据得到的加入集群命令
docker swarm join --token SWMTKN-1-3fqfxsrhh7pm47135iche6tqsu6eroxsar7r2tle4b37gs7slo-a0qnk0zkuypbcv6qearzs8ytb 192.168.0.100:2377

# 在master机器上执行命令查看swarm机器
docker node ls

# 查看节点状态
docker node inspect self

创建网络

1
2
3
# 切换到master节点
docker network create --driver overlay docker_dev_network
# 保存返回的token

发布服务

1
docker service create --name=accountservice --replicas=1 --network=docker_dev_network -p=9090:9090 matosiki/accountservice 7b3wft9rux21bhf8wrh99xg6q
1
2
3
4
5
6
7
8
# 查看所有服务
docker service ls

# 删除服务
docker service rm <ID>

# 服务伸缩
docker service scale accountservice=3
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# 使用visualizer docker可视化
docker service create \
  --name=viz \
  --publish=8080:8080/tcp \
  --constraint=node.role==manager \
  --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
  dockersamples/visualizer
  
# 依赖可视化
docker service create \
   --constraint node.role==manager \
   --replicas 1 --name dvizz -p 6969:6969 \
   --mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock \
   --network docker_dev_network \
   eriklupander/dvizz

# 启动quotes
docker service create --name=quotes-service --replicas=1 --network=docker_dev_network eriklupander/quotes-service
1
2
3
# 查看内存使用情况

docker stats $(docker ps | awk '{if(NR>1) print $NF}')

方法儿、使用ansible运营自动化工具搭建(推荐)

192.168.1.100 master 192.168.1.101 salve1 192.168.1.102 salve2

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 在自己的主机上(不在这三台机器中)
# 生成rsa用于免登陆
ssh-keygen -t rsa

# 将密钥复制到对应的服务器
ssh-copy-id -i .ssh/id_rsa.pub root@master
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.1.101
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.1.102

# 安装docker(省略)

安装配置ansible

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# 安装配置ansible
yum -y install ansible

vi /etc/ansible/hosts 
# 添加
[node]
192.168.1.100
192.168.1.101
192.168.1.102

#禁用selinux
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/sysconfig/selinux

#将配置复制到所有节点中
ansible node -m copy -a 'src=/etc/selinux/config dest=/etc/selinux/'

# 停止防火墙 (可以不用)
ansible node -a 'systemctl stop firewalld'
ansible node -a 'systemctl disable firewalld'

# 配置docker仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

ansible node -m copy -a 'src=/etc/yum.repos.d/docker-ce.repo dest=/etc/yum.repos.d/'

# 远程安装
ansible node -m yum -a "state=present name=docker-ce"

# 查看所有节点docker安装版本
ansible node -a 'docker --version'

# 开启节点防火墙
ansible node -a 'systemctl start docker'
ansible node -a 'systemctl status docker'
ansible node -a 'systemctl enable docker'

# 进入master
## 1.初始化集群
docker swarm init --listen-addr 0.0.0.0
## 2.查看节点
docker node ls
## 3.查看加入manager集群命令
docker swarm join-token manager
## 4.查看加入worker集群命令
docker swarm join-token worker
## 5.在salve1和salve2中输入查看加入woker集群命令的结果(该命令需要被替换)
docker swarm join --token SWMTKN-1-*************************
## 6.查看加入后的集群
docker node ls
## 7.查看docker swarm 网络
docker network ls

## 删除Down状态节点
docker node rm $(docker node ls | awk '/Down/ {print $1}')

安装Portainer

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
docker service create \
--name portainer \
--publish 9000:9000 \
--constraint 'node.role == manager' \
--mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock \
portainer/portainer \
-H unix:///var/run/docker.sock

# 查看portainer镜像
docker images |grep portainer

# 查看集群服务
docker service ls

# 输入初始用户名密码 admin matosiki
curl http://localhost:9000 

docker swarm 管理图 image

node 三个状态 Active:集群中该Node可以被指派Task Pause:集群中该Node不可以被指派新的Task,但是其他已经存在的Task保持运行 Drain:集群中该Node不可以被指派新的Task,Swarm Scheduler停掉已经存在的Task,并将它们调度到可用的Node上

服务管理

实现部署运行服务、服务扩容缩容、删除服务、滚动升级

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 查看服务
docker service ls

# 创建服务
docker service create --replicas 1 --name myapp alpine ping 118.31.60.235 service create --replicas 2 --name myredis redis

# 查看服务详情
docker service ps myredis


# 启动服务配置
docker service create --name helloworld \ --env MYVAR=myvalue \ --workdir /tmp \ --user my_user \ alpine ping docker.com

# 扩展副本
docker service scale myredis=3

# 删除服务
docker service rm 服务ID

# 滚动更新

docker service create \ --replicas 3 \ --name redis \ --update-delay 10s \ redis:3.0.6

# 添加Overlay网络
docker network create --driver overlay my-network


# 通过网络连接两个服务
docker service create  \ 
            --replicas 3 \ 
            --network my-network \
            --name myweb \ 
            nginx

image