目录

  • 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环境

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

docker部署springboot项目接口乱码问号 springboot docker compose_jar

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=8088
server.name="boot-demo"

Controller:

@RestController
public 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:8

RUN mkdir -p /usr/local/application/logs /usr/local/application/jar

COPY *.jar /usr/local/application/jar/application.jar

#定义时区参数
ENV TZ=Asia/Shanghai
	
#设置时区
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo '$TZ' > /etc/timezone

ENV 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:8

RUN mkdir -p /usr/local/application/logs /usr/local/application/jar

COPY *.jar /usr/local/application/jar/application.jar

#定义时区参数
ENV TZ=Asia/Shanghai
	
#设置时区
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo '$TZ' > /etc/timezone

ENV 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复制到服务的相应目录下注意: 在此之前一定要保证,项目在本地能够运行

目录结构如下:

docker部署springboot项目接口乱码问号 springboot docker compose_docker_02

5、创建启动脚本

boot-demo-8088:

vim /home/docker-compose/boot-demo-8088/run.sh
#!/bin/sh
export LANG="en_US.UTF-8"
delImage=`docker images | grep -E "boot-demo-8088" | awk '{print $3}'` 
echo $delImage

docker stop boot-demo-8088

sleep 2
docker rm boot-demo-8088

sleep 2
docker rmi $delImage
sleep 2
docker-compose up -d --build

boot-demo-8089:

vim /home/docker-compose/boot-demo-8089/run.sh
#!/bin/sh
export LANG="en_US.UTF-8"
delImage=`docker images | grep -E "boot-demo-8089" | awk '{print $3}'`
echo $delImage

docker stop boot-demo-8089

sleep 2
docker rm boot-demo-8089

sleep 2
docker rmi $delImage
sleep 2
docker-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定义的环境变量;

区别:

docker部署springboot项目接口乱码问号 springboot docker compose_Dockerfile_03


测试结果:

docker部署springboot项目接口乱码问号 springboot docker compose_docker_04

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

再次访问:

docker部署springboot项目接口乱码问号 springboot docker compose_Dockerfile_05