此记录一下将springboot项目的jar打包成docker镜像记录错误点。
1.将springboot项目打包成jar包
参考博客 : springboot项目打包成jar_springboot打包成jar-CSDN博客
具体打包步骤参考他的如何打包: 使用IDEA进行打包。但是我需要在我的springboot的pom.xml文件里面配置如下插件。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.6.13</version><!-- 自己的SpingBoot版本 -->
<configuration>
<!-- 自己的启动类地址 -->
<mainClass>com.example.hellotest.HelloTestApplication</mainClass>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
利用IDEA打包完成后, 会在下图生成如下文件。
有个坑点就是: 当我重新clean打包后,那个MANIFEST.MF文件也需要重新删除,然后再clean再进行package来进行打包出的jar文件才能使用。
运行: java -jar .\target\HelloTest-0.0.1-SNAPSHOT.jar
2.将jar包打包成docker镜像。
其实原理还是非常简单的,就是将我们程序的jar包放在一个镜像里面。当我们启动一个镜像的时候,把jar包一起启动了。
Dockerfile
# 环境(运行jar包镜像,需要自己提前拉下来)
FROM centos:7
# 作者信息
MAINTAINER jzm
# 复制JDK环境(命令第一个参数必须是相对路径)
COPY jdk-14 /tools/java/jdk-14
# 配置环境变量(以你复制的环境来配置的)
ENV JAVA_HOME=/tools/java/jdk-14
ENV PATH=$JAVA_HOME/bin:$PATH
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# 拷贝jar
COPY HelloTest-0.0.1-SNAPSHOT.jar .
ADD HelloTest-0.0.1-SNAPSHOT.jar /app.jar
COPY application.yml /home
# 暴露的端口号
EXPOSE 80
# 执行命令
ENTRYPOINT ["java","-jar","/app.jar","--spring.profiles.active=/home/application.yml"]
将我们刚才的jar包、项目的配置文件、Dockerfile放到一个目录下面。
以下jdk-14目录,是我下载的linux jdk-14版本的目录。主要为了演示,将他拷贝过来。实际情况下大家按照自己环境的jdk目录,然后用相对路径找到是没问题的。
将这个目录通过文件传输工具拷贝到linux的某目录下面。
我们在这目录,执行如下指令:
docker buildx build -t test/jzm:1.0.0 -f ./Dockerfile .
-t 是指打包出的镜像名。
-f 是指Dockerfile文件所在的路径
. 是构建上下文目录。
这时候我们执行:
docker images
代表打包成功了。
执行:
docker run -d -p 80:80 test/jzm:1.0.0