当前位置:   article > 正文

Docker>07 - 使用Maven构建Docker镜像_mvn clean package dockerfile:build

mvn clean package dockerfile:build

扯淡:

前面章节,使用 Dockerfile 构建了自己的镜像,但是在企业微服务开发中,微服务的数量是非常多的,如果将服务一个一个的上传到宿主机、编写Dockerfile,然后使用 docker build 命令构建镜像,效率是非常低的。本章将介绍使用 Maven 插件构建镜像。

个人学习总结:
链接:【springboot、springcloud、docker 等,学习目录】  

准备工作:


maven构建docker镜像,需要远程连接到docker所在的宿主机,其默认端口是 2375,远程连接 docker 需要修改 docker 的配置文件。

1、修改docker.service 

vi /lib/systemd/system/docker.service 

在 ExecStart= 后添加配置 ‐H tcp://0.0.0.0:2375 ‐H unix:///var/run/docker.sock ,0.0.0.0 代表所有 ip ,也可指定 ip。

2、刷新、重启:

systemctl daemon-reload

systemctl restart docker

3、启动 私有仓库 docker start  私有仓库容器

Maven 插件构建镜像:


maven插件构建镜像有:全pom标签和读取Dockerfile两种方式。

方式一:全pom方式:

此种方式由于标签的限制,较模板化。

1、pom 依赖添加docker-maven插件

  1.     <build>
  2.         <!-- jar包的名字,也可不指定,默认为artifactId和version组合-->
  3.         <finalName>app</finalName>
  4.         <plugins>
  5.             <plugin>
  6.                 <groupId>org.springframework.boot</groupId>
  7.                 <artifactId>spring-boot-maven-plugin</artifactId>
  8.             </plugin>
  9.             <!-- docker的maven插件,官网:https://github.com/spotify/docker‐maven‐plugin -->
  10.             <plugin>
  11.                 <groupId>com.spotify</groupId>
  12.                 <artifactId>docker-maven-plugin</artifactId>
  13.                 <version>0.4.13</version>
  14.                 <configuration>
  15.                     <!-- 镜像名称 -->
  16.                     <!--<imageName>${project.artifactId}:${project.version}</imageName>-->
  17.                     <imageName>192.168.25.131:4000/${project.artifactId}:${project.version}</imageName>
  18.                     <!-- 基础镜像 -->
  19.                     <baseImage>java</baseImage>
  20.                     <!-- entrypoint:类似于Dockerfile的ENTRYPOINT指令 -->
  21.                     <entryPoint>["java""-jar""/${project.build.finalName}.jar"]</entryPoint>
  22.                     <resources>
  23.                         <resource>
  24.                             <targetPath>/</targetPath>
  25.                             <!-- 用于指定需要复制的根目录,${project.build.directory}表示target目录。 -->
  26.                             <directory>${project.build.directory}</directory>
  27.                             <!-- 用于指定需要复制的文件。${project.build.finalName}.jar指的是打包后的jar包文件。 -->
  28.                             <include>${project.build.finalName}.jar</include>
  29.                         </resource>
  30.                     </resources>
  31.                     <dockerHost>http://192.168.25.131:2375</dockerHost>
  32.                     <!-- 如需重复构建相同标签名称的镜像,可将forceTags设为true,这样就会覆盖构建相同标签的镜像。 -->
  33.                     <forceTags>true</forceTags>
  34.                 </configuration>
  35.             </plugin>
  36.         </plugins>
  37.     </build>

2、到工程目录cmd 执行mvn 打包:

  1. # 打包命令
  2. mvn clean package docker:build ‐DpushImage

看到如下构建步骤信息:

上传信息:

查看私有仓库:

执行docker images 同样可以看到构建的镜像。

方式二:引入 Dockerfile 构建镜像:


1、项目 src/main 下创建docker 目录,新建 Dockerfile:

2、编写 Dockerfile:

  1. # 基础镜像
  2. FROM java:8
  3. # 作者
  4. MAINTAINER Ron
  5. # 数据卷
  6. VOLUME /tmp
  7. # 复制工程打包后 target 目录下的jar 到容器中
  8. ADD app.jar app.jar
  9. # 端口
  10. EXPOSE 12000
  11. # 创建容器执行的命令
  12. ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

3、修改 pom 依赖:

主要添加了<dockerDirectory> 指定 Dockerfile 的位置

  1.     <build>
  2.         <finalName>app</finalName>
  3.         <plugins>
  4.             <plugin>
  5.                 <groupId>org.springframework.boot</groupId>
  6.                 <artifactId>spring-boot-maven-plugin</artifactId>
  7.             </plugin>
  8.             <!-- docker的maven插件,官网:https://github.com/spotify/docker‐maven‐plugin -->
  9.             <plugin>
  10.                 <groupId>com.spotify</groupId>
  11.                 <artifactId>docker-maven-plugin</artifactId>
  12.                 <version>0.4.13</version>
  13.                 <configuration>
  14.                     <!-- 镜像名称 -->
  15.                     <!--<imageName>${project.artifactId}:${project.version}</imageName>-->
  16.                     <imageName>192.168.25.131:4000/${project.artifactId}:${project.version}</imageName>
  17.                     <!-- 插件读取Dockerfile进行构建 不再指定baseImage和entrypoint,而是使用dockerDirectory指定Dockerfile所在的路径 -->
  18.                     <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
  19.                     <resources>
  20.                         <resource>
  21.                             <targetPath>/</targetPath>
  22.                             <!-- 用于指定需要复制的根目录,${project.build.directory}表示target目录。 -->
  23.                             <directory>${project.build.directory}</directory>
  24.                             <!-- 用于指定需要复制的文件。${project.build.finalName}.jar指的是打包后的jar包文件。 -->
  25.                             <include>${project.build.finalName}.jar</include>
  26.                         </resource>
  27.                     </resources>
  28.                     <!-- 远程 docker 宿主机地址 -->
  29.                     <dockerHost>http://192.168.25.131:2375</dockerHost>
  30.                 </configuration>
  31.             </plugin>
  32.         </plugins>
  33.     </build>

4、同方式一,到工程目录cmd 执行mvn 打包:

  1. # 打包命令
  2. mvn clean package docker:build ‐DpushImage

可在控制台看到构建及上传的日志信息。

至此,全pom 和引入Dockerfile 两种方式都已实现镜像的构建。

总结:

1、远程连接 docker 需暴露宿主机2375端口。
2、需修改 docker.service 配置支持远程连接。
3、maven 构建镜像的两种方式,全 pom 配置、引入Dockerfile,后者更灵活。

TIPS:

1、maven基本是解压即安装,要使用 maven 命令需配置环境变量。
2、若构建的镜像不想传到私有仓库,只需将pom标签镜像名称的 ip:port 去掉。
3、2375 为宿主机docker默认端口,若使用的是公网服务器,尽量不要直接暴露,我之前暴露了阿里云的2375端口,造成服务器被攻击,运行非常慢。


个人学习分享
更多 springboot、springcloud、docker 文章,关注微信公众号吧:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/866648
推荐阅读
相关标签
  

闽ICP备14008679号