docker-swarm环境搭建
防火墙
需要开放三个端口:
- 2377 集群管理端口
- 7946 TCP与UDP通信端口
- 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 管理图

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
|
