使用maven插件dockerfile-maven-plugin进行镜像的build和push

开篇之前,先看着2个帖子:
1、开启Docker的远程端口2375
https://shanhy.blog.csdn.net/article/details/89645254
2、阿里云镜像中心为示例(dockerhub或者私有镜像仓库都一样)
https://shanhy.blog.csdn.net/article/details/90812239

maven项目的关键配置pom.xml

	<properties>
		<java.version>1.8</java.version>
		<docker.image.prefix>nuggets</docker.image.prefix>
		<docker.registry>registry.cn-shanghai.aliyuncs.com</docker.registry>
	</properties>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
			<plugin>
				<groupId>com.spotify</groupId>
				<artifactId>dockerfile-maven-plugin</artifactId>
				<version>1.4.0</version>
				<configuration>
					<repository>${docker.registry}/${docker.image.prefix}/${project.artifactId}</repository>
 					<!-- <tag>${project.version}</tag> 不指定tag默认为latest -->
					<buildArgs>
						<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
					</buildArgs>
				</configuration>
			</plugin>
		</plugins>
	</build>

docker build 命令,将镜像推送到远程docker服务器

// 一行命令编译项目,并且进行 docker build,成功后,你就可以到docker服务器上使用 docker images 查看镜像了
$ DOCKER_HOST=tcp://139.200.456.789:2375 mvn clean package -Dmaven.test.skip=true dockerfile:build -Ddockerfile.tag=latest

docker push 命令,将远程docker服务器的镜像push到镜像仓库

$ DOCKER_HOST=tcp://139.196.73.191:2375 mvn dockerfile:push -Ddockerfile.username=[镜像仓库账号] -Ddockerfile.password=[镜像仓库密码]

如果你不想在命令行显示账号,你可以设置到maven的全局配置中。
例如:mvn goal -Ddockerfile.username=xxx -Ddockerfile.password=xxx

(END)

### 结合使用 `maven-assembly-plugin` Docker 进行项目打包容器化部署 #### 使用 Maven Assembly 插件准备应用包 Maven Assembly 插件能够创建自定义的分发包,这些包可以包含项目的二进制文件、依赖库以及其他资源。为了使应用程序能够在 Docker 容器内顺利执行,通常会先通过该插件来组装所需的全部组件。 ```xml <build> <plugins> <!-- 配置 assembly 插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.3.0</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>com.example.MainApp</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build> ``` 上述配置使得在执行 `mvn package` 命令时,除了常规的目标 JAR 文件外还会生成一个带有所有依赖关系的独立可执行 JAR 文件[^1]。 #### 利用 Docker 打包并发布镜像 一旦有了完整的应用程序包之后,则可以通过 Docker 来进一步将其封装成易于移植的容器映像。这里介绍两种方式: ##### 方法一:基于官方推荐的方式——Docker Maven Plugin 这是由 Fabric8 提供的一个强大的工具集的一部分,支持多种操作如构建、推送甚至管理 Kubernetes 资源等复杂任务。对于简单的场景来说,只需要关心如何把 Java 应用程序转换为 Docker 映像即可。 ```xml <!-- 添加到 pom.xml 中 --> <plugin> <groupId>io.fabric8</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.47.0</version> <configuration> <images> <image> <name>${docker.image.prefix}/${project.artifactId}:${project.version}</name> <build> <from>openjdk:alpine</from> <entryPoint> ["java","-jar","/app.jar"] </entryPoint> <assembly> <basedir>/</basedir> <inline> <files> <file> <source>${project.build.directory}/${project.build.finalName}-with-dependencies.jar</source> <outputDirectory>/</outputDirectory> <destName>app.jar</destName> </file> </files> </inline> </assembly> </build> </image> </images> </configuration> </plugin> ``` 这段 XML 片段展示了怎样利用 fabric8 的 docker-maven-plugin 将之前提到过的 jar 包嵌入到一个新的 Docker 映像里去,并指定入口命令让其可以直接启动服务[^5]。 ##### 方法二:采用 Spotify 开发的 plugin —— dockerfile-maven-plugin 另一种流行的选择是由 Spotify 维护的 dockerfile-maven-plugin ,它提供了更细粒度控制的能力,特别是当开发者想要完全掌控 Dockerfile 编写过程的时候非常有用。 ```xml <plugin> <groupId>com.spotify</groupId> <artifactId>dockerfile-maven-plugin</artifactId> <version>1.4.13</version> <executions> <execution> <id>default-cli</id> <goals> <goal>build</goal> <goal>push</goal> </goals> </execution> </executions> <configuration> <repository>${docker.image.prefix}/kjc/${project.artifactId}</repository> <tag>${project.version}</tag> <pullNewerImage>false</pullNewerImage> <buildArgs> <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE> </buildArgs> </configuration> </plugin> ``` 在此设置下,不仅指定了要使用的本地基础映像(不尝试拉取最新版本),还允许传递参数给 Docker 构建流程以便动态调整最终产物中的某些细节部分[^4]。 ---
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

catoop

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值