Docker打包SpringBoot的四种方式

6,100 阅读2分钟

一:最基本的Dockerfile构建Springboot项目

在pom同目录下新建Dockerfile

FROM openjdk:8-jdk-alpine
VOLUME /tmp
COPY target/*.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

将Springboot使用Maven打包,在终端中传参进去,进行构建Images。

docker build --build-arg=target/*.jar -t demo1/app .
#构建完成后启动容器
docker run -p 8080:8080 demo1/app

给Springboot启动时候传环境变量或者shell参数

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -jar /app.jar ${0} ${@}"]

指定JVM参数和shell参数

 docker run -p 9000:9000 -e "JAVA_OPTS=-Ddebug -Xmx128m" demo1/app --server.port=9000

二:使用Idea可视化管理docker, 构建Springboot容器

这个在我另外一篇文章有讲到,都比较简单,有啥问题请留言。

三:使用Maven插件自动化构建Image

github.com/spotify/doc… ,能力强的可以直接去看README.md。
简单介绍一下这个插件做啥用的

  • 通过pom配置docker构建Image过程,参数等 。
  • 封装了自动化build,push,run等Maven命令 。
  • 需要依赖Dockerfile,Dockerfile与pom.xml位于同一个目录下。
    在pom.xml同目录下创建Dockerfile
FROM openjdk:8-jre
ENTRYPOINT ["/usr/bin/java", "-jar", "/usr/share/myservice/app.jar"]

ARG JAR_FILE
ADD target/${JAR_FILE} /usr/share/myservice/app.jar

在pom中添加

<plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>1.4.13</version>
                <executions>
                    <execution>
                        <id>default</id>
                        <goals>
                            <goal>build</goal>
                            <goal>push</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <!--你需要配置的地方-->

                    <!--指定仓库名/镜像名-->
                    <repository>myrep/${project.artifactId}</repository>
                    <!--指定tag -->
                    <tag>${project.version}</tag>
                    <buildArgs>
                        <!--指定参数jar-->
                        <JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                </configuration>
            </plugin>

最后在Idea Maven插件Plugins点击docker:build即可。或者输入命令

mvn com.spotify:dockerfile-maven-plugin:build

四:使用Google的Maven插件进行容器管理(重头戏)

Google开源项目Jib,对比上面那个插件Jib的Start数为7.8k,dockerfile-maven 为2.4k。
maven 插件

<plugin>
                <groupId>com.google.cloud.tools</groupId>
                <artifactId>jib-maven-plugin</artifactId>
                <version>1.6.0</version>
                <configuration>
                    <!--配置基本镜像-->
                    <from>
                        <image>openjdk:8-jdk-alpine</image>
                    </from>
                    <!--配置最终推送的地址,仓库名,镜像名-->
                    <to>
                        <image>registry.hub.docker.com/maoduntt/test</image>
                    </to>
                </configuration>


                <!--绑定到maven lifecicle-->
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

配置maven docker hub账户和密码,在maven settings.xml中添加

 <server>
      <id>registry.hub.docker.com</id>
      <username>你的dockerhub用户名</username>
      <password>你的dockerhub密码</password>
    </server>

在idea maven插件中点击或者maven命令 mvn compile jib:buildTar

可以看到推送远程成功,Jib不需要写Dockerfile只需要你在插件中定义构建类型,所以使用时请多参考github的文档.
都不是特别难,看自己喜好选择一种方式,有问题请留言。
觉得这篇文章对您有帮助,麻烦点个赞呗.