使用 dockerfile-maven-plugin 插件构建并推送 Docker 镜像

这篇笔记的目标是使用本地 IDEA 编译 SpringBoot 工程为 jar 包,并且使用安装好 Docker 的远程 Linux 主机构建 Docker 镜像,Push 到阿里云的镜像托管服务。

首先需要一台安装好 Docker 的 Linux 主机或虚拟机,并且开放远程控制(见 -> 开启 Docker 的远程控制

添加环境变量

IDEA 设置里添加 Maven 环境变量,告知 Docker Host 地址,具体操作如下:

  1. 找到 Preference -> Build, Execution, Deployment -> Build Tools -> Maven -> Runner
  2. 在 Environment variables 中填写 DOCKER_HOST=tcp://xxx.xxx.xxx.xxx:2375

修改 POM 文件配置

在项目 POM 文件中添加 dockerfile-maven-plugin 插件配置,注意修改 repository, username, password。

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
38
39
40
41
42
<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.13</version>
<executions>
<execution>
<id>build-tag-push-version</id>
<phase>package</phase>
<goals>
<goal>build</goal>
<goal>tag</goal>
<goal>push</goal>
</goals>
<configuration>
<tag>${project.version}</tag>
</configuration>
</execution>
<execution>
<id>tag-push-latest</id>
<phase>package</phase>
<goals>
<goal>tag</goal>
<goal>push</goal>
</goals>
<configuration>
<tag>latest</tag>
</configuration>
</execution>
</executions>
<configuration>
<repository>registry.cn-shanghai.aliyuncs.com/xxxxx/xxxxx</repository>
<username>userName</username>
<password>userPassword</password>
<buildArgs>
<JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
</plugins>
</build>

本配置的作用是,运行 mvn package 操作时:

  1. jar 包编译
  2. 使用项目根目录下的 Dockerfile 构建以版本号为 Tag 的 Docker 镜像,并 push 到阿里云镜像托管服务
  3. 构建 Tag 为 latest 的 Docker 镜像,并 push 到阿里云镜像托管服务

更多配置选项查看官方信息:

https://github.com/spotify/dockerfile-maven

多 Tag 的配置可参考此 issue:

https://github.com/spotify/dockerfile-maven/issues/10

隐藏 POM 文件中的密码

maven 提供密码加密的功能,具体过程见:https://maven.apache.org/guides/mini/guide-encryption.html

配置完 ~/.m2/setting-security.xml 后,在 ~/.m2/setting.xml 找到 servers 标签,添加:

1
2
3
4
5
6
7
<servers>
<server>
<id>registry.cn-shanghai.aliyuncs.com</id>
<username>userName</username>
<password>{encryptedPassword}</password>
</server>
</servers>

修改 POM 文件中的配置即可

1
2
3
4
5
6
7
8
9
<configuration>
<repository>registry.cn-shanghai.aliyuncs.com/xxxxx/xxxxx</repository>
- <username>userName</username>
- <password>userPassword</password>
+ <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
<buildArgs>
<JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>

编写 Dockerfile

在项目的根目录中新建 Dockerfile,注意其中 ARG JAR_FILE 字段是与 POM 文件中的设置对应的,例:

1
2
3
4
5
6
7
8
9
10
11
12
FROM openjdk:11.0.8-jre
MAINTAINER SJ Zhou <morooiu@gmail.com>

WORKDIR /project

ARG JAR_FILE
ADD target/${JAR_FILE} project.jar

RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo Asis/Shanghai > /etc/timezone
EXPOSE 8080
CMD ["java", "-jar", "project.jar"]

使用 dockerfile-maven-plugin 插件构建并推送 Docker 镜像

https://morooi.com/2020/docker-maven/

作者

SJ Zhou

发布于

2020-12-01

更新于

2021-01-06

许可协议

评论