使用maven插件自动化部署docker的坑(pom.xml部分配置篇)

前言:

        

学微服务(springcloud)之前,研究了一下docker集成maven自动部署,遇到了一堆问题,在此整理一下

首先,献上我与chatgpt的对话,这里面包含绝大多数问题(没了chatgpt我怎么活啊?(哭))

主要包含maven插件部分

https://chatgpt.com/share/c5c1b1ba-5775-4b33-8785-130306dc001e

主要包含linux部分

https://chatgpt.com/share/b2923509-f80d-4ea9-af81-7a88563a639e

参考博客:三种自动化构建Docker镜像的Maven插件使用 - 简书

我选择使用io.fabric8.docker-maven-plugin插件进行配置

io.fabric8.docker-maven-plugin

<build>
    <plugins>
        <plugin>
            <groupId>io.fabric8</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>0.37.0</version>
            <executions>
		<!--如果想在项目打包时构建镜像添加-->
				<execution>
				    <id>build-image</id>
                  <!--触发条件(即打包项目)-->
				    <phase>package</phase>
                  <!--触发内容(即build镜像)-->
				    <goals>
				         <goal>build</goal>
				    </goals>
				</execution>
			</executions>
			<configuration>
					<!-- Docker 远程管理地址-->
					<dockerHost>${docker.host}</dockerHost>
					<images>
						<image>
							<!--定义镜像名称-->
							<name>${project.name}:${project.version}</name>
							<!--定义镜像构建行为(这里的写法其实相当于写dockerfile)-->
							<build>
								<!--定义基础镜像-->
								<from>openjdk:17</from>
                              <!--定义参数,这里其实没必要,如果用到Dockerfile来定义镜像行为可能会用到-->
								<args>
									<JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
								</args>
								<!--定义哪些文件拷贝到容器中-->
								<assembly>
									<!--定义拷贝到容器的目录-->
									<targetDir>/</targetDir>
									<!--只拷贝生成的jar包-->
									<descriptorRef>artifact</descriptorRef>
								</assembly>
								<!--定义容器启动命令-->
								<entryPoint>["java", "-jar","/${project.build.finalName}.jar"]</entryPoint>
								<!--定义维护者-->
								<maintainer>idontnow</maintainer>
							</build>
						</image>
					</images>
			</configuration>
        </plugin>
    </plugins>
 </build>

坑:

        docker镜像名的命名规范:

                1,只能包含小写字母、数字、下划线 _ 和连字符 -

                2,必须以字母开头。

                3,长度范围在 4 到 30 个字符之间。

        这里说是只能包含小写字母,但是对版本名好像没限制,根据情况而定吧

扩展:dockerfile与pom.xml的联动

1,需要在项目的根目录新建名为“Dockerfile”的文本文件

2,编辑文本文件内容,这里将上面pom.xml中build内的配置转为Dockerfile的写法

# 该镜像需要依赖的基础镜像
FROM openjdk:17
# 将当前目录下的jar包复制到docker容器的/目录下
ADD ./hapancake-1.0.0-SNAPSHOT.jar /hapancake-1.0.0-SNAPSHOT.jar
# 声明服务运行在8090端口
EXPOSE 8090
# 指定docker容器启动时运行jar包
#COPY *.jar /hapancake-1.0.0-SNAPSHOT.jar
ENTRYPOINT ["java", "-jar","/hapancake-1.0.0-SNAPSHOT.jar"]
# 指定维护者的名字
MAINTAINER why

ADD的内容直接写死了,如果不想写死,想根据项目构建的内容决定,可以通过编写<args>标签实现

        在 Dockerfile 中使用 <args> 标签传递的参数,可以通过 ARG 指令来定义和使用这些参数。以下是一个示例,展示如何在 Dockerfile 中使用 Maven 配置中的 <args> 参数。

<build>
  <dockerFile>${project.basedir}/src/main/docker/Dockerfile</dockerFile>
  <args> 
    <JAR_FILE>${project.build.finalName}.jar</JAR_FILE> 
  </args> 
</build>

         在Dockerfile中:

# 该镜像需要依赖的基础镜像
FROM openjdk:17

# 定义一个名为 JAR_FILE 的构建参数,默认值为 hapancake-1.0.0-SNAPSHOT.jar
ARG JAR_FILE=hapancake-1.0.0-SNAPSHOT.jar

# 将构建参数 JAR_FILE 的值作为文件名
ADD ./${JAR_FILE} /${JAR_FILE}

# 声明服务运行在8090端口
EXPOSE 8090

# 指定docker容器启动时运行jar包
ENTRYPOINT ["java", "-jar", "/${JAR_FILE}"]

# 指定维护者的名字
MAINTAINER cold

        默认值会在构建项目的时候被定义的<agrs>内的同名变量取代

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值