Docker使用(八) —docker-compose部署SpringBoot(jar包)
目录
- 1、前提安装Docker
- 2、安装docker-compse
- 3、官方体验使用
- 4、部署jar包
-
- 4.1、准备java工程
- 4.2、创建工作目录
- 4.3、创建Dockerfile
- 4.4、创建docker-compose.yaml
- 4.5、上传 jar包
- 5、创建启动脚本
- 6、执行脚本
- 7、测试访问
- 8、更新Jar包
- 9、下载Jar源码
1、前提安装Docker
在使用docker-compose之前,需要先搭建docker环境,参考《Linux下Docker安装部署》
2、安装docker-compse
使用curl下载:
curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
授权:
chmod +x /usr/local/bin/docker-compose
查询版本:
docker-compose version
3、官方体验使用
根据官网案例体验docker-compose编排过程:https://docs.docker.com/compose/gettingstarted/
官网案例,进行 快速入门
4、部署jar包
4.1、准备java工程
搭建SpringBoot项目,创建一个
Controller
和application.properties
文件
测试部署两个jar服务:默认端口分别为8808、8809
,两个jar可以做对比更便于理解;
application.properties:
# 创建几个变量,用于验证docker启动jar时对变量进行修改server.port=8088server.name="boot-demo"
Controller:
@RestControllerpublic class Controller { @Value("${server.name}") private String name; @GetMapping("test") public String main() throws Exception { return "Name:" + name; }}
4.2、创建工作目录
分别创建boot-demo-8088与boot-demo-8089存放两个不同的jar包
mkdir -p /home/docker-compose/boot-demo-8088 \mkdir -p /home/docker-compose/boot-demo-8089 \mkdir -p /home/docker-compose/boot-demo-8088/logs \mkdir -p /home/docker-compose/boot-demo-8089/logs
4.3、创建Dockerfile
分别在boot-demo-8088与boot-demo-8089目录下创建Dockerfile,内容如下:
boot-demo-8088:
vim /home/docker-compose/boot-demo-8088/Dockerfile
FROM java:8RUN mkdir -p /usr/local/application/logs /usr/local/application/jarCOPY *.jar /usr/local/application/jar/application.jar#定义时区参数ENV TZ=Asia/Shanghai#设置时区RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo '$TZ' > /etc/timezoneENV SERVER_NAME="boot-demo-8088"ENTRYPOINT exec java -Dserver.name=${SERVER_NAME} -jar /usr/local/application/jar/application.jar
boot-demo-8089:
vim /home/docker-compose/boot-demo-8089/Dockerfile
FROM java:8RUN mkdir -p /usr/local/application/logs /usr/local/application/jarCOPY *.jar /usr/local/application/jar/application.jar#定义时区参数ENV TZ=Asia/Shanghai#设置时区RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo '$TZ' > /etc/timezoneENV SERVER_NAME="boot-demo-8089"ENTRYPOINT exec java -Dserver.name=${SERVER_NAME} -jar /usr/local/application/jar/application.jar
4.4、创建docker-compose.yaml
分别在boot-demo-8088与boot-demo-8089目录下创建docker-compose.yaml,内容如下:
boot-demo-8088:
vim /home/docker-compose/boot-demo-8088/docker-compose.yaml
version: "3.8"services:# 服务名称boot-demo-8088: # Dockerfile所在目录(. 表示同级目录下) build: . # 镜像名称 image: boot-demo-8088 # 容器名称 container_name: boot-demo-8088 restart: always # 端口 ports: - "8088:8088" # 挂载 volumes: - /home/server/boot-demo-test/boot-demo-8088/logs:/usr/local/application/logs
boot-demo-8089:
vim /home/docker-compose/boot-demo-8089/docker-compose.yaml
version: "3.8"services:# 服务名称boot-demo-8089: # Dockerfile所在目录(. 表示同级目录下) build: . # 镜像名称 image: boot-demo-8089 # 容器名称 container_name: boot-demo-8089 restart: always # 端口 ports: - "8089:8089" # 挂载 volumes: - /home/server/boot-demo-test/boot-demo-8089/logs:/usr/local/application/logs # 与boot-demo-8088相比修改Dockerfile中的ENV环境变量(多个变量不加`-`直接换行即可,参数不能有空格) environment: SERVER_NAME: "this-is-boot-demo-8089"
4.5、上传 jar包
将打包后的jar复制到服务的相应目录下
注意: 在此之前一定要保证,项目在本地能够运行
目录结构如下:
5、创建启动脚本
boot-demo-8088:
vim /home/docker-compose/boot-demo-8088/run.sh
#!/bin/shexport LANG="en_US.UTF-8"delImage=`docker images | grep -E "boot-demo-8088" | awk '{print $3}'` echo $delImagedocker stop boot-demo-8088sleep 2docker rm boot-demo-8088sleep 2docker rmi $delImagesleep 2docker-compose up -d --build
boot-demo-8089:
vim /home/docker-compose/boot-demo-8089/run.sh
#!/bin/shexport LANG="en_US.UTF-8"delImage=`docker images | grep -E "boot-demo-8089" | awk '{print $3}'`echo $delImagedocker stop boot-demo-8089sleep 2docker rm boot-demo-8089sleep 2docker rmi $delImagesleep 2docker-compose up -d --build
说明:
docker images | grep -E "boot-demo-8089" | awk '{print $3}'
中的boot-demo-8089
为镜像名称
docker stop|rm boot-demo-8089
中的boot-demo-8089
为容器名称
6、执行脚本
启动boot-demo-8088:
sh /home/docker-compose/boot-demo-8088/run.sh
启动boot-demo-8089:
sh /home/docker-compose/boot-demo-8089/run.sh
7、测试访问
我们在boot-demo-8088
与boot-demo-8089
项目中的docker-compose.yaml
,有一个区别就是boot-demo-8089
中设置了environment
参数,该参数的意义是,修改Dockerfile
中ENV
定义的环境变量;
区别:
测试结果:
8、更新Jar包
更新8088项目中的Controller代码:
// 在原有代码基础上,加入"更新了Jar包:" @GetMapping("test") public String main() throws Exception { return "更新了Jar包:Name:" + name + ",Max:" + max + ",Min:" + min; }
jar更新了代码,那么我们可以重新打包,并且上传到
/home/docker-compose/boot-demo-8088
下
上传新的jar到/home/docker-compose/boot-demo-8088
目录下,执行以下命令:
sh run.sh
再次访问:
9、下载Jar源码
下载地址:https://download.csdn.net/download/zhuocailing3390/59641879