Maven项目如何打包成Docker镜像?三种常用插件详解

 更新时间:2026年07月20日 09:55:56   作者:贝克街的小码农  
想知道如何将Maven项目高效打包成Docker镜像吗?本文详细对比了docker-maven-plugin、jib-maven-plugin和spring-boot-maven-plugin三种方式,手把手教你从配置pom.xml到运行容器,帮你根据需求轻松选择最适合的Maven打包Docker镜像方案

使用 Maven 将项目打包成 Docker 镜像通常需要结合 Dockerfile 和 Maven 插件(如 docker-maven-pluginjib-maven-plugin)。

1. 准备工作

  • 安装 Docker:确保本地或服务器上已安装 Docker。
  • 创建 Spring Boot 项目:假设你已经有一个 Spring Boot 项目。

2. 使用docker-maven-plugin打包 Docker 镜像

(1)在pom.xml中添加插件

<build>
    <plugins>
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>1.2.2</version>
            <configuration>
                <imageName>${project.artifactId}:${project.version}</imageName>
                <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
                <resources>
                    <resource>
                        <targetPath>/</targetPath>
                        <directory>${project.build.directory}</directory>
                        <include>${project.build.finalName}.jar</include>
                    </resource>
                </resources>
            </configuration>
        </plugin>
    </plugins>
</build>

(2)创建 Dockerfile

src/main/docker 目录下创建 Dockerfile 文件:

# 使用官方的 Java 8 镜像作为基础镜像
FROM openjdk:8-jdk-alpine

# 设置工作目录
WORKDIR /app

# 将打包好的 JAR 文件复制到容器中
COPY target/myapp-0.0.1-SNAPSHOT.jar app.jar

# 暴露端口
EXPOSE 8080

# 启动应用
ENTRYPOINT ["java", "-jar", "app.jar"]

(3)打包并构建 Docker 镜像

运行以下 Maven 命令:

mvn clean package docker:build

(4)运行 Docker 容器

docker run -p 8080:8080 myapp:0.0.1-SNAPSHOT

3. 使用jib-maven-plugin打包 Docker 镜像

(1)在pom.xml中添加插件

<build>
    <plugins>
        <plugin>
            <groupId>com.google.cloud.tools</groupId>
            <artifactId>jib-maven-plugin</artifactId>
            <version>3.2.1</version>
            <configuration>
                <to>
                    <image>myapp:${project.version}</image>
                </to>
            </configuration>
        </plugin>
    </plugins>
</build>

(2)打包并构建 Docker 镜像

运行以下 Maven 命令:

mvn clean package jib:dockerBuild

(3)运行 Docker 容器

docker run -p 8080:8080 myapp:0.0.1-SNAPSHOT

4. 使用spring-boot-maven-plugin打包 Docker 镜像

(1)在pom.xml中添加插件

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <image>
                    <name>myapp:${project.version}</name>
                </image>
            </configuration>
        </plugin>
    </plugins>
</build>

(2)打包并构建 Docker 镜像

运行以下 Maven 命令:

mvn spring-boot:build-image

(3)运行 Docker 容器

docker run -p 8080:8080 myapp:0.0.1-SNAPSHOT

5. 总结

  • docker-maven-plugin:需要手动编写 Dockerfile,适合需要自定义镜像的场景。
  • jib-maven-plugin:无需 Dockerfile,直接构建镜像,适合简单场景。
  • spring-boot-maven-plugin:Spring Boot 官方支持,适合 Spring Boot 项目。

根据项目需求选择合适的插件,可以高效地将 Maven 项目打包成 Docker 镜像并部署到容器环境中。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 解决Java Redis删除HashMap中的key踩到的坑

    解决Java Redis删除HashMap中的key踩到的坑

    这篇文章主要介绍了解决Java Redis删除HashMap中的key踩到的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • Java框架MyBatis接口编程过程解析

    Java框架MyBatis接口编程过程解析

    这篇文章主要介绍了Java框架MyBatis接口编程过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • springBoot静态资源加载不到,并且配置了也不生效问题及解决

    springBoot静态资源加载不到,并且配置了也不生效问题及解决

    这篇文章总结了一个在Spring Boot 2.6.x版本中,由于路径匹配策略改变导致静态资源无法加载的问题,并提供了解决方案:通过配置类或在配置文件中设置路径匹配策略为AntPathMatcher,或者直接降级Spring Boot版本
    2025-02-02
  • Spring Boot的filter(过滤器)简单使用实例详解

    Spring Boot的filter(过滤器)简单使用实例详解

    过滤器(Filter)的注册方法和 Servlet 一样,有两种方式:代码注册或者注解注册,下面通过实例给大家介绍Spring Boot的filter(过滤器)简单使用,一起看看吧
    2017-04-04
  • Spring深入分析讲解BeanUtils的实现

    Spring深入分析讲解BeanUtils的实现

    java知识体系统有很多数据实体,比较常用的DTO、BO、DO、VO等,其他类似POJO概念太老了现在基本废弃掉了,本篇幅直接忽略,对于这几种数据实体各自代表的含义和应用场景先做一下简单描述和分析
    2022-06-06
  • SpringBoot整合SSO(single sign on)单点登录

    SpringBoot整合SSO(single sign on)单点登录

    这篇文章主要介绍了SpringBoot整合SSO(single sign on)单点登录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • java中Optional的使用详细解析

    java中Optional的使用详细解析

    这篇文章主要介绍了java新特性之Optional的详细解析,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • Java微服务事件与存储设计说明(含代码示例)

    Java微服务事件与存储设计说明(含代码示例)

    ava微服务架构的设计与优化随着企业系统的规模不断扩大,传统的单体应用架构已经无法满足高效开发、扩展性、容错性等需求,这篇文章主要介绍了Java微服务事件与存储设计说明的相关资料,需要的朋友可以参考下
    2026-06-06
  • idea如何查看某个分支,新增修改了哪些代码

    idea如何查看某个分支,新增修改了哪些代码

    在IDEA中查看某个分支的新增和修改代码,可以通过切换分支、点击Git分支名、找到master分支并右键选择Compare with来实现,在弹出的窗口中,可以查看新增、修改和删除的文件,并双击文件查看具体的代码对比
    2026-02-02
  • springboot整合ehcache 实现支付超时限制的方法

    springboot整合ehcache 实现支付超时限制的方法

    在线支付系统需要极高的稳定性,在有限的系统资源下,稳定性优先级要高于系统并发以及用户体验,因此需要合理的控制用户的支付请求。下面通过本文给大家介绍springboot整合ehcache 实现支付超时限制的方法,一起看看吧
    2018-01-01

最新评论