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项目放在一起构建镜像,可以参考我的另一篇文章

经验分享 程序员 微信小程序 职场和发展