1 准备jar包
写一个简单的springboot项目,提供一个接口,当访问此接口时,返回当前容器IP,还是贴一下代码地址:https://github.com/995586041/jenkins.git
@RequestMapping("/ip")
public String getIp() throws UnknownHostException {
System.out.println("log:------------>ip");
String ip = InetAddress.getLocalHost().getHostAddress();
return "您访问的IP是:"+ip;
}
打包成jar,假设为 ip.jar 在下面使用
2 制作测试镜像
现在已经有了jre8基础镜像以及测试jar包,如果没有jre8基础镜像,想办法搞一个,上篇文章有介绍怎么自己制作一个,然后在这个基础上制作出一个新的镜像:
所需文件:
Dockerfile
FROM jre8
MAINTAINER goldleaf
ADD ./ip.jar /root/ip.jar
# RUN 构建镜像过程中触发
# CMD 镜像启动后触发
CMD java -jar /root/ip.jar
制作镜像ipweb
docker build -t ipweb .
我们是在swarm集群的的某个节点上制作的镜像,当create项目的时候,镜像所在的机器能找到镜像可以正常启动,但是其他节点并没有相应镜像,然后节点就会去仓库找,肯定也是找不到的,所以我们应该经制作好的镜像push到私有仓库里面,然后所有节点去私有仓库pull镜像,这样就可以了
push镜像到私有仓库:
registry:192.168.20.200
master: 192.168.20.201
slave02: 192.168.20.202
slave02: 192.168.20.203
# 重新打tag
docker tag ipweb 192.168.20.200:5000/ipweb
# push到仓库
docker push
3 启动镜像
3.1 启动:
docker service create -p 8085:8080 --replicas 3 --name ipweb --network central 192.168.20.200:5000/ipweb
3.2 查看服务
docker service ls
docker service ps ipweb
4 访问测试
前台访问主节点:http://192.168.20.201:8085/ip,直接在浏览器看返回的IP,需要一直刷,才可能看到不同IP,因为每次请求可能都发到同一个容器里,我这里用python模拟发送http请求:
import requests
url = 'http://192.168.20.201:8083/ip'
n = 0
while n < 30:
response = requests.get(url)
print(response.content.decode())
n = n + 1
结果如下,可以看到请求发送到了不同节点上: