Idea使用Docker插件实现maven打包自动构建镜像

Docker 开启TCP 服务
bash 复制代码
vi /lib/systemd/system/docker.service

改写以下内容

bash 复制代码
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
  • 重启服务
bash 复制代码
#重新加载配置文件
systemctl daemon-reload
#重启服务
systemctl restart docker.service

此时docker已经开放了2375端口,使用外部主机访问

http://docker:2375/info

IDEA 集成Docker
  • 安装Docker 插件

  • 配置docker服务地址

点击view->services,打开docker的操作面板

双击docker01可以看到此docker服务下镜像和容器

右击docker镜像,可以创建新的容器,并且可以监控容器日志输出,docker的日志收集是将容器内的标准输出以及错误输出重定向到了宿主机的某个文件中,这样就可以看到容器的运行信息了。

配置maven插件,实现打包后自动生成镜像并启动容器
  • 在maven中配置docker打包插件
xml 复制代码
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <!-- 镜像名称 guoweixin/exam-->
                    <imageName>${project.artifactId}</imageName>
                    <!--指定标签-->
                    <imageTags>
                        <imageTag>latest</imageTag>
                    </imageTags>
                    <!-- 基础镜像jdk 1.8-->
                    <baseImage>java</baseImage>
                    <!-- 制作者提供本人信息 -->
                    <maintainer>zdk=20477@sina.com</maintainer>
                    <runs>
                        <run>mkdir -p /opt/java/</run>
                    </runs>
                    <!--切换到/ROOT目录 -->
                    <workdir>/ROOT</workdir>
                    <cmd>["java", "-version"]</cmd>
                    <entryPoint>["java", "-jar", "${project.build.finalName}.jar"]</entryPoint>
                    <!-- 指定 Dockerfile 路径
                    <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
                    -->
                    <!--指定远程 docker api地址-->
                    <dockerHost>http://docker:2375</dockerHost>
                    <!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
                    <resources>
                        <resource>
                            <targetPath>/ROOT</targetPath>
                            <!--用于指定需要复制的根目录,${project.build.directory}表示target目录-->
                            <directory>${project.build.directory}</directory>
                            <!--用于指定需要复制的文件。${project.build.finalName}.jar指的是打包后的jar
                            包文件。-->
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>

这个插件的作用就是模拟一个Dockerfile,然后告诉docker服务打包一个镜像。

在cmd终端运行 mvn clean package docker:build命令可以构建一个镜像,其中clean package这两个是常用的插件命令,maven内置好了,而docker:build 这个是作用于package后的生命周期的build的阶段,作用就是将打好的jar包构建成一个镜像。


配置package的docker-build插件

当执行package生命周期的时候,设置goal目标,进行docker镜像的构建

xml 复制代码
<!--当执行mvn package 时,执行: mvn clean package docker:build -->
<executions>
	<execution>
		<id>build-image</id>
		<!--指定此插件在package阶段执行-->
		<phase>package</phase>
		<goals>
			<!--指定此插件的build的目标-->
			<goal>build</goal>
		</goals>
	</execution>
</executions>

配置上这个以后,只要每次进行package就可以自动生成新的镜像。

完整的pom.xml如下:

xml 复制代码
    <build>
        <finalName>app</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>


            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <!-- 镜像名称 guoweixin/exam-->
                    <imageName>${project.artifactId}</imageName>
                    <!--指定标签-->
                    <imageTags>
                        <imageTag>latest</imageTag>
                    </imageTags>
                    <!-- 基础镜像jdk 1.8-->
                    <baseImage>java</baseImage>
                    <!-- 制作者提供本人信息 -->
                    <maintainer>zdk=20477@sina.com</maintainer>
                    <runs>
                        <run>mkdir -p /opt/java/</run>
                    </runs>
                    <!--切换到/ROOT目录 -->
                    <workdir>/ROOT</workdir>
                    <cmd>["java", "-version"]</cmd>
                    <entryPoint>["java", "-jar", "${project.build.finalName}.jar"]</entryPoint>
                    <!-- 指定 Dockerfile 路径
                    <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
                    -->
                    <!--指定远程 docker api地址-->
                    <dockerHost>http://docker:2375</dockerHost>
                    <!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
                    <resources>
                        <resource>
                            <targetPath>/ROOT</targetPath>
                            <!--用于指定需要复制的根目录,${project.build.directory}表示target目录-->
                            <directory>${project.build.directory}</directory>
                            <!--用于指定需要复制的文件。${project.build.finalName}.jar指的是打包后的jar
                            包文件。-->
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
                <executions>
                    <execution>
                        <id>build-image</id>
                        <!--指定此插件在package阶段执行-->
                        <phase>package</phase>
                        <goals>
                            <!--指定此插件的build的目标-->
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>


        </plugins>
    </build>

添加上这个打包插件以后,每执行package操作,就会执行docker:build,从而根据配置信息再次根据最新打的jar包创建出一个镜像,然后可以在idea中运行了。

相关推荐
树码小子6 小时前
开启 IDEA 中的断言功能
android·java·intellij-idea
猫吃了源码8 小时前
k9s简介和安装
linux·docker·kubernetes
云原生指北9 小时前
Docker Sandboxes 上手:从安装到第一次跑 Agent
运维·docker·容器
ziyun66688810 小时前
Docker 容器化 Web 服务架构搭建与自动化运维项目
运维·docker·架构
编程令我快乐12 小时前
maven部分构建参数讲解
java·maven
骇客野人12 小时前
Docker Compose 部署多个独立 Jar 服务完整实操步骤
docker·容器·jar
云川之下14 小时前
【k8s】Docker inspect 命令
docker·容器·kubernetes
FlyWIHTSKY15 小时前
idea中集成claude功能
java·ide·人工智能·intellij-idea·cloudera
BIBI204915 小时前
Windows 下 Maven 安装与 VSCode 配置
java·windows·vscode·maven·环境搭建·安装教程
倔强的石头10616 小时前
飞牛OS部署Mtab:Docker搭建自托管书签导航并实现远程访问
运维·docker·容器