赞
踩
前面章节,使用 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插件构建镜像有:全pom标签和读取Dockerfile两种方式。
方式一:全pom方式:
此种方式由于标签的限制,较模板化。
1、pom 依赖添加docker-maven插件
- <build>
- <!-- jar包的名字,也可不指定,默认为artifactId和version组合-->
- <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>
- <!-- 基础镜像 -->
- <baseImage>java</baseImage>
- <!-- entrypoint:类似于Dockerfile的ENTRYPOINT指令 -->
- <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
- <resources>
- <resource>
- <targetPath>/</targetPath>
- <!-- 用于指定需要复制的根目录,${project.build.directory}表示target目录。 -->
- <directory>${project.build.directory}</directory>
- <!-- 用于指定需要复制的文件。${project.build.finalName}.jar指的是打包后的jar包文件。 -->
- <include>${project.build.finalName}.jar</include>
- </resource>
- </resources>
- <dockerHost>http://192.168.25.131:2375</dockerHost>
- <!-- 如需重复构建相同标签名称的镜像,可将forceTags设为true,这样就会覆盖构建相同标签的镜像。 -->
- <forceTags>true</forceTags>
- </configuration>
- </plugin>
- </plugins>
- </build>

2、到工程目录cmd 执行mvn 打包:
- # 打包命令
- mvn clean package docker:build ‐DpushImage
看到如下构建步骤信息:
上传信息:
查看私有仓库:
执行docker images 同样可以看到构建的镜像。
方式二:引入 Dockerfile 构建镜像:
1、项目 src/main 下创建docker 目录,新建 Dockerfile:
2、编写 Dockerfile:
- # 基础镜像
- FROM java:8
- # 作者
- MAINTAINER Ron
- # 数据卷
- VOLUME /tmp
- # 复制工程打包后 target 目录下的jar 到容器中
- ADD app.jar app.jar
- # 端口
- EXPOSE 12000
- # 创建容器执行的命令
- ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
3、修改 pom 依赖:
主要添加了<dockerDirectory> 指定 Dockerfile 的位置
- <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>
- <!-- 用于指定需要复制的根目录,${project.build.directory}表示target目录。 -->
- <directory>${project.build.directory}</directory>
- <!-- 用于指定需要复制的文件。${project.build.finalName}.jar指的是打包后的jar包文件。 -->
- <include>${project.build.finalName}.jar</include>
- </resource>
- </resources>
- <!-- 远程 docker 宿主机地址 -->
- <dockerHost>http://192.168.25.131:2375</dockerHost>
- </configuration>
- </plugin>
- </plugins>
- </build>

4、同方式一,到工程目录cmd 执行mvn 打包:
- # 打包命令
- 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 文章,关注微信公众号吧:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。