spring-boot项目打包成一个docker镜像
-
项目结构如图
注意在项目根目录下创建了一个Dockerfile的文件,文件内容暂时不看.
-
pom文件,需要在build中加入
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.3.6</version>
<configuration>
<repository>docker/${project.artifactId}</repository>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
</plugins>
</build>
其中,repository表示打包后得到的镜像的名称, buildArgs是Dockerfile中引用到的参数
-
编辑Dockerfile文件:
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
ADD ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
其中ARG即pom文件中指定的参数,VOLUME 表示在镜像的目录中创建一个/tmp的文件目录,这一步是可选的,如果需要一些文件操作,建议通过这个参数指定文件目录供程序使用。
-
以上是准备步骤,接下来打包并构建镜像:
首先打包jar文件,用的命令是mvn package(Idea的terminal中直接执行),生成的jar文件在target目录下
然后打包成镜像,命令是 mvn install dockerfile:build((同样实在Idea的terminal中直接执行))
-
可以使用命令docker images查看所有镜像,然后运行这个镜像,会有相应的容器被创建(运行命令 docker run -d -p 8090:8080 <镜像名称>)
运行后会输出一长串字符,可以使用docker ps查看当前运行中的所有镜像如下图所示。
-
查看容器的IP(可以用 docker inspect <容器名称> | grep IPAddress 查看IP),并使用IP地址+端口(此处是8090)在浏览器访问。
后记: 如果希望使用docker compose把mysql和spring boot项目放在一起构建镜像,可以参考我的另一篇文章
