> 文档中心 > Docker使用(八) —docker-compose部署SpringBoot(jar包)

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项目,创建一个Controllerapplication.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-8088boot-demo-8089项目中的docker-compose.yaml,有一个区别就是boot-demo-8089中设置了environment参数,该参数的意义是,修改DockerfileENV定义的环境变量;

区别:
在这里插入图片描述
测试结果:
在这里插入图片描述

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