16boke - 一路博客

Docker系列:8、使用Maven插件构建Docker镜像

之前都是使用先写好dockerfile文件再通过docker build命令来生成镜像,这种方式对于生产环境可能不方便,如果可以使用maven构建docker那就大大提高效率。

下面为cloud-eureka注册中心为例来介绍如何使用maven直接构建一个docker镜像。

一、直接在pom.xml中设置构建参数

1、在pom.xml中添加maven的docker插件

<plugin>

            <groupId>com.spotify</groupId>

            <artifactId>docker-maven-plugin</artifactId>

            <version>1.0.0</version>

            <configuration>

            <imageName>cloud/eureka:0.0.2</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}</include>

            </resource>

            </resources>

            </configuration>

           </plugin>

插件的各个配置的含义:

  • imageName:用于指定镜像名称,其中cloud中仓库名称,eureka是镜像名称,0.0.2是标签名称,类似于版本号

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

  • entryPoint:类似于Dockerfile的ENTRYPOINT指令。

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

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

2、开启docker远程API

2.1、修改docker配置文件:vim /usr/lib/systemd/sysem/docker.server,将ExecStart这一行后面加上-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock,然后保存。

重新加载配置文件:systemctl daemon-reload

再重启docker:systemctl restart docker

2.2、测试是否开启远程访问

输入#netstat -anp|grep 2375 显示docker正在监听2375端口,输入#curl 127.0.0.1:2375/info  显示一大堆信息,证明远程api就弄好了

3、在windows系统环境变量中新建DOCKER_HOST,值为tcp://192.168.1.20:2375(改成自己docker服务器的ip地址)

4、进入项目,执行maven编译命令:mvn clean package docker:build -DskipTests,然后等待编译build成功,如果成功最后会输出:

[INFO] Building image cloud/eureka:0.0.2

Step 1/2 : FROM java

Pulling from library/java

Digest: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d

Status: Downloaded newer image for java:latest

---> d23bdf5b1b1b

Step 2/2 : ENTRYPOINT ["java","-jar","/cloud-eureka-0.0.1-SNAPSHOT.jar"]

---> Running in 3700148d2fcc

Removing intermediate container 3700148d2fcc

---> 6152809cd7be

ProgressMessage{id=null, status=null, stream=null, error=null, progress=null, progressDetail=null}

Successfully built 6152809cd7be

Successfully tagged cloud/eureka:0.0.2

[INFO] Built cloud/eureka:0.0.2

5、登录docker服务器,输入docker images可以看到项目已经被编译成了镜像,可以启动容器运行了。

附:

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

二、使用Dockerfile

有时还是需要使用Dockerfile文件来更精确的构建镜像,所以这个插件还提供了一种调用写好的Dockerfile文件来进行构建的方法

1、在“项目路径/src/main/”下新建一个docker目录,里面新建一个Dockerfile文件,内容就是需要构建的脚本命令,例如:

FROM java:8

VOLUME /tmp

ADD cloud-eureka-0.0.1-SNAPSHOT.jar /app.jar

EXPOSE 8000

ENTRYPOINT ["java","-jar","/app.jar"]

2、修改pom.xml

<plugin>

            <groupId>com.spotify</groupId>

            <artifactId>docker-maven-plugin</artifactId>

            <version>1.0.0</version>

            <configuration>

            <imageName>cloud/eureka:0.0.4</imageName>

            <!-- 直接在pom.xml中写类似于dockerfile的内容

            <baseImage>java</baseImage>

            <entryPoint>["java","-jar","/${project.build.finalName}.jar"]</entryPoint>

            -->

            <!-- 调用docker/Dockerfile -->

            <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>

            <resources>

            <resource>

            <targetPath>/</targetPath>

            <directory>${project.build.directory}</directory>

            <include>${project.build.finalName}</include>

            </resource>

            </resources>

            </configuration>

           </plugin>

3、执行还是和之前一样


Docker