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中运行了。

相关推荐
IT_Octopus10 小时前
triton backend 模式docker 部署 pytorch gpu模型 镜像选择
pytorch·docker·triton·模型推理
pengzhuofan11 小时前
第10章 Maven
java·maven
wudl556612 小时前
Docker 常用命令
docker·容器·eureka
百锦再12 小时前
对前后端分离与前后端不分离(通常指服务端渲染)的架构进行全方位的对比分析
java·开发语言·python·架构·eclipse·php·maven
选与握13 小时前
ubuntu22 docker安装ros1 noetic
docker·ros1
wuyunhang12345613 小时前
Docker----快速入门
docker·容器·架构
liliangcsdn14 小时前
docker环境如何基于python操作mysql关系数据库
docker·容器
java_logo15 小时前
Docker 部署微服务项目保姆级教程
java·运维·docker·微服务·容器·eureka·架构
wb0430720115 小时前
如何开发一个 IDEA 插件通过 Ollama 调用大模型为方法生成仙侠风格的注释
人工智能·语言模型·kotlin·intellij-idea
冲上云霄的Jayden17 小时前
修改 Docker 容器中 MySQL 8.0 默认编码为 utf8mb4_unicode_ci
utf-8·mysql·ci/cd·docker·utf8mb4