• 一、Docker Swarm简介
  • 1.简介
  • 2.Docker Swarm 优点
  • 3.docker swarm 相关概念
  • 二、Docker Swarm实践
  • 需提前安装好
  • 1.创建Swarm集群
  • 初始化集群:docker swarm init
  • 根据提示在其他docker节点上执行命令:(其他节点必须先安装好docker服务并启动)
  • 查看集群
  • 2.保证docker服务正常运行
  • 3.分发证书
  • 三、docker stack部署
  • 1.解析和默认拉取仓库(配置harbor仓库)
  • server1配置成haobor网络仓库
  • 导入镜像
  • 2.创建集群服务:
  • 3.实现负载均衡
  • 4.弹性伸缩
  • 4.1滚动更新
  • 命令方式,需提前创建好集群和部署好监控
  • 4.2下载镜像
  • 5.创建集群,并监控
  • 6.浏览器查看监控
  • 7.更新
  • 8.回滚
  • 四、Portainer可视化
  • 1.下载图形服务,导入到harbor仓库
  • 新建项目,导入镜像
  • 2.启动图形
  • 启动成功
  • 浏览器查看


一、Docker Swarm简介

1.简介

  • Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令。
  • Swarm 是 Docker 社区提供的唯一一个原生支持 Docker 集群管理的工具。
  • Swarm可以把多个 Docker 主机组成的系统转换为单一的虚拟 Docker 主机,使得容器可以组成跨主机的子网网络。
  • Docker Swarm 是一个为 IT 运维团队提供集群和调度能力的编排工具。

2.Docker Swarm 优点

任何规模都有高性能表现
灵活的容器调度
服务的持续可用性
和 Docker API 及整合支持的兼容性
Docker Swarm 为 Docker 化应用的核心功能(诸如多主机网络和存储卷管理)提供原生支持。

3.docker swarm 相关概念

  • 节点分为管理 (manager) 节点和工作 (worker) 节点
    任务 (Task)是 Swarm 中的最小的调度单位,目前来说就是一个单一的容器。
  • 服务 (Services) 是指一组任务的集合,服务定义了任务的属性。
  • docker 多模块项目 docker swarm 多个master_json


二、Docker Swarm实践

需提前安装好

主机

ip

服务

权限

server1

172.25.15.1

haobor、docker

网络仓库

server2

172.25.15.2

docker

管理端

server3

172.25.15.3

docker

客户端

server4

172.25.15.4

docker

客户端

1.创建Swarm集群

初始化集群:docker swarm init

[root@server2 ~]# docker swarm init	#初始化集群
Swarm initialized: current node (g8o5171683sfwozlf93c0ks2e) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-4b7mohh0nx2k0nvqxsqanywz9iqkinajv8hsyh0e84brodg92r-5k4jq4ezk2ffchj913i5lta1r 172.25.15.2:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

[root@server2 ~]#

docker 多模块项目 docker swarm 多个master_docker-swarm_02

根据提示在其他docker节点上执行命令:(其他节点必须先安装好docker服务并启动)

## server3
[root@server3 ~]# docker swarm join --token SWMTKN-1-4b7mohh0nx2k0nvqxsqanywz9iqkinajv8hsyh0e84brodg92r-5k4jq4ezk2ffchj913i5lta1r 172.25.15.2:2377	#加入集群
This node joined a swarm as a worker.
## server4 
[root@server4 ~]# docker swarm join --token SWMTKN-1-4b7mohh0nx2k0nvqxsqanywz9iqkinajv8hsyh0e84brodg92r-5k4jq4ezk2ffchj913i5lta1r 172.25.15.2:2377	#加入集群
This node joined a swarm as a worker.

docker 多模块项目 docker swarm 多个master_json_03


docker 多模块项目 docker swarm 多个master_docker 多模块项目_04

查看集群

[root@server2 ~]# docker node ls

docker 多模块项目 docker swarm 多个master_json_05


docker 多模块项目 docker swarm 多个master_docker_06

2.保证docker服务正常运行

[root@server1 ~]# cd /etc/sysctl.d
[root@server1 sysctl.d]# ls
99-sysctl.conf  docker.conf
[root@server1 sysctl.d]# vim docker.conf 
[root@server1 sysctl.d]# cat docker.conf 
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
[root@server1 sysctl.d]# scp docker.conf server3:/etc/sysctl.d/
docker.conf                                    100%   79   112.7KB/s   00:00    
[root@server1 sysctl.d]# scp docker.conf server4:/etc/sysctl.d/
docker.conf                                    100%   79   112.3KB/s   00:00    
[root@server1 sysctl.d]#

docker 多模块项目 docker swarm 多个master_Docker_07

3.分发证书

### server2、3、4都要有证书
[root@server1 ~]# cd /etc/docker/
[root@server1 docker]# ls
certs.d  daemon.json  key.json
[root@server1 docker]# scp -r certs.d server2:/etc/docker/
ca.crt                                         100% 2106     3.8MB/s   00:00    
[root@server1 docker]# scp -r certs.d server3:/etc/docker/
ca.crt                                         100% 2106     1.2MB/s   00:00    
[root@server1 docker]# scp -r certs.d server4:/etc/docker/
ca.crt                                         100% 2106     2.1MB/s   00:00    
[root@server1 docker]#

docker 多模块项目 docker swarm 多个master_docker_08

三、docker stack部署

1.解析和默认拉取仓库(配置harbor仓库)

### server 2、3、4都要有
[root@server1 ~]# cd /etc/docker/
[root@server1 docker]# vim daemon.json 
[root@server1 docker]# vim daemon.json 
[root@server1 docker]# cat daemon.json 
{
"registry-mirrors" : ["https://reg.westos.org"]		#配置默认仓库为re.westos.org
}
[root@server1 docker]# scp daemon.json server2:/etc/docker/
daemon.json                                    100%   52    81.2KB/s   00:00    
[root@server1 docker]# scp daemon.json server3:/etc/docker/
daemon.json                                    100%   52    57.5KB/s   00:00    
[root@server1 docker]# scp daemon.json server4:/etc/docker/
daemon.json                                    100%   52    69.1KB/s   00:00

docker 多模块项目 docker swarm 多个master_json_09


docker 多模块项目 docker swarm 多个master_Docker_10


docker 多模块项目 docker swarm 多个master_docker_11


docker 多模块项目 docker swarm 多个master_docker 多模块项目_12


docker 多模块项目 docker swarm 多个master_docker 多模块项目_13

server1配置成haobor网络仓库

[root@server1 ~]# ls
auth         convoy.tar.gz  harbor                                nginx.tar
busybox.tar  game2048.tar   harbor-offline-installer-v1.10.1.tgz  rhel7.tar
compose      get-docker.sh  lxcfs-2.0.5-3.el7.centos.x86_64.rpm
convoy       haproxy.tar    mario.tar
[root@server1 ~]# cd harbor
[root@server1 harbor]# ls
common     docker-compose.yml     harbor.yml  LICENSE
common.sh  harbor.v1.10.1.tar.gz  install.sh  prepare
[root@server1 harbor]# ./install.sh 	#脚本运行安装haorbor仓库

docker 多模块项目 docker swarm 多个master_Docker_14


docker 多模块项目 docker swarm 多个master_docker-swarm_15


docker 多模块项目 docker swarm 多个master_Docker_16

导入镜像

[root@server1 ~]# lftp 172.25.15.250
lftp 172.25.15.250:~> cd pub/images/
lftp 172.25.15.250:/pub/images> get myapp.tar 	#下载镜像
15931392 bytes transferred                     
lftp 172.25.15.250:/pub/images> exit
[root@server1 ~]# ls
auth         convoy.tar.gz  harbor                                myapp.tar
busybox.tar  game2048.tar   harbor-offline-installer-v1.10.1.tgz  nginx.tar
compose      get-docker.sh  lxcfs-2.0.5-3.el7.centos.x86_64.rpm   rhel7.tar
convoy       haproxy.tar    mario.tar

[root@server1 ~]# docker load -i myapp.tar		#导入镜像
d39d92664027: Loading layer  4.232MB/4.232MB
8460a579ab63: Loading layer  11.61MB/11.61MB
c1dc81a64903: Loading layer  3.584kB/3.584kB
68695a6cfd7d: Loading layer  4.608kB/4.608kB
05a9e65e2d53: Loading layer  16.38kB/16.38kB
a0d2c4392b06: Loading layer   7.68kB/7.68kB
Loaded image: ikubernetes/myapp:v1
Loaded image: ikubernetes/myapp:v2
[root@server1 ~]# docker tag ikubernetes/myapp:v1 reg.westos.org/library/myapp:v1	#修改名称,打标签
[root@server1 ~]# docker tag ikubernetes/myapp:v2 reg.westos.org/library/myapp:v2 	#修改名称,打标签
[root@server1 ~]# docker push reg.westos.org/library/myapp:v1	#传入网络仓库
[root@server1 ~]# docker push reg.westos.org/library/myapp:v2	#传入网络仓库

docker 多模块项目 docker swarm 多个master_docker_17


docker 多模块项目 docker swarm 多个master_docker_18


docker 多模块项目 docker swarm 多个master_json_19


docker 多模块项目 docker swarm 多个master_docker-swarm_20

2.创建集群服务:

命令解释:
docker service create 命令创建一个服务
–name 服务名称命名为 my_cluster
–network 指定服务使用的网
络模型
–replicas 设置启动的示例数为3

[root@server2 ~]# docker service create --name webservice --publish 80:80 --replicas 3 myapp:v1	#创建以myapp:v1为镜像的集群,数量为三
xt6qchju7zs8g1bw6z1i1uh60
overall progress: 3 out of 3 tasks 
1/3: running   
2/3: running   
3/3: running   
verify: Service converged 
[root@server2 ~]# 
[root@server2 ~]# docker service ps webservice 	#查看

docker 多模块项目 docker swarm 多个master_Docker_21

3.实现负载均衡

[root@server2 ~]# curl 172.25.15.2/hostname.html
31aa6f55230f
[root@server2 ~]# curl 172.25.15.2/hostname.html
9d7c1b78c2fd
[root@server2 ~]# curl 172.25.15.2/hostname.html
bb7968ebac81
[root@server2 ~]# curl 172.25.15.2/hostname.html
31aa6f55230f
[root@server2 ~]# curl 172.25.15.2/hostname.html
9d7c1b78c2fd
[root@server2 ~]# curl 172.25.15.2/hostname.html
bb7968ebac81

docker 多模块项目 docker swarm 多个master_docker 多模块项目_22

4.弹性伸缩

4.1滚动更新

命令方式,需提前创建好集群和部署好监控

  • docker service update --image httpd --update-parallelism 2 --update-delay 5s my_cluster
  • –image 指定要更新的镜像
  • –update-parallelism 指定最大同步更新的任务数
  • –update-delay 指定更新间隔

4.2下载镜像

[root@server1 ~]# lftp 172.25.15.250
lftp 172.25.15.250:~> cd pub/images/
lftp 172.25.15.250:/pub/images> get visualizer.tar 	#下载图像监控软件包
167856640 bytes transferred                        
lftp 172.25.15.250:/pub/images> exit
[root@server1 ~]# ls
auth         convoy.tar.gz  harbor                                myapp.tar
busybox.tar  game2048.tar   harbor-offline-installer-v1.10.1.tgz  nginx.tar
compose      get-docker.sh  lxcfs-2.0.5-3.el7.centos.x86_64.rpm   rhel7.tar
convoy       haproxy.tar    mario.tar                             visualizer.tar
[root@server1 ~]# docker load -i visualizer.tar #导入镜像
[root@server1 ~]# docker tag dockersamples/visualizer:latest reg.westos.org/library/visualizer:latest		#打标签,修改名称
[root@server1 ~]# docker push reg.westos.org/library/visualizer:latest		#导入仓库

docker 多模块项目 docker swarm 多个master_Docker_23


docker 多模块项目 docker swarm 多个master_docker-swarm_24

5.创建集群,并监控

[root@server2 ~]# vim docker-compose.yml
[root@server2 ~]# cat docker-compose.yml 
[root@server2 ~]# docker stack deploy -c docker-compose.yml mycluster	#运行脚本创建集群,并添加监控
Creating service mycluster_web
Updating service mycluster_visualizer (id: 840iwj37i2tg5756gxdtx51g0)
[root@server2 ~]# docker stack ps mycluster

docker 多模块项目 docker swarm 多个master_docker 多模块项目_25


docker 多模块项目 docker swarm 多个master_Docker_26

6.浏览器查看监控

docker 多模块项目 docker swarm 多个master_docker 多模块项目_27

7.更新

docker 多模块项目 docker swarm 多个master_Docker_28


docker 多模块项目 docker swarm 多个master_docker-swarm_29


docker 多模块项目 docker swarm 多个master_docker 多模块项目_30

8.回滚

docker 多模块项目 docker swarm 多个master_docker_31


docker 多模块项目 docker swarm 多个master_docker_32


docker 多模块项目 docker swarm 多个master_docker 多模块项目_33

四、Portainer可视化

1.下载图形服务,导入到harbor仓库

[root@server1 ~]# lftp 172.25.15.250
lftp 172.25.15.250:~> cd pub/docker   
cd ok, cwd=/pub/docker
lftp 172.25.15.250:/pub/docker> mirror portainer/		#下载图形服务
Total: 1 directory, 3 files, 0 symlinks           
New: 3 files, 0 symlinks
86588866 bytes transferred
lftp 172.25.15.250:/pub/docker> exit
[root@server1 ~]# ls
auth           get-docker.sh                         myapp.tar
busybox.tar    haproxy.tar                           nginx.tar
compose        harbor                                portainer
convoy         harbor-offline-installer-v1.10.1.tgz  rhel7.tar
convoy.tar.gz  lxcfs-2.0.5-3.el7.centos.x86_64.rpm   visualizer.tar
game2048.tar   mario.tar
[root@server1 ~]# cd portainer/
[root@server1 portainer]# docker load -i portainer.tar 	#导入镜像
dd4969f97241: Loading layer    278kB/278kB
e7260fd2a5f2: Loading layer  73.85MB/73.85MB
Loaded image: portainer/portainer:latest
[root@server1 portainer]# docker load -i portainer-agent.tar 	#导入镜像
1f0ac9aec537: Loading layer  2.048kB/2.048kB
0cf0d1d03535: Loading layer  12.15MB/12.15MB
Loaded image: portainer/agent:latest
[root@server1 portainer]#

docker 多模块项目 docker swarm 多个master_docker 多模块项目_34

新建项目,导入镜像

docker 多模块项目 docker swarm 多个master_docker 多模块项目_35

[root@server1 portainer]# docker tag portainer/agent:latest 	reg.westos.org/portainer/agent:latest	#打标签,修改名称
[root@server1 portainer]# docker push reg.westos.org/portainer/portainer:latest	#导入到网络仓库

[root@server1 portainer]# docker push reg.westos.org/portainer/agent:latest	#导入到网络仓库

docker 多模块项目 docker swarm 多个master_Docker_36

2.启动图形

## 下载服务包
[root@server2 ~]# lftp 172.25.15.250
lftp 172.25.15.250:~> cd pub/docker/
lftp 172.25.15.250:/pub/docker> mirror portainer/
Total: 1 directory, 3 files, 0 symlinks                  
New: 3 files, 0 symlinks
86588866 bytes transferred
lftp 172.25.15.250:/pub/docker> exit
[root@server2 ~]# ls
busybox.tar  convoy         docker-compose.yml  portainer
compose      convoy.tar.gz  nginx.tar
[root@server2 ~]# cd portainer/
[root@server2 portainer]# docker stack deploy -c portainer-agent-stack.yml portainer	#启动图形
Creating network portainer_agent_network
Creating service portainer_agent
Creating service portainer_portainer
[root@server2 portainer]#

docker 多模块项目 docker swarm 多个master_docker_37

启动成功

docker 多模块项目 docker swarm 多个master_docker 多模块项目_38

浏览器查看

docker 多模块项目 docker swarm 多个master_docker_39


docker 多模块项目 docker swarm 多个master_json_40


docker 多模块项目 docker swarm 多个master_docker_41