使用maven插件构建docker镜像
1、在不使用maven去构建docker镜像时,我们选择使用docker进行构建,前提是Dockerfile文件和jar包需要在相同的目录下,执行docker build -t镜像名 .命令去构建镜像。


2、在引入maven后,我们通过docker-maven-plugin插件进行docker镜像的构建,插件的使用剧安颌儿如下,该插件的版本尝试过0.4.13和0.4.14,都可以完成docker镜像的构建。以下的方式是不用Dockerfile文件的,我们使用的<baseImage>指定基础镜像,使用<entryPoint>指定执行命令。执行maven clean package docker:build命令进行构建。<plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.13</version> <configuration> <imageName>suibian/${project.artifactId}:${project.version}</imageName> <baseImage>java</baseImage> <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration></plugin>

3、在使用docker进行自动化构建镜像时,需要做以下的设置,映射出本机的2375接口,否则在使用mavan命令打包的时候会报错,错误信息如下图所示。


4、当然我们也可以使用指定Dockerfile文件的方式构建,我们通过<dockerDirectory>去指定Dockerfile文件的位置。构建成功后会提示BUILD SUCCESS。<plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.14</version> <configuration> <!-- 注意imageName一定要是符合正则[a-z0-9-_.]的,否则构建不会成功 --> <!-- 详见:https://github.com/spotify/docker-maven-plugin Invalid repository name ... only [a-z0-9-_.] are allowed--> <imageName>suibian/${project.artifactId}:${project.version}</imageName> <!--<baseImage>java</baseImage>--> <!-- <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint> --> <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration></plugin>



5、使用docker images命令查看打包的镜像,如下图所示。使用docker ps查看容器运行的情况。


6、我们习惯了使用maven clean package命令打jar包,那么构建镜像能否也使用package命令呢?需要做以下的配置修改,通过添加executions将镜像的构建和package命令进行关联。<executions> <execution> <id>build-image</id> <phase>package</phase> <goals> <goal>build</goal> </goals> </execution></executions>
