SpringBoot中使用Maven插件,上传docker镜像

开启docker远程端口

我上一篇里面写了,这里暴露的路径:

18.16.202.95:2375

简单构建

配置pom.xml文件

在properties中增加一行指定远程主机的位置

 <properties>
    <java.version>1.8</java.version>
    <dockerHost>http://18.16.202.95:2375</dockerHost>
  </properties>

增加一个plugin

   <plugin>
        <groupId>com.spotify</groupId>
        <artifactId>docker-maven-plugin</artifactId>
        <version>0.4.12</version>
        <configuration>
          <imageName>com.huishi.demo</imageName>
          <!--          <imageName>${project.build.finalName}</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>

或者就用一个整个,dockerHost配置设置在插件里面:

  <plugin>
        <groupId>com.spotify</groupId>
        <artifactId>docker-maven-plugin</artifactId>
        <version>0.4.12</version>
        <configuration>
          <imageName>com.huishi.demo</imageName>
          <!--          <imageName>${project.build.finalName}</imageName>-->
          <baseImage>java</baseImage>
          <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
          <dockerHost>http://18.16.202.95:2375</dockerHost>
          <resources>
            <resource>
              <targetPath>/</targetPath>
              <directory>${project.build.directory}</directory>
              <include>${project.build.finalName}.jar</include>
            </resource>
          </resources>
        </configuration>
      </plugin>

这种方式也是可以的。

configuration配置说明:

  • imageName:用于指定镜像的完整名称,其中{docker.registry}为注册中心地址,{project.groupId}为仓库名称,{project.artifactId}为镜像名称,${project.version}为镜像标签名.
  • dockerDirectory:用于指定Dockerfile文件所在的目录.
  • resources.resource.directory:用于指定需要复制的根目录,${project.build.directory}表示target目录.
  • resources.resource.include:用于指定需要复制的文件,${project.build.finalName}.jar表示生成的jar包.

configuration中也可以添加

 <forceTags>true</forceTags>

用于每次新的构建上覆盖镜像tags,如果如果已经存在该tag,那么旧的镜像将会设为none

构建镜像:

mvn -DskipTests clean package docker:build
mvn clean package docker:build -Dmaven.test.skip=true

查看:

[root@slaver2 /]# docker images
REPOSITORY                                 TAG                 IMAGE ID            CREATED              SIZE
com.huishi.demo                            latest              860fe1ab3334        About a minute ago   662MB

启动镜像:

[root@slaver2 /]# docker run -p 18080:8080 com.huishi.demo

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.1.8.RELEASE)

2019-09-12 12:08:58.997  INFO 1 --- [           main] com.huishi.demo.DemoApplication          : Starting DemoApplication v0.0.1-SNAPSHOT on 70b1ca956ab4 with PID 1 (/demo-0.0.1-SNAPSHOT.jar started by root in /)
2019-09-12 12:08:59.001  INFO 1 --- [           main] com.huishi.demo.DemoApplication          : No active profile set, falling back to default profiles: default
2019-09-12 12:09:02.355  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2019-09-12 12:09:02.439  INFO 1 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2019-09-12 12:09:02.439  INFO 1 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.24]
2019-09-12 12:09:02.681  INFO 1 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2019-09-12 12:09:02.682  INFO 1 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 3526 ms
2019-09-12 12:09:03.527  INFO 1 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2019-09-12 12:09:04.218  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2019-09-12 12:09:04.236  INFO 1 --- [           main] com.huishi.demo.DemoApplication          : Started DemoApplication in 6.877 seconds (JVM running for 8.01)
2019-09-12 12:09:27.255  INFO 1 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2019-09-12 12:09:27.256  INFO 1 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2019-09-12 12:09:27.292  INFO 1 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 36 ms

访问测试:

curl -XGET http://18.16.202.95:18080
Hello Docker World

使用Dockerfile进行构建

/src/main/docker目录下,建立文件Dockerfile

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

使用-Djava.security.egd=file:/dev/./urandom加快随机数产生过程。

修改pom.xml配置:

  <plugin>
        <groupId>com.spotify</groupId>
        <artifactId>docker-maven-plugin</artifactId>
        <version>0.4.12</version>
        <configuration>
          <imageName>hongdada/${project.groupId}.${project.artifactId}</imageName>
          <dockerHost>http://18.16.202.95:2375</dockerHost>
          <!-- 指定Dockerfile所在的路径 -->
          <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
          <forceTags>true</forceTags>
          <imageTags>
            <imageTag>${project.version}</imageTag>
            <imageTag>latest</imageTag>
          </imageTags>
          <resources>
            <resource>
              <targetPath>/</targetPath>
              <directory>${project.build.directory}</directory>
              <include>${project.build.finalName}.jar</include>
            </resource>
          </resources>
        </configuration>
      </plugin>

其他步骤一样。这样即可使用Dockerfile进行构建Docker镜像啦。

异常

这里要注意的是,imageName必须符合正则[a-z0-9-_.],docker的imageName只能是小写字母,数字,点号,下划线

${project.build.finalName} 产出物名称,缺省为${project.artifactId}-${project.version} 当前版本

如果要使用SpringBootimageName要设置为${project.build.finalName},注意修改version,一般默认为0.0.1-SNAPSHOT,注意大写字母

参考:

使用Maven插件构建Docker镜像

Docker系列教程12-使用Maven插件构建Docker镜像

使用Docker部署SpringBoot

maven docker 插件集成的几个小坑

docker与Spring boot的集成:docker-maven-plugin使用

posted @ 2019-09-18 15:35  hongdada  阅读(1919)  评论(2编辑  收藏  举报