Docker maven 插件
什么是 docker-maven-plugin?
fabric8io/docker-maven-plugin
是一个用于管理 Docker 镜像和容器的 Maven 插件。它侧重于 Docker 构建集成的两个主要方面:
- 构建镜像:此插件的一个目的是创建保存实际应用程序的 Docker 镜像,这是通过 Mavne 命令
docker:build
完成的; - 启停容器:使用此插件,可以运行完全隔离的集成测试,因此您无需处理共享资源。端口可以动态映射,并作为 Maven 属性提供给集成测试代码。
简单来说,通过这个插件,我们可以直接在本地将 SpringBoot 项目打包成 Docker 镜像,并推送至 Docker Register。
官方文档地址:https://dmp.fabric8.io/
使用 docker-maven-plugin
首先,需要添加 maven 依赖:
xml
<build>
<plugins>
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>${version}</version>
</plugin>
</plugins>
</build>
<build>
<plugins>
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>${version}</version>
</plugin>
</plugins>
</build>
然后,添加一个名为 Dockerfile 文件,输入镜像的打包配置。例如:
Dockerfile
FROM openjdk:8-jdk-alpine
WORKDIR /app
ADD target/demo-1.0-SNAPSHOT.jar app.jar
EXPOSE 8080
CMD ["java", "-jar", "app.jar"]
FROM openjdk:8-jdk-alpine
WORKDIR /app
ADD target/demo-1.0-SNAPSHOT.jar app.jar
EXPOSE 8080
CMD ["java", "-jar", "app.jar"]
完成 Dockerfile 的配置后,如果你配置了 Docker_HOST 环境变量,即有 Docker 守护进程的远程 URL,当你执行 mvn docker:build
的时候,就可以打包镜像至该引擎了。
如果你没有配置,那么可以添加一个系统环境变量,Key 为 Docker_HOST,value 为 Docker 守护进程的远程接口(需要开启你的 Docker 守护进程的远程接口哦),例如:tcp://host:2375
(host 用实际 ip 地址替换,如果是本机可以填写 127.0.0.1)。
上面只是最简单的使用,我们并没有对其进行额外的配置,比如镜像名称,版本号,我们也可以在配置中使用指定的 Docker_HOST,这些配置可以在官方文档中找到 ClickHere。
下面的例子中,在上面的基础上,让项目在执行 mvn install
的时候,自动打包镜像。
xml
<build>
<plugins>
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.41.0</version>
<configuration>
<images>
<image>
<name>%g/%a:%v</name>
<run>
<containerNamePattern>%n-%i</containerNamePattern>
</run>
</image>
</images>
</configuration>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<build>
<plugins>
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.41.0</version>
<configuration>
<images>
<image>
<name>%g/%a:%v</name>
<run>
<containerNamePattern>%n-%i</containerNamePattern>
</run>
</image>
</images>
</configuration>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>