Docker 11 IntelliJ IDEA 构建Docker镜像

Maven插件

1. Spring Boot Maven打包插件内置的 build-image

官方文档:https://docs.spring.io/spring:imageboot/docs/current/maven-plugin/reference/htmlsingle/#build-
Sprigg Boot 2.3版本后默认集成了用于构建 Maven 镜像的插件,只要是Spring Boot项目,就可以直接使用,前提是本地环境中安装了 Docker。

命令:
mvn spring-boot:build-image

拓展配置:

相当于把Dockerfile文件里的配置内容写进了pom.xml里

<plugin>
  <configuration>
    <groupId>ong.springframework.boot</groupId>
    <artifactId>springlboot-maven-plugin</artifactId>
    <!--指定打包后的镜像名-->
    <imageName>${groupId)/${proiect.artifactId):${project.version}</imageName>
    <docker>
      <!--配置发布的仓障信息-->
      <publishRegistry>
        <url>htte://192.168.113.121:5e0e</url>
        <username>admin</username>
        <password>wolfcode</password>
      </publishRegistry>
    </docker>
  </configuration>
</plugin>

2. Google的Jib-maven-plugin

Jib是一个Maven和Gradle插件,用来创建Docker镜像。它最大的特点是,你的本地可以没有Docker也可以进行构建,同样也不需要编写Dockerfile文件,不用改动代码,甚至不用修改pom.xml文件,运行如下命令即可:

mvn compile com.google.cloud.tools:jib-maven-pluain:2.3.0:dockerBuild

Springboot-maven-plugin 和 Jib-maven-plugin的封装程度高,意味着灵活性,可定制化操作的配置就低,不好定制化调整。
自定义镜像的目的就是把那些过度封装的东西打碎,然后按照自己的理念进行定义。

3. Spotify 的 dockerfile-maven-plugin

专门基于Dockerfile构建镜化的插件,也是目前市面上用的比较多的镜像构建方式之一

1. Dockerfile

## 基础镜像
## AdoptopenJDK 停止发布 OpenJDK 二进制,而Eclipse Temurin 是它的延伸,提供更好的稳定性
FROM eclipse-temurin:8-jre

#作者
MAINTAINER xiaoliu <liugang@wolfcode.cn>

# 定义参数,实际设值是在pom.xml中<buildArgs>中被设置
ARG JAR_FILE

# 创建并进入工作目录
RUN mkdir -p /wolfcode
WORKDIR /wolfcode

## maven 插件构建时得到 buildArgs 种的值
COPY ${JAR_FILE} app.jar

##设置TZ时区
##设置 JAVA OPTS 环境变量,可通过 docker run -e "JAVA_OPTS="进行覆盖
ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms256m -Xmx256m"

## 暴露端口
EXPOSE 8080

# 容器启动命令# CMD 第一个参数之后的命令可以在运行时被替换
CMD java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar app.jar

ENTRYPOINT java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar app.jar

# 如何在执行docker时,通过启动命令参数给docker run 动态传值,CMD 会覆盖第一个参数之后的所有命令;而ENTRYPOINT 不会覆盖替换,而是追加。也就是说上面的命令CMD会变为:
CMD java -Dserver.port=9999

# ENTRYPOINT 追加
ENTRYPOINT java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar app.jar -Dserver.port=9999

docker run xxxx java_server -Dserver.port=9999

2. pom.xml

<plugins>
  <!-- 不仅仅可以构建镜像,还可以让不能执行的jar包变成可执行的jar包 -->
  <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
  </plugin>
  
  <plugin>
    <groupId>com.spotify</groupId>
    <artifactId>dockerfile-maven-plugin</artifactId>
    <version>1.4.13</version>
    <executions>
      <execution>
        <id>default</id>
        <!--自定义构建、推送命令-->
        <goals>
          <goal>build</goal>
          <goal>push</goal>
        </goals>
      </execution>
    </executions>
    <configuration>
      <!--打包后的完整像名:仓库路径/组织/镜像名-->
      <repository>192.168.113.121:5000/wolfcode/${project.artifactId}</repository>
      <!--镜像版本号-->
      <tag>${project.version}</tag>
      <!--读取settings.xml文件中的认证信息-->
      <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
      <buildArgs>
        <!--jar所在目录, 和Dockerfile中的JAR_FILE相对应 -->
        <JAR_FILE>target/${project.artifactId}-${project.version}.jar</JAR_FILE>
      </buildArgs>
    </configuration>
  </plugin>
</plugins>

3. setting.xml

pom.xml 中设置了true, 所以要在maven中设置仓库

<servers>
  <server>
    <id>192.168.113.121:5000</id>
    <username>admin</username>
    <password>wolfcode</password>
  </server>
</servers>

打包java 项目jar包,报错:
【问题解决】java.io.FileNotFoundException: \.\pipe\docker_engine (系统找不到指定的文件。)解决方案:
https://blog.csdn.net/qq_43437874/article/details/107198498

posted @ 2026-09-23 15:18  超轶绝尘  阅读(4)  评论(0)    收藏  举报