• Maven Docker部署


    镜像构建方式

      docker-maven-plugin插件构建docker镜像有两种方式:
      1. 指定参数,由docker-maven-plugin插件根据这些参数来制作镜像;
      2. 指定Dockerfile,这和我们用docker build命令来构建镜像的过程一样,不过docker-maven-plugin帮我们把工程构建和镜像构建两件事串起来了;

    接下来我们将上述两种方式都实践一下;

    第一种构建方式:通过参数构建

      在mavendockerplugindemo工程目录下新建文件pom_1_by_param.xml,内容和pom.xml一样,然后我们再去<plugins>节点添加以下内容,放在原有的<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>

    上面的每个参数都已加了注释,就不多说了,在此文件所在目录执行以下命令,指定pom_1_by_param.xml作为pom文件执行maven构建:

    mvn clean package docker:build

    执行成功后输出以下信息:

    [INFO] --- maven-jar-plugin:2.6:jar (default-jar) @ mavendockerplugindemo ---
    [INFO] Building jar: /usr/local/work/mavendockerplugindemo/target/mavendockerplugindemo-0.0.1-SNAPSHOT.jar
    [INFO] 
    [INFO] --- spring-boot-maven-plugin:1.5.9.RELEASE:repackage (default) @ mavendockerplugindemo ---
    [INFO] 
    [INFO] --- docker-maven-plugin:0.4.12:build (default-cli) @ mavendockerplugindemo ---
    [INFO] Copying /usr/local/work/mavendockerplugindemo/target/mavendockerplugindemo-0.0.1-SNAPSHOT.jar -> /usr/local/work/mavendockerplugindemo/target/docker/mavendockerplugindemo-0.0.1-SNAPSHOT.jar
    [INFO] Building image mavendockerplugindemo
    Step 1/3 : FROM java:8u111-jdk
     ---> d23bdf5b1b1b
    Step 2/3 : ADD /mavendockerplugindemo-0.0.1-SNAPSHOT.jar //
     ---> 74f201b46c92
    Removing intermediate container cbc9e456d139
    Step 3/3 : ENTRYPOINT java -jar /mavendockerplugindemo-0.0.1-SNAPSHOT.jar
     ---> Running in 256a09be033d
     ---> ad342e51021e
    Removing intermediate container 256a09be033d
    Successfully built ad342e51021e
    [INFO] Built mavendockerplugindemo
    [INFO] Tagging mavendockerplugindemo with 0.0.1-SNAPSHOT
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 11.617 s
    [INFO] Finished at: 2017-12-23T00:00:06-08:00
    [INFO] Final Memory: 35M/84M
    [INFO] ------------------------------------------------------------------------

    执行docker images命令可以看到如下信息,新的镜像已经创建好了:

    root@instance-282sg05l:/kitking/app/girl# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    girl                0.0.1-SNAPSHOT      e6d299ed7821        13 minutes ago      660MB
    girl                latest              e6d299ed7821        13 minutes ago      660MB
    delron/fastdfs      latest              8487e86fc6ee        7 months ago        464MB
    java                8u111-jdk           d23bdf5b1b1b        22 months ago       643MB

    验证第一种方式构建的镜像
    执行以下命令,使用刚刚构建的镜像创建一个容器:

    docker run --name kitking -p 8081:8081 girl

    第二种构建方式:指定Dockerfile

      这种方式要我们自己写Dockerfile,好处是可以按照自己的需要在Dockerfile中添加更多内容,而不像第一种方式那样只能按照插件的参数规则来配置;

           <!--新增的docker maven插件-->
                <plugin>
                    <groupId>com.spotify</groupId>
                    <artifactId>docker-maven-plugin</artifactId>
                    <version>0.4.12</version>
                    <!--docker镜像相关的配置信息-->
                    <configuration>
                        <!--镜像名,这里用工程名-->
                        <imageName>${project.artifactId}</imageName>
                        <!--Dockerfile文件所在目录-->                 
                <dockerDirectory>${project.basedir}/docker/Dockerfile</dockerDirectory> <!--TAG,这里用工程版本号--> <imageTags> <imageTag>${project.version}</imageTag> </imageTags> <!--构建镜像的配置信息--> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin>

    在工程的src/main/docker/目录下新建Dockerfile文件,如下图:

    Dockerfile的内容如下,就是将工程构建完毕后的jar包复制到home目录,然后构建镜像:

    ENV ARTIFACTID mavendockerplugindemo
    ENV ARTIFACTVERSION 0.0.2-SNAPSHOT
    ENV HOME_PATH /home
    
    ADD /$ARTIFACTID-$ARTIFACTVERSION.jar $HOME_PATH/mavendockerplugindemo.jar
    
    WORKDIR $HOME_PATH
    
    ENTRYPOINT ["java","-jar","mavendockerplugindemo.jar"]

    可以开始构建了:

    mvn clean package docker:build
  • 相关阅读:
    数据库学习笔记5---MySQL字符串函数、日期时间函数
    关于hibernate的AnnotationConfiguration的问题
    浅谈Java web 中request的setAttribute()用法
    JAVA常见面试题之Forward和Redirect的区别
    JSP页面中<%!%>与<%%>与<%=%>
    Servlet的生命周期
    JavaEE学习路线图
    java web项目WEB-INF与META-INF的作用
    iOS-申请邓白氏编码的超详细流程介绍
    从高版本JDK换成低版本JDK报错
  • 原文地址:https://www.cnblogs.com/jiangzhaowei/p/10053483.html
Copyright © 2020-2023  润新知