一:制作一个基础镜像(包含JDK和tomcat),并将项目与镜像一起,以集群的方式启动
1.首先需要一个centos基础镜像
2.网上下载jdk和tomcat安装包,将tomcat和jdk安装包上传至服务器,解压。
3.进入tomcat的conf目录下根据需要更改配置文件。
4.Jdk与tomcat的同级目录下编辑dockerfile文件。将tomcat,jdk已经项目添加至镜像。Dockerfile文件详情如下:
5.通过dockerfile构建基础镜像
6.创建swarm集群
7.为集群添加worker节点
8.查看集群的节点分布
9.将镜像导出并传输到集群的其他worker节点
10.在另外两台worker节点执行镜像导入操作
docker load -i /tmp/centos_tomcat.tar
11.在主节点上启动该镜像,创建容器,运行服务,有三个副本。
二:当集群负载变化时,为集群增加或减少节点的情况
将某节点升级为manager:docker node update --role manager w6e3nh5kvrcve9u1naidmew71
将某节点的任务转移到其他节点上:docker node update --availability drain p69op0d4n2fdkdk3iahrhzkpu,通常这个节点为leader节点
将leader节点的角色降级为worker,替补的manager节点会自动升级成leader
将集群的某节点删除后,该节点启动的服务会被shutdown,管理节点会自动在其他节点再启动该服务,保证服务副本数不变
为集群增加节点后,现有的服务不会在新加节点上运行,之后启动的服务会在新加的节点上进行均衡。现有的服务增加服务副本数之后也会在新节点上进行均衡。
三:滚动更新服务
通过dockerfile创建镜像时,将新的war包添加入tomcat的webapps目录下。其他不变,制作新的镜像。通过镜像的更新达到更新服务的目的
将镜像导出到本地,并传送到集群的其他节点
集群的其他节点接收镜像后,导入镜像
在主节点执行更新服务
docker service update --image swarm_support:new --update-failure-action continue swarm_support_3
若失败,回滚服务
四:一个集群上运行服务的实例
1.制作镜像,将用来测试docker集群内是否能访问mysql以及是否能进行负载均衡
2.首先确保每个node机器上都有所需的镜像
3.访问一个生产接口:curl -d “phonenum=131767670000” http://172.17.0.2:8080/MobileTrace/model/query
正常返回。
4.创建一个服务,4个副本,进行端口映射
5.在另外一台机器上访问接口:
curl -d “phonenum=131767670000” http://10.128.118.107:10010/MobileTrace/model/query
此次访问负载到107机器上,日志为:
再次访问,此次访问负载到127机器上:
日志:
第三次访问:
此次访问负载到108机器上,日志:
上述验证,日志的正确输出说明docker集群内可正常访问mysql,每次访问都能将日志均匀的分布在各个机器上输出,说明集群达到了负载均衡的目的。
附录:docker基础的相关操作
1.验证docker是否安装完成:docker version
Server是一个常驻进程
Client通过接口与server进程通信,实现容器与镜像的管理。
2.查看docker的系统信息:docker info
3.docker images:查看本机镜像
4.docker ps:显示正在运行的容器
5.Docker ps -a:显示全部的容器,包括已停止的容器
docker run -d -p 10004:8080 -v supportPlatform.war:/app/tomcat/webapps/supportPlatform.war -v /home/was/logs/mytomcat4:/app/tomcat/logs --name mytomcat4 tomcat:latest:
6.运行tomcat镜像创建出一个容器,并将主机的10004端口映射到容器的8080端口,同时将主机目录下的supportPlatform.war包挂载至容器的/app/tomcat/webapps/目录下,实现主机与容器之间的war包转移运行,同时将其输出日志同步到主机的/home/was/logs/mytomcat4目录下。
其输出是容器的标识编号,启动命令中的-d表示后台启动,所有命令行不打印启动日志,查看启动日志可以使用命令:docker logs 容器ID
由于我们在启动时指定了日志在主机下的映射目录,所以在主机的映射目录下也能查看到此日志:
7.进入容器:docker exec -it 容器ID /bin/bash
在容器内的指定目录也能看到日志的输出:
查看启动时挂载的war包:war包上传时会自动解压到同级目录
查看端口映射:访问主机的10004端口,会映射到容器的8080端口
8.退出容器:exit
9.查看容器内的进程:docker top 容器ID
10.停止容器:docker stop 容器ID
11.重启容器:docker start 容器ID
12.删除容器:docker rm 容器ID
容器删除前必须先停止,不然不可以删除。
13.docker search tomcat:搜索镜像,默认会去https://hub.docker.com下搜索,这是官方维护的公共仓库,镜像最多也最标准。
14.docker pull tomcat:8.5.32:拉取指定版本的镜像。也是从上述仓库拉取。
15.docker rmi 镜像id:删除镜像
镜像删除前,需保证没有容器是该镜像创建的,不然会保证,删除不了:
镜像的迁移:
16.保存镜像:docker save mysql-57-centos7 -o /tmp/mysql.tar
17.导入镜像:docker load -i /tmp/mysql.tar
18.从主机复制文件到容器内:docker cp app.py e82e7dd094f2:/
19.通过dockerfile文件创建镜像:docker build -t testimages:test .
20.创建集群:docker swarm init:红框内为集群的标识ID
21.向集群添加以一个服务: docker service create --replicas 3 --name “swarm_tomcat” “tomcat:latest”
该服务有三个副本
22.查看服务日志:docker service logs 服务ID
23.向集群添加一个node节点:docker swarm join --token 集群ID managerIP:port
24.查看集群中的所有节点:docker node ls
25.设置某个服务的副本数量: docker service scale swarm_tomcat=4
26.删除某个服务:docker service rm swarm_tomcat
27.当前节点离开集群: docker swarm leave --force