目录结构
downlodas,uploads,logs是从docker映射出来的文件夹
20201222-1744,20201224-1015,20201224-1828这三个是存放jar包和Dockerfile文件的文件夹
这里拿20201224-1828这个文件夹来举例
20201224-1828文件夹包括一个Dockerfile和一个用maven package打出来的springboot jar包
Dockerfile文件如下
FROM openjdk:8-jdk-alpine
ARG JAR_FILE=*.jar
ENV TZ=Asia/Shanghai
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Xms256m","-Xmx512m","-jar","/app.jar"]
第一行:意思是基于openjdk:8-jdk-alpine镜像来制作镜像(alpine是一个体积很小的linux发行版,这个jdk是级域alpine制作的,体积比较小。所以我们基于这个镜像做的镜像也会很小)
第二行:是设置一个参数,将所有以jar结尾的文件标做JAR_FILE
第三行:这里是设置时区,否则日志打印时间不是北京时间
第四行:将刚才的jar复制为app.jar
第五行:运行jar文件并设置了jvm参数
基于这个Dockerfile就可以做镜像了
docker-compose.yml文件内容如下
version: '3.3'
services:
app1:
restart: always
container_name: app1
build:
context: ${CURRENT_FOLDER_NAME}/.
image: app1
volumes:
- ./downloads:/usr/local/downloads/
- ./uploads:/usr/local/uploads/
- ./logs:/usr/local/logs/
ports:
- 6027:16027
networks:
default:
external:
name: network0
docker-compose中的build表示是需要将dockerfile制作成镜像的,用的文件夹在context里,image表示将制作好的镜像命名为app1。但这样会有一个问题,如果第一次运行docker-compose up -d会创建镜像。但是第二次再执行
docker-compose up -d不会创建新的镜像,也就是jar包其实没有更新。
这时只要加上docker-compose up -d --build即可每次重新制作镜像。
.env 文件中是存放着docker-compose文件中用到的参数
CURRENT_FOLDER_NAME=20201224-1828
因为有可能要回滚版本,所以以日期来命名文件夹,并保留一些旧的jar包,需要时修改.env文件即可实现回滚的操作。
接下来就是运行了
sudo docker-compose down && sudo docker-compose up -d --build && sudo docker-compose logs -f
即可成功运行