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