Spring Boot 构建 Docker 镜像多模式使用详解

简介: Spring Boot 构建 Docker 镜像多模式使用详解

1. Docker 镜像构建的基本原理

Docker镜像是Docker容器的只读模板,包含运行应用程序所需的所有依赖项和配置。构建Docker镜像的基本步骤如下:

  1. 编写Dockerfile:定义镜像构建步骤。
  2. 构建镜像:使用docker build命令创建镜像。
  3. 运行容器:使用docker run命令启动容器。

2. 基本模式构建 Docker 镜像

最常见的构建Docker镜像的方法是使用Dockerfile。以下是一个简单的示例,演示如何为Spring Boot应用构建Docker镜像。

2.1 编写 Dockerfile

首先,在Spring Boot项目的根目录下创建一个名为Dockerfile的文件,内容如下:

# 基础镜像
FROM openjdk:11-jre-slim
# 维护者信息
MAINTAINER YourName <yourname@example.com>
# 将jar包添加到容器中
ADD target/your-app.jar app.jar
# 运行jar包
ENTRYPOINT ["java", "-jar", "/app.jar"]
2.2 构建 Docker 镜像

在项目根目录下运行以下命令,构建Docker镜像:

mvn clean package
docker build -t your-app:latest .
2.3 运行 Docker 容器

使用以下命令运行Docker容器:

docker run -d -p 8080:8080 your-app:latest

3. 多阶段构建模式

多阶段构建可以有效减少最终镜像的体积,特别适用于包含多个构建步骤的复杂应用。以下是多阶段构建的示例:

3.1 编写 Dockerfile
# 第一阶段:构建阶段
FROM maven:3.8.4-openjdk-11 AS builder
WORKDIR /app
COPY . .
RUN mvn clean package -DskipTests
# 第二阶段:运行阶段
FROM openjdk:11-jre-slim
COPY --from=builder /app/target/your-app.jar app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
3.2 构建和运行 Docker 镜像

与基本模式相同,使用以下命令构建和运行Docker镜像:

docker build -t your-app:latest .
docker run -d -p 8080:8080 your-app:latest

4. 使用 Jib 构建 Docker 镜像

Jib是一个用于构建Docker和OCI镜像的Maven和Gradle插件,无需编写Dockerfile。以下是使用Jib的示例:

4.1 添加 Jib 依赖

pom.xml中添加Jib插件:

<plugin>
    <groupId>com.google.cloud.tools</groupId>
    <artifactId>jib-maven-plugin</artifactId>
    <version>3.1.4</version>
</plugin>
4.2 构建 Docker 镜像

使用以下命令构建Docker镜像:

mvn compile jib:dockerBuild -Dimage=your-app:latest
4.3 运行 Docker 容器

与前面的步骤相同,运行Docker容器:

docker run -d -p 8080:8080 your-app:latest

5. 使用 Spring Boot Maven 插件构建 Docker 镜像

Spring Boot Maven插件也提供了直接构建Docker镜像的功能。

5.1 添加插件配置

pom.xml中添加Spring Boot Maven插件的配置:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <image>
            <name>your-app:latest</name>
        </image>
    </configuration>
</plugin>
5.2 构建 Docker 镜像

使用以下命令构建Docker镜像:

mvn spring-boot:build-image
5.3 运行 Docker 容器

与前面的步骤相同,运行Docker容器:

docker run -d -p 8080:8080 your-app:latest

6. 总结

通过上述几种方法,我们可以方便地将Spring Boot应用打包成Docker镜像,并进行部署。无论是使用传统的Dockerfile、多阶段构建,还是使用Jib和Spring Boot Maven插件,都可以根据项目需求选择合适的方式。

相关文章
|
1天前
|
负载均衡 Java API
使用Spring Cloud构建Java微服务架构
使用Spring Cloud构建Java微服务架构
|
1天前
|
Java API 开发者
Spring Cloud Gateway中的GlobalFilter:构建强大的API网关过滤器
Spring Cloud Gateway中的GlobalFilter:构建强大的API网关过滤器
6 0
|
1天前
|
前端开发 JavaScript Java
使用Spring Boot和Thymeleaf构建动态Web页面
使用Spring Boot和Thymeleaf构建动态Web页面
|
1天前
|
Kubernetes Java 微服务
使用Spring Boot构建微服务架构
使用Spring Boot构建微服务架构
|
1天前
|
缓存 运维 Devops
阿里云云效操作报错合集之在构建过程中,Docker尝试从缓存中获取某个文件(或计算缓存键)时遇到了问题,该如何处理
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
1天前
|
Docker 容器
在 EAS 构建中使用其他 Docker 功能,如自定义 Dockerfile 或多阶段构建
在 EAS 构建中使用其他 Docker 功能,如自定义 Dockerfile 或多阶段构建
|
1天前
|
Kubernetes Java 微服务
使用Spring Boot构建微服务架构
使用Spring Boot构建微服务架构
|
2天前
|
IDE Java 机器人
Spring Boot中的多模块项目构建
Spring Boot中的多模块项目构建
|
Java Docker Spring
spring 代码中,解决docker环境变量传递问题
1,docker变量 在docker中定义变量,使用echo $Value 能直接在命令行中显示, 这个使用spring可以直接注入到代码当中。 php中有方便的代码直接获得环境变量,但是java用起来就麻烦点。 直接使用spring的value就行了。 2,代码 比如一个spring的用户登录action。 里面用docker配置了一个默认的admin登录
1759 0
|
5天前
|
Java
springboot自定义拦截器,校验token
springboot自定义拦截器,校验token
20 6