maven项目docker插件自动部署——jar包

本文介绍了如何使用io.fabric3的docker-maven-plugin插件,将Maven项目自动部署到Docker。内容包括POM文件和Assembly的配置,并提到了在Ubuntu和CentOS环境中的不同操作注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文例子地址:https://github.com/wangfei0904306/yeepay

本文使用插件: io.fabric3 的 docker-maven-plugin 插件

maven项目自动部署到docker,主要有根POM文件和Assembly两块配置,如图:


一、POM文件配置

<build>
		<finalName>${project.artifactId}</finalName>  <!--这里一定要定义生成的JAR包文件名-->
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>

			<!--Docker 插件-->
			<!-- 构建镜像:       mvn docker:build -->
			<!-- 启动镜像:       mvn docker:start -->
			<!-- 停止镜像:       mvn docker:stop  -->
			<!-- 删除镜像:       mvn -Ddocker.removeAll docker:remove  -->
			<!-- 查看镜像日志:    mvn docker:logs -->
			<!-- 镜像启动成功后,访问地址为: http://192.168.1.70:8881/ams-server -->
			<plugin>
				<groupId>io.fabric8</groupId>
				<artifactId>docker-maven-plugin</artifactId>
				<version>0.20.0</version>
				<extensions>true</extensions>
				<configuration>
					<dockerHost>http://192.168.0.54:2735</dockerHost>
					<images>
						<image>
							<name>iciyun/${project.artifactId}</name> <!--生成的image名-->
							<alias>${project.artifactId}</alias>
							<build>
								<from>java:8u40</from>
								<maintainer>john.doe@example.com</maintainer>
								<tags>
									<tag>latest</tag>
									<tag>${project.version}</tag>
								</tags>
								<ports>
									<port>8080</port>
								</ports>
								<volumes>
									<volume>/usr/src/myapp</volume>
								</volumes>
								<buildOptions>
									<shmsize>2147483648</shmsize>
								</buildOptions>

								<entryPoint>
									<!-- exec form for ENTRYPOINT -->
									<exec>
										<arg>java</arg>
										<arg>-jar</arg>  <!--启动参数-->
										<arg>/usr/src/myapp/${project.artifactId}.jar</arg>
									</exec>
								</entryPoint>

								<assembly>
									<mode>dir</mode>
									<basedir>/</basedir>
									<descriptor>assembly.xml</descriptor>
								</assembly>
							</build>
							<run>
								<namingStrategy>alias</namingStrategy>  <!--container全名规则-->
								<ports>
									<port>0.0.0.0:5555:8080</port> <!--端口映射-->
								</ports>
							</run>
						</image>
					</images>
				</configuration>
				<executions>
					<!-- 以下为插件与Maven声明周期做绑定,可选择使用 -->
					<!--<execution>-->
					<!--<id>build-docker-image</id>-->
					<!--<phase>package</phase>-->
					<!--<goals>-->
					<!--<goal>build</goal>-->
					<!--</goals>-->
					<!--</execution>-->
					<!--<execution>-->
					<!--<id>push-docker-image-to-registry</id>-->
					<!--<phase>deploy-goho</phase>-->
					<!--<goals>-->
					<!--<goal>push</goal>-->
					<!--</goals>-->
					<!--</execution>-->
				</executions>
			</plugin>

		</plugins>
	</build>

二、Assembly配置

注意Assembly.xml文件位置为上图中所示位置

Assembly.xml文件内容:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
    <id>${project.artifactId}</id>
    <files>
        <file>
            <source>target/${project.artifactId}.jar</source>
            <outputDirectory>/usr/src/myapp</outputDirectory>
            <destName>${project.artifactId}.jar</destName>
        </file>
    </files>
</assembly>

三、构建命令

mvn -f /var/lib/jenkins/workspace/springboot-docker-demo/pom.xml docker:stop -Ddocker.removeAll docker:remove docker:build docker:start
其中“/var/lib/jenkins/workspace/springboot-docker-demo/pom.xml”为POM文件的绝对位置

四、注意事项

Ubuntu中完美运行,CentOS中需要做额外处理,每次要先删掉原有的容器和镜像,类似处理命令如下:

docker stop unipay    1>/dev/null 2>&1 | exit 0
docker rm -f unipay    1>/dev/null 2>&1 | exit 0
docker rmi -f iciyun/unipay:0.0.1-SNAPSHOT    1>/dev/null 2>&1 | exit 0
docker rmi -f iciyun/unipay:latest    1>/dev/null 2>&1 | exit 0

深入学习的朋友: https://dmp.fabric8.io/#docker:build


docker maven plugin 是个简单的可以管理Docker容器maven插件,这个插件将会根据你的配置,在构建时启动容器,构建结束时停止容器并删除,如果本地找不到镜像,Docker自动去中央仓库下载。 简单示例:     com.ofbizian     docker-maven-plugin     1.0.0                                            busybox                                                      start-docker             pre-integration-test                              start                            所有可能配置的完整示例:     com.ofbizian     docker-maven-plugin     1.0.0              http://localhost:4243                                       dockerfile/redis                                      <![CDATA[                     {"Hostname":"",                         "PortSpecs":null,                         "User":"",                         "Tty":false,                         "OpenStdin":false,                         "StdinOnce":false,                         "Memory":0,                         "MemorySwap":0,                         "CpuShares":0,                         "AttachStdin":false,                         "AttachStdout":false,                         "AttachStderr":false,                         "Env":null,                         "Cmd":null,                         "Dns":null,                         "Volumes":null,                         "VolumesFrom":"",                         "Entrypoint":[                         ],                         "NetworkDisabled":false,                         "Privileged":false,                         "WorkingDir":"",                         "Domainname":"",                         "ExposedPorts":null,                         "OnBuild":null}                     ]]>                                                       <![CDATA[                     {"ContainerIDFile": null, "LxcConf": null, "Links": null, "PortBindings": {                         "6379/tcp": [                             {                                 "HostIp": "0.0.0.0",                                 "HostPort": "6379"                             }                         ]                     }, "Privileged": false, "PublishAllPorts": false}                     ]]>                                                            busybox                                                      start-docker             pre-integration-test                              start                                            stop-docker             post-integration-test                              stop                            标签:Docker
### Spring Boot 打 JAR 文件并部署Docker 容器 #### 准备工作 为了实现将 Spring Boot 项目JAR 文件并通过 Docker 进行容器化部署,需要完成以下几个核心步骤: --- #### 构建 Spring Boot 应用程序的 JAR 文件 通过 Maven 或 Gradle 工具可以轻松构建 Spring Boot 的可执行 JAR 文件。 对于基于 Maven项目,在项目的根目录下运行以下命令来生成 JAR 文件: ```bash mvn clean package ``` 这会清理旧的目标文件夹并将最新的应用程序编译为一个单独的 JAR 文件[^2]。默认情况下,JAR 文件会被放置在 `target` 目录中。 如果使用的是 Gradle,则可以通过以下命令生成 JAR 文件: ```bash gradle bootJar ``` --- #### 创建 Dockerfile 文件 创建一个名为 `Dockerfile` 的文件用于定义 Docker 镜像的构建过程。以下是典型的 Dockerfile 内容示例: ```dockerfile # 使用官方的基础 Java 镜像作为父镜像 FROM openjdk:17-jdk-slim # 将当前目录下的目标 JAR 文件复制到容器中的 /app/ 路径下 COPY target/*.jar /app/app.jar # 设置容器的工作目录 WORKDIR /app # 暴露应用所需的端口(假设 Spring Boot 默认监听8080) EXPOSE 8080 # 启动容器时自动运行的应用启动命令 ENTRYPOINT ["java", "-jar", "/app/app.jar"] ``` 上述配置指定了基础镜像、JAR 文件的位置以及服务暴露的端口号,并设置了容器启动后的入口点[^4]。 --- #### 构建 Docker 镜像 确保已经安装好 DockerDocker Compose 后,可以在终端中导航到含 `Dockerfile` 和生成好的 JAR 文件的目录,然后运行以下命令以构建自定义镜像: ```bash docker build -t springboot-app . ``` 此命令会在当前目录查找 `Dockerfile` 并按照其中的指令逐步构建一个新的 Docker 镜像,最终命名为 `springboot-app`[^3]。 --- #### 运行 Docker 容器 一旦成功构建了镜像,就可以利用该镜像启动新的容器实例。例如,下面这条命令将会以前台模式启动容器,并绑定主机上的某个端口与容器内部的服务端口相对应: ```bash docker run -d -p 9090:8080 --name my-springboot-container springboot-app ``` 这里的 `-d` 参数表示以后台方式运行;`-p` 则用来设置宿主机和容器之间的网络端口映射关系;而 `--name` 是给新创建出来的容器赋予唯一的名字以便后续管理操作更加方便快捷。 另外还可以加上数据持久化的选项比如这样: ```bash docker run -d \ -p 9090:8080 \ -v $(pwd)/logs:/app/logs \ --name my-springboot-container \ springboot-app ``` 这段脚本不仅实现了基本功能还增加了日志记录位置共享的功能使得调试更简单高效。 --- #### 自动化流程 (Optional) 为了进一步简化开发运维一体化(CI/CD),可以借助 Jenkins 来自动化整个流水线作业——从源码检出、测试验证直到最后一步制作镜像推送远程仓库都可通过插件支持无缝衔接起来。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值