【Docker】maven构建镜像

620 阅读1分钟

一、 方式

  • docker-maven-plugin插件构建docker镜像有两种方式:
  1. 指定参数,由docker-maven-plugin插件根据这些参数来制作镜像
<plugins>
    <!--这是原有的spring boot插件-->
    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
    <!--新增的docker maven插件-->
    <plugin>
        <groupId>com.spotify</groupId>
        <artifactId>docker-maven-plugin</artifactId>
        <version>0.4.12</version>
        <!--docker镜像相关的配置信息-->
        <configuration>
            <!--镜像名,这里用工程名-->
            <imageName>${project.artifactId}</imageName>
            <!--TAG,这里用工程版本号-->
            <imageTags>
                <imageTag>${project.version}</imageTag>
            </imageTags>
            <!--镜像的FROM,使用java官方镜像-->
            <baseImage>java:8u111-jdk</baseImage>
            <!--该镜像的容器启动后,直接运行spring boot工程-->
            <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>
</plugins>
  1. 指定Dockerfile,主要添加了 指定 Dockerfile 的位置
FROM anapsix/alpine-java:8
MAINTAINER testuer
VOLUME /tmp
ADD gajcz-auth-0.0.1-SNAPSHOT.jar app.jar
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    echo 'Asia/Shanghai' >/etc/timezone
EXPOSE 8531
ENTRYPOINT ["java","-jar","-Duser.timezone=Asia/Shanghai","app.jar"]

说明

<build>
    <finalName>app</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <!--docker的maven插件,官网:https://github.com/spotify/docker‐maven‐plugin-->
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>0.4.13</version>
            <configuration>
            <!--镜像名称-->
            <!--<imageName>${project.artifactId}:${project.version}</imageName>-->
                <imageName>192.168.25.131:4000/${project.artifactId}:${project.version}</imageName>
                <!--插件读取Dockerfile进行构建不再指定baseImage和entrypoint,而是使用dockerDirectory指定Dockerfile所在的路径-->
                <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
                <resources>
                    <resource>
                        <targetPath>/</targetPath>
                        <!--用于指定需要复制的根目录,表示target目录。-->
                        <directory>${project.build.directory}</directory>
                        <!--用于指定需要复制的文件,指的是打包后的jar包文件。-->
                        <include>${project.build.finalName}.jar</include>
                    </resource>
                </resources>
                <dockerHost>http://192.168.25.131:2375</dockerHost>
            </configuration>
        </plugin>
    </plugins>
</build>

运行打包镜像并且推送到仓库

mvn clean package docker:build ‐DpushImage