使用dockerfile-maven-plugin插件构建docker镜像

旧的 docker-maven-plugin 插件已经停止更新,原作者推荐使用dockerfile-maven-plugin插件。

假设我们的Dockerfile文件长这样,该Dockerfile要放到需要构建镜像的那个模块的src同级目录下。

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT [ "sh", "-c", "java -Dspring.profiles.active=$PROFILES $JAVA_OPTS $APP_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]

1、在项目中引入插件依赖

我们现在的项目基本上都是多模块结构,打包发布的肯定是对外提供服务的那个模块,所以并不是所有模块都需要被打成镜像。所以一般在父模块进行插件配置如下

<plugins>
    <!--docker配置-->
    <plugin>
        <groupId>com.spotify</groupId>
        <artifactId>dockerfile-maven-plugin</artifactId>
        <version>1.3.6</version>
        <configuration>
            <!--仓库名-->
            <repository>anhui.gisquest.com/jz_zg/${project.artifactId}</repository>
            <!--标签-->
            <tag>${project.version}</tag>
            <!--相当于 --build-arg "JAR_FILE=target/xxx.jar" 结合Dockerfile文件
							需要做具体变更-->
            <buildArgs>
                <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
            </buildArgs>
        </configuration>
    </plugin>
</plugins>

在不需要打成镜像的模块配置这个

<plugins>
	<plugin>
		<groupId>com.spotify</groupId>
		<artifactId>dockerfile-maven-plugin</artifactId>
    <!--跳过-->
		<configuration>
			<skip>true</skip>
		</configuration>
	</plugin>
</plugins>

在需要打包镜像的模块配置这个

<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>dockerfile-maven-plugin</artifactId>
    <configuration>
        <skip>false</skip>
    </configuration>
</plugin>

2、本地配置环境变量

在环境变量中添加DOCKER_HOST=tcp://192.168.10.64:2375 (假设你已经开启了docker的远程访问)

如果只是本地使用这个插件构建docker镜像,只要在本地电脑上配置这个环境变量就行,如果需要jenkins来执行自动构建的话,那么需要在jenkins服务器上配置这个环境变量。

3、重启idea或者jenkins

如果没有用到jenkins那么配置好环境变量之后重启一下idea就可以,如果后面需要配合jenkins持续交付,那么

需要重启jenkins。

4、本地使用maven命令打包并创建镜像

使用maven命令,mvn clean package dockerfile:build

如果还需要将这个镜像推送到镜像仓库,那么追加 dockerfile:push命令即可。

Q.E.D.