摘要

上几遍都说到了docker的相关指令和使用Dockerfile构建镜像,但有些时候我们在本地开发,想要使用maven一键式构建镜像或者直接使用maven将镜像推送到我们的指定仓库,那么这里就需要使用maven的docker插件了。

dockerfile构建镜像时指定yum源 docker commit构建镜像的优缺点_jar

maven的docker插件

docker-maven-plugin	   https://github.com/spotify/docker-maven-plugin

docker-maven-plugin	    https://github.com/fabric8io/docker-maven-plugin

docker-maven-plugin	    https://github.com/bibryam/docker-maven-plugin

快速使用

我这里以microservice-psychological-user项目为例进行说明

1、首先在pom文件中加入docker build

<plugin>
<groupId>com.spotifygroupId>
<artifactId>docker-maven-pluginartifactId>
<version>0.4.13version>
<configuration>
<imageName>microservice-psychological-user:0.0.1imageName>
<baseImage>javabaseImage>
<entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]entryPoint>
<resources>
<resource>
<targetPath>/targetPath>
<directory>${project.build.directory}directory>
<include>${project.build.finalName}.jarinclude>
resource>
resources>
configuration>
plugin>

说明:

imageName:用于指定镜像名称,其中itmuch是仓库名称,microservice-discovery-eureka是镜像名称,0.0.1是标签名称。

baseImage:用于指定基础镜像,类似于Dockerfile中的FROM指令。

entrypoint:类似于Dockerfile的ENTRYPOINT指令。

resources.resource.directory:用于指定需要复制的根目录,${project.build.directory}表示target目录。

resources.resource.include:用于指定需要复制的文件。${project.build.finalName}.jar指的是打包后的jar包文件。

注意:此处是本地演示,需要本地部署docker环境,并且开通2375端口才可以构建成功。

父级模块打包

mvn clean install package

子级模块打包

mvn docker:build

输出如下内容则表示打包成功

[INFO] Building image microservice-psychological-user:0.0.1
Step 1 : FROM java
---> 861e95c114d6
Step 2 : ADD /microservice-psychological-user-SNAPSHOT.jar //
 ---> 035a03f5b389
Removing intermediate container 2b0e70056f1d
Step 3 : ENTRYPOINT java -jar /microservice-psychological-user:0.0.1.jar
 ---> Running in a0149704b949
 ---> eb96ca1402aa
Removing intermediate container a0149704b949
Successfully built eb96ca1402aa

然后执行docker images即可查看构建成的镜像,后续就可以启动镜像并运行了。

dockerfile构建镜像时指定yum源 docker commit构建镜像的优缺点_maven_02

插件读取Dokkerfile文件构建镜像

有时候我们需要使用docker更加方便的构建生成镜像,此时就需要使用maven插件引入Dockerfile文件路径构建镜像。

1、首先我们需要在src/main下面建立一个docker文件夹。新建一个Dockerfile文件,内容如下

FROM java:8
VOLUME /tmp
ADD microservice-psychological-user:0.0.1-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
EXPOSE 9000
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

2、修改pom文件

<plugin>
<groupId>com.spotifygroupId>
<artifactId>docker-maven-pluginartifactId>
<version>0.4.13version>
<configuration>
<imageName>microservice-psychological-user:0.0.1imageName>
<dockerDirectory>${project.basedir}/src/main/dockerdockerDirectory>
<resources>
<resource>
<targetPath>/targetPath>
<directory>${project.build.directory}directory>
<include>${project.build.finalName}.jarinclude>
resource>
resources>
configuration>
plugin>

只需要将${project.basedir}/src/main/docker代码加入即可

最后执行命令构建镜像即可。

dockerfile构建镜像时指定yum源 docker commit构建镜像的优缺点_jar_03

将插件绑定到某个phase上执行

有时候我们有这样的需求,执行例如mvn clean package 时,插件就自动为我们构建Docker镜像。要想实现这点,我们只需将插件的goal绑定在某个phase即可。

phase和goal可以这样理解:maven命令格式是:mvn phase:goal ,例如mvn package docker:build 。那么,package和docker都是phase,build则是goal

<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>


<plugin>
<groupId>com.spotifygroupId>
<artifactId>docker-maven-pluginartifactId>
<version>0.4.13version>
<executions>
<execution>
<id>build-imageid>
<phase>packagephase>
<goals>
<goal>buildgoal>
goals>
execution>
executions>
<configuration>
<imageName>microservice-psychological-user:0.0.1imageName>
<dockerDirectory>${project.basedir}/src/main/dockerdockerDirectory>
<resources>
<resource>
<targetPath>/targetPath>
<directory>${project.build.directory}directory>
<include>${project.build.finalName}.jarinclude>
resource>
resources>
configuration>
plugin>

将镜像推送到docker hub

一般情况下我们使用docker push将一个镜像推送到docker hub或者自己的私有仓库,那么如何使用maven将镜像推送到仓库呢。

1、修改mavne的全局配置文件

<server>
<id>docker-hubid>
<username>你的DockerHub用户名username>
<password>你的DockerHub密码password>
<configuration>
<email>你的DockerHub邮箱email>
configuration>
server>

2、修改pom文件

<plugin>
<groupId>com.spotifygroupId>
<artifactId>docker-maven-pluginartifactId>
<version>0.0.1version>
<configuration>
<imageName>microservice-psychological-user:0.0.1imageName>
<baseImage>javabaseImage>
<entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]entryPoint>
<resources>
<resource>
<targetPath>/targetPath>
<directory>${project.build.directory}directory>
<include>${project.build.finalName}.jarinclude>
resource>
resources>


<serverId>dockertest-hubserverId>
configuration>
plugin>

注意:此处的serverId要与setting中的一致。

在上述投建命令后面加入-DpushImage 即可实现推送了。

mvn clean package docker:build -DpushImage

到此就告一段落了,更多请看官方说明。