docker打包项目镜像,并批处理上传

2021年6月15日
docker打包项目镜像,并批处理上传插图

本文出自明月工作室:https://www.freebytes.net/it/java/docker-build-project.html

需要在开发的项目根目录下,放一个Dockerfile文件,内容如下:

FROM adoptopenjdk:8u275-b01-jdk-openj9-0.23.0-focal
COPY ./ssmp-starter.jar ./app.jar
RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone
ENTRYPOINT ["java","-Xmx1068m","-Xms1068m","-jar","./app.jar"]

然后放一个批处理文件docker.bat,内容如下:

@echo off

SET version=1.0.0

echo =========  正在构建jar包=================
call mvn clean package -Dmaven.test.skip=true --settings D:\apache-maven-3.3.9\conf\settings.xml

echo ===========创建tmp目录当做docker上下文===
mkdir tmp
copy Dockerfile tmp/Dockerfile
copy starter\target\ssmp-starter-1.0.jar  tmp\ssmp-starter.jar

echo ===========正在构建镜像===================
cd tmp
docker build -t yours.harbor.com:5000/test/ssmp:%version%  .

echo ===========正在上传镜像===================
docker push yours.harbor.com:5000/test/ssmp:%version%

echo ===========删除tmp目录====================
del /a /f /q *.*
cd ..
rd /s/q tmp

pause

要注意,不要直接使用Dockerfile文件构建镜像,要使用批处理文件,双击它就可以自动完成镜像构建与上传的操作。

批处理的逻辑是这样的:在当前目录生成一个tmp目录,将jar包和Dockerfile文件拷贝过去,然后进入tmp目录执行构建镜像的指令docker build。

之所以没有基于项目根目录构建镜像,是因为docker build指令,是先将当前目录的所有文件都打包发送到docker服务端,然后服务端完成镜像构建操作的。基于tmp目录构建镜像,可以最大程度的避免多余文件的发送。