Docker之使用maven插件【Dockerfile方式】构建并推送镜像到私有仓库

准备工作

操作系统版本

[root@node02 ~]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)

docker版本

[root@node02 ~]# docker -v
Docker version 18.06.3-ce, build d7080c1

接上一篇: 【Docker之使用maven插件【配置方式】构建并推送镜像到私有仓库】 ,这次我们通过 maven 插件和Dockerfile混合方式来生成镜像并推送到私有仓库

本文内容和上一篇只有以下几个地方不一样,前提是你的docker私有仓库搭建好了,并且开启了api服务,可以参考: 【Docker之用docker-compose安装registry和docker-registry-web私有仓库和仓库前端】

  • 在自己项目里新建一个 Dockerfile文件,可以放在自定义的目录里:
    在这里插入图片描述

  • 编辑maven pom文件,我们使用 docker-maven-plugin,和上一篇区别在添加了 dockerDirectory 标签指定了Dockerfile的路径,并且配置相关的只保留 resources 标签,私有仓库相关的不变;

<plugin>
                <!--docker-maven-plugin start-->
                <groupId>com.spotify</groupId>
                <!--文档参考 https://github.com/spotify/docker-maven-plugin -->
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.1.0</version>
                <configuration>
                    <!--============================================仓库相关配置================================================-->
                    <!--私有仓库地址-->
                    <registryUrl>192.168.126.99:5000</registryUrl>
                    <!--
                    docker api地址
                    构建镜像是通过调用在 http://192.168.126.99:2375 上的api构建image,以便后续推送到registryUrl上;
                    如果本地开启了docker api,这个地方也可以填本地的docker api地址
                    -->
                    <dockerHost>http://192.168.126.99:2375</dockerHost>
                    <!--是否推送镜像-->
                    <pushImage>true</pushImage>
                    <!--推送后是否覆盖已存在的标签镜像-->
                    <forceTags>true</forceTags>

                    <!--=============================================构建相关配置===============================================-->
                    <!--镜像名称-->
                    <imageName>192.168.126.99:5000/${project.artifactId}:${project.version}</imageName>

                    <!--
                    To use a Dockerfile, you must specify the dockerDirectory element.
                    If specified, the baseImage, maintainer, cmd and entryPoint elements will be ignored.
                    The contents of the dockerDirectory will be copied into ${project.build.directory}/docker.
                    Use the resources element to copy additional files, such as the service's jar file.
                    -->
                    <dockerDirectory>${project.basedir}/docker_file</dockerDirectory>

                    <!--插件会将需要的资源拷贝到 docker目录下,供Dockerfile里构建镜像使用-->
                    <resources>
                        <resource>
                            <targetPath>/${app.dir}</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                            <include>classes/application.yaml</include>
                        </resource>
                    </resources>
                </configuration>
                <!--docker-maven-plugin end-->
            </plugin>

Dockerfile 内容:

FROM openjdk:8-jre
COPY /app/tailf-web-1.2.1-SNAPSHOT.jar /app/tailf-web-1.2.1-SNAPSHOT.jar
COPY /app/classes/application.yaml /app/log/
WORKDIR /app
CMD ["java", "-jar", "/app/tailf-web-1.2.1-SNAPSHOT.jar"]
原理

docker-maven-plugin插件在配置dockerDirectory后会忽略掉pom里的baseImage, maintainer, cmd and entryPoint配置,我们可以使用 resources 标签准备构建镜像的文件;
其大致流程:
1、resources标签指定的资源会被复制到编译路径下的docker目录里
在这里插入图片描述

2、根据Dockerfile定义,调用docker api即 dockerHost 标签配置的服务器构建镜像(可以设置成本地,如果本地有docker服务并开启了docker api)
3、docker api所在的服务器构建镜像完毕,将镜像推送到私有仓库

构建推送:clean - build - docker:build
在这里插入图片描述
日志:
在这里插入图片描述

分析

Dockerfile方式比pom里配置的方式相比,个人觉得更喜欢Dockerfile方式

文档

1、docker-maven-plugin文档
【spotify/docker-maven-plugin】 https://github.com/spotify/docker-maven-plugin

2、代码上传到了 【码云】 ,可点击查看
在这里插入图片描述
over~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值