在Docker中运行SpringBoot JAR包

在Docker中运行SpringBoot JAR包

生成SpringBoot JAR包

1
2
Maven Build 设置
Goals: pakcage

本机启动jar包

1
2
cmd
D:\>java -jar spring-boot-0.0.1.jar

创建Docker镜像文件

1
2
3
4
5
6
7
8
9
10
11
1、新建文件夹: /root/myjar/springbootsw/
2、将jar包上传到 /root/myjar/springbootsw/ 目录下
3、在 /root/myjar/springbootsw/ 目录下建立 Dockerfile 文件
FROM java:8
MAINTAINER bingo
ADD spring-boot-sw.jar springsw.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","springsw.jar"]
4、执行命令创建镜像
cd /root/myjar/springbootsw
docker build -t springsw .

在Docker容器中启动JAR包

1
docker run -d --name springsw -p 8081:8080 -d springsw

进入容器查看JAR包运行日志

1
2
3
4
5
6
7
8
9
10
11
1、进入容器:
docker exec -it springsw bash
进入容器无法查看日志,换方式

2、docker logs 查看实时日志:
docker logs -f -t --since="2018-07-04" --tail=100 springsw
--since : 此参数指定了输出日志开始日期,即只输出指定日期之后的日志。
-f : 查看实时日志
-t : 查看日志产生的日期
-tail=100 : 查看最后的100条日志。
springsw : 容器名称

将JAR包调整到容器组中启动

1
2
3
4
5
6
7
1、修改  /usr/image_nginx/docker-compose.yml 文件
image: spingjpa 修改为新的镜像 image: springsw
2、停止之前启动中的容器组
进入 /usr/image_nginx目录
执行 docker-compose down
3、启动容器组
docker-compose up -d

测试

1
https://www.superplayer.top/wxsub1

后续更新JAR包后的发布流程

1
2
3
4
5
6
7
8
9
10
1、上传JAR包到目录: /root/myjar/springbootsw/
2、重新创建镜像
cd /root/myjar/springbootsw
docker build -t springsw .
3、进入容器组目录: /usr/image_nginx
停止容器组: docker-compose down
启动容器组: docker-compose up -d
4、查看容器日志
docker logs -f -t --since="2018-07-04" --tail=100 image_nginx_sping102_1
docker logs -f -t --since="2018-07-04" --tail=100 image_nginx_sping101_1

考虑多个应用的情况,使用同一个Nginx进行代理

Nginx的相关配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1、通过配置 server下的location映射解析,区分不同的应用
2、nginx支持同时设置多组的负载均衡,用来给不用的server来使用。
配置多组负载均衡来实现不同server的响应。
在配置
upstream tomcat_client {
server t01:8080 weight=1;
}
upstream tomcat_client_sub6 {
server t02:8080 weight=1;
}
时候
注意是使用的 8080
而不是启动的主机上映射的端口 8081
应该是使用的容器的实际运行端口,而非映射出来的宿主机的端口

nginx.conf 的核心修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    upstream tomcat_client {
server t01:8080 weight=1;
}
upstream tomcat_client_sub6 {
server t02:8080 weight=1;
}

location / {
proxy_pass http://tomcat_client;
proxy_redirect default;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /sub6/ {
proxy_pass http://tomcat_client_sub6;
proxy_redirect default;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
优先定位 /sub6/ 的请求。定位不到再使用 / 的规则。

docker-compose.yml 的核心修改

1
2
3
4
5
6
7
8
  links: 
- sping101:t01
- sping102:t02
sping102:
image: springsub6
ports:
- "8081:8080"
restart: always

修改后的相关操作

1
2
3
4
5
6
7
8
9
10
进入容器组配置目录 /usr/image_nginx/
1、停止容器组
docker-compose down
2、重新生成Nginx镜像
docker build -t myfznginx .
3、启动容器组
docker-compose up -d
4、查看容器日志
docker logs -f -t --since="2018-07-04" --tail=100 image_nginx_sping102_1
docker logs -f -t --since="2018-07-04" --tail=100 image_nginx_sping101_1