Docker>07 - 使用Maven构建Docker镜像

扯淡:

前面章节,使用 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插件

    <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 文章,关注微信公众号吧:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值