使用Dockerfile Maven插件
我们常见开源项目中使用的Docker Maven插件是com.spotify:docker-maven-plugin
。可用版本信息见Github。
通过其介绍可知该插件已经不再推荐使用,取而代之的是com.spotify:dockerfile-maven-plugin
,Maven中央仓库,Github地址。
使用该插件可以在mvn
命令中直接构建出Docker镜像和完成推送等。
dockerfile-maven-plugin
要求用户必须提供Dockerfile用于构建镜像,从而将Docker镜像的构建依据统一到Dockerfile上,这与过时的docker-maven-plugin
是不同的。
该插件的开源主页提供了丰富的参考资料:
使用该插件时,有一些注意事项
- 该插件依赖一台装有Docker daemon的Host完成镜像的构建
- 由于该插件需要访问Docker Host,因此要求Docker Host打开TCP管理端口,并允许访问
- 使用该插件的机器需要配置
DOCKER_HOST
选项,指向Docker Host对应端口 - 该插件构建和发布镜像依赖于镜像仓库,需要用户提供镜像仓库的登录信息,支持POM设置和Settings设置
Docker Host开启TCP管理端口
vim /usr/lib/systemd/system/docker.service
找到ExecStart=
所在的那一行,在之后添加:
-H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375
重新加载并重启Docker,确认端口2375是否启用:
systemctl daemon-reload
systemctl restart docker
netstat -an | grep 2375
注意
- 这种方法不使用TLS
- 还要根据Linux发行版的具体防火墙机制,开发上述管理端口供外部可靠主机访问
客户端配置相关参数
Windows下
set DOCKER_HOST=tcp://x.x.x.x:2375
使用TLS时,更全面的参数设置,比如:
SET DOCKER_TLS_VERIFY=1
SET DOCKER_HOST=tcp://192.168.0.100:2376
SET DOCKER_CERT_PATH=C:\Users\kevin\.docker\machine\machines\remote-docker-host
SET DOCKER_MACHINE_NAME=remote-docker-host
请参考:
https://www.kevinkuszyk.com/2016/11/28/connect-your-docker-client-to-a-remote-docker-host/
POM方式配置Registry认证
构建镜像免不了获取基础镜像,需要获得指定Registry的访问权限。
可以将登录信息放在POM中实现认证
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>${version}</version>
<configuration>
<username>repoUserName</username>
<password>repoPassword</password>
<repository>${docker.image.prefix}/${project.artifactId}</repository>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
与认证相关的是其中的username
和password
元素,
repository
是目标Docker Registry,是获取基础镜像,上传镜像产品的地方。
Settings方式配置Registry认证
该方法将认证信息存放在Maven的Settings文件中:
<servers>
<server>
<id>docker-repo.example.com:8080</id>
<username>me</username>
<password>mypassword</password>
</server>
</servers>
然后在POM的插件配置中,如下配置:
<configuration>
<repository>docker-repo.example.com:8080/organization/image</repository>
<tag>latest</tag>
<useMavenSettingsForAuth>true</useMavenSettingsForAuth>
</configuration>
注意useMavenSettingsForAuth
元素说明认证信息从Settings获取,要求repository
对应的Registry必须在Settings中有认证配置。
命令行指定认证信息
这种方法不在POM和Settings中保存认证信息,而是在构建的mvn
命令中动态输入Registry的用户名和密码 :
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>${version}</version>
<configuration>
<repository>${docker.image.prefix}/${project.artifactId}</repository>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
构建命令:
mvn GOAL -Ddockerfile.username=... -Ddockerfile.password=...
插件配置
先看一个基本的使用样例:
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>${dockerfile-maven-version}</version>
<executions>
<execution>
<id>default</id>
<goals>
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>
<configuration>
<repository>spotify/foobar</repository>
<tag>${project.version}</tag>
<dockerfile>Dockerfile</dockerfile>
<contextDirectory>${project.basedir}</contextDirectory>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
execution
指定了该插件build
和push
两个目标使用默认绑定,默认的,build
和tag
目标绑定到package
阶段,push
目标绑定到deploy
阶段,这里不涉及tag
目标。tag
元素指定镜像的tag,这里使用Maven模块的版本号;target/${project.build.finalName}.jar
为项目构建生成的JAR包路径- 可以使用
dockerfile
元素指定Dockerfile的位置,上例中为和POM在同级目录;使用contextDirectory
元素指定Docker构建上下文目录,上例中是该Maven项目的根目录。 buildArgs
元素指定了传递给Dockerfile的参数,比如上例中的JAR_FILE
,相应的,Dockerfile中就可以使用该参数:
# ...
ARG JAR_FILE
COPY ${JAR_FILE} /var/app.jar
#...
注意到我们在Dockerfile中只需声明JAR_FILE
而不用手动赋值,即可在后面的构建指令中使用。
跳过插件目标
如果要临时跳过所有的Dockerfile相关的目标,执行如下Maven命令:
mvn clean install -Ddockerfile.skip
如果只是想跳过某一个goal,执行如下Maven命令:
mvn clean package -Ddockerfile.build.skip
mvn clean package -Ddockerfile.tag.skip
mvn clean deploy -Ddockerfile.push.skip
一些可以参考的资源:
https://blog.csdn.net/taiyangdao/article/details/79817787#commentsedit
https://www.callicoder.com/spring-boot-docker-example/
https://spring.io/guides/gs/spring-boot-docker/
使用Dockerfile Maven插件的更多相关文章
- 使用Maven插件构建Spring Boot应用程序镜像
使用Maven插件构建Spring Boot应用程序的Docker镜像. 环境准备 1.Linux系统 2.安装JDK,Maven 3.安装Docker 应用实践 1.在应用程序根目录下添加Docke ...
- 使用maven插件构建docker镜像
为什么要用插件 主要还是自动化的考虑,如果额外使用Dockerfile进行镜像生成,可能会需要自己手动指定jar/war位置,并且打包和生成镜像间不同步,带来很多琐碎的工作. 插件选择 使用比较多的是 ...
- 使用maven插件dockerfile-maven-plugin生成Docker镜像并推送到镜像仓库
1.引入maven插件 <build> <plugins> <plugin> <groupId>com.spotify</groupId> ...
- Maven插件构建Docker镜像
背景 微服务架构下,微服务在带来良好的设计和架构理念的同时,也带来了运维上的额外复杂性,尤其是在服务部署和服务监控上.单体应用是集中式的,就一个单体跑在一起,部署和管理的时候非常简单,而微服务是一个网 ...
- SpringBoot中使用Maven插件,上传docker镜像
开启docker远程端口 我上一篇里面写了,这里暴露的路径: 18.16.202.95:2375 简单构建 配置pom.xml文件 在properties中增加一行指定远程主机的位置 <prop ...
- 使用Docker Maven 插件进行镜像的创建以及上传至私服
1.在进行服务容器化部署的时候,需要将服务以及其运行的环境整个打包做成一个镜像,打包的过程有两种办法,第一种是首选通过maven打成jar包,然后再编写dockerfile,执行docker buil ...
- 安装eclipse的maven插件
我们团队用maven来管理项目需要的库文件,其实以前都没听过maven,第一次接触这个,师兄要我直接去装下这个,开始以为还挺简单的,没想到中间遇到了一些小麻烦,现在把我成功安装maven的过程分享下, ...
- eclipse内下载及配置maven插件(转)
本文介绍Maven的安装和配置,同样适用于eclipse 1.首先需要安装jdk,eclipse(废话!). 然后到maven官网下载maven,http://maven.apache.org/dow ...
- (十三)Maven插件解析运行机制
这里给大家详细说一下Maven的运行机制,让大家不仅知其然,更知其所以然. 1.插件保存在哪里? 与我们所依赖的构件一样,插件也是基于坐标保存在我们的Maven仓库当中的.在用到插件的时候会先从本地仓 ...
随机推荐
- (纯js)如何不刷新网页就能链接新的js文件
如何不刷新网页就能链接新的js文件,其实在HTML语言中已经有相关的函数了,就是再添加一个<script src=.....></script>. 函数叫document.bo ...
- String.trim的作用
Java的字符串处理方法trim是如何改变字符串的?下面是一个例子: @Test public void testTrim() { String test = "origin"; ...
- Redmine Notes
Mandatory authenticaion: login as Administrator, Settings -> Authentication -> Check "Aut ...
- iOS开发之蜂窝布局—Swift
前言 最近项目中用到了类似蜂窝的六边形布局,在这里分享出来抛砖引玉,供大家参考学习.本文提供了2种思路实现效果,第一种方式使用UICollectionView实现,第二种方式使用UIScrollVie ...
- kivy之Button常用属性实操练习
kivy提供了Button按钮一系列属性来改变样式,下面列了常用的一些Button属性并用实操案例进行演练学习. 新建一个main.py,内容代码如下: from kivy.app import Ap ...
- 013 PCIe体系结构的组成部件
一.PCIe体系结构的组成部件 PCIe总线作为处理器系统的局部总线,其作用与PCI总线类似,主要目的是为了连接处理器系统中的外部设备,当然PCIe总线也可以连接其他处理器系统.在不同的处理器系统中, ...
- C#/VB.NET 将PDF转为OFD
OFD,全称Open Fixed-layout Document ,是一种可存储.读取以及编辑的国家标准版式的电子文档格式,属于中国的一种自主文件格式,在安全性上有可靠保证.为突破国外技术在我们软硬件 ...
- 带头撸抽奖系统,DDD + RPC 开发分布式架构!
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.咋,撸个项目? 总有粉丝伙伴问傅哥,有没有能上手练习技术的项目,现在学了这么多技术知识.看 ...
- 网关服务Kong和konga介绍安装使用教程
介绍 Kong是一款基于OpenResty(Nginx + Lua模块)编写的高可用.易扩展的,由Mashape公司开源的API Gateway项目.Kong是基于NGINX和Apache Cassa ...
- C#10在List, Queue 以及Stack中使用EnsureCapacity方法来提升性能
简介 在今天的文章中,我们将介绍 C# 10 中引入的一项新功能.这是已添加到 List.Queue 和 Stack 集合中的 EnsureCapacity 方法.我们将讨论为什么我们应该使用这个方法 ...