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>[email protected]</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>[email protected]</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中运行了。

相关推荐
hackchen5 小时前
NexusTerminal一款视频移动端的webSSH
docker·云原生·eureka·web-ssh
木棉软糖5 小时前
【记录坑点问题】IDEA运行:maven-resources-production:XX: OOM: Java heap space
java·maven·intellij-idea
开开心心就好10 小时前
高效账号信息管理工具,可安全随机生成密码
javascript·安全·docker·智能手机·pdf·word·excel
谷新龙00111 小时前
docker compose部署kafka
docker·容器·kafka
ascarl201012 小时前
准确--CentOS 7.9在线安装docker
linux·docker·centos
David爱编程13 小时前
Docker Daemon 调优全解,打造高性能守护进程配置!
后端·docker·容器
酷爱码13 小时前
Maven 配置中绕过 HTTP 阻断机制的完整解决方案
java·http·maven
张童瑶14 小时前
Docker 下备份 Mariadb 数据库文件
数据库·docker·mariadb
大猩猩爱分享15 小时前
Mac安装docker desktop
macos·docker
forestsea15 小时前
Maven 多仓库治理与发布策略深度实践
java·maven