简介

本文介绍了 com.spotify:dockerfile-maven-plugin 的简单使用示例。
最终达成的目标是把 docker 镜像构建集成在 maven 打包过程中,可以使用 maven 命令构建 docker 镜像。

功能相似的插件有三个:

  • com.spotify:dockerfile-maven-plugin
    本文使用的插件,已经停止更新,但功能依旧稳定。
  • com.spotify:docker-maven-plugin
    本文所用插件的同胞兄弟,官方不推荐使用,已停止更新。
  • io.fabric8io:docker-maven-plugin
    支持在 pom.xml 中配置 Dockerfile 的各项内容,也支持自定义 Dockerfile,支持操作容器,功能强大,仍在更新。

使用

以 spring-boot-web 项目为例:

  1. 创建一个 spring-boot-web 项目并确保项目正常;

  2. 依据项目需要在合适的位置定制一个 Dockerfile,这里把 Dockerfile 放在了 src/main/docker 目录下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    FROM openjdk:8-jdk-alpine

    ENV TZ Asia/Shanghai
    RUN apk --no-cache add tzdata && cp /usr/share/zoneinfo/${TZ} /etc/localtime \
    && echo ${TZ} > /etc/timezone \
    && apk del tzdata

    VOLUME /tmp

    ARG JAR_FILE
    ADD target/${JAR_FILE} app.jar
    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

    EXPOSE 8080/tcp
  1. project 标签下添加插件配置:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    <build>
    <plugins>

    <plugin>
    <groupId>com.spotify</groupId>
    <artifactId>dockerfile-maven-plugin</artifactId>
    <version>1.4.13</version>
    <executions>
    <execution>
    <id>build</id>



    <phase>install</phase>
    <goals>

    <goal>build</goal>
    </goals>
    </execution>
    </executions>
    <configuration>

    <repository>cn/diqigan/${project.artifactId}</repository>

    <tag>${project.version}</tag>

    <dockerfile>src/main/docker/Dockerfile</dockerfile>

    <buildArgs>

    <JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
    </buildArgs>
    </configuration>
    </plugin>

    </plugins>
    </build>
  2. 构建镜像

镜像构建有两种方式:

  • 绑定 maven 阶段自动构建:

    以文中所示配置,执行 mvn install 指令会自动构建 docker 镜像。

  • 显式运行构建指令 mvn package dockerfile:buld 构建 docker 镜像。

可以在 maven 控制台日志中看到 docker 镜像已经构建成功。

dockerfile-maven-plugin-build-log

  1. 跳过镜像构建

如果前面在 pom.xml 插件配置中绑定了在 maven 阶段自动构建 docker 镜像,但是某次打包过程中又不希望自动构建 docker 镜像,可以通过 dockerfile.skip 参数跳过 docker 镜像构建。

1
mvn clean install -Ddockerfile.skip

后记

  1. 个人不推荐在 pom.xml 中配置 Dockerfile 的各项内容,有种配置侵入的感觉,建议另写一个 Dockerfile 文件;
  2. 持续集成过程中完全可以使用 docker 相关指令构建镜像,maven 插件有点画蛇添足的意思;
  3. 本文相关代码可在 Seven-Steven/spring-examples 查看;

参考文档

  • 官方使用文档
  • 官方使用示例

微信公众号

扫码关注, 一起进步!