Spring Boot 应用 Docker 化的 8 个最佳实践

哥们看看码农2024-03-30 11:13:08  115

Docker 在现代软件开发中起着举足轻重的作用,Spring Boot 应用程序对其影响并不陌生。现在,经典的借口,“它在我的机器上工作”有了一个新朋友:Docker。通过遵循最佳实践,您可以确保 Spring Boot 应用程序的 Docker化过程顺利高效。

在本文中,我们将探讨最佳实践,并提供示例来指导您完成 Spring Boot 应用程序的 Docker化过程。

这一次,我们将改变方式——我们将从实际实现开始,然后回过头来涵盖理论。这种方法使我们能够在浏览时将理论直接与示例联系起来。

我们有一个标准的 Spring Boot 应用程序,现在,我们将在坚持最佳实践的同时对其进行Docker化。

Docker化Spring Boot 应用程序

# Stage 1: Build Step

FROM maven:3.8.4-openjdk-11-slim AS build

WORKDIR /app

# Copy only the POM file to cache dependency

COPY pom.xml .

RUN mvn dependency:go-offline

# Copy the rest of the application source code and build

COPY src src

RUN mvn clean package -DskipTests

# Stage 2: Final Steps

FROM openjdk:11.0.12-jre-slim

WORKDIR /app

# Create a non-root user for running the application

RUN adduser --disabled-password --gecos '' springuser

USER springuser

# Copy the WAR file from build stage

ARG VERSION=0.0.1

COPY --from=build /app/target/demo-${VERSION}-SNAPSHOT.war app.war

# Expose the application port

EXPOSE 8080

# Running command, specify resource constraints

CMD ["java", "-Xmx256m", "-jar", "app.war"]

HELP.md

target/

!.mvn/wrapper/maven-wrapper.jar

!**/src/main/**/target/

!**/src/test/**/target/

### STS ###

.apt_generated

.classpath

.factorypath

.project

.settings

.springBeans

.sts4-cache

### IntelliJ IDEA ###

.idea

*.iws

*.iml

*.ipr

### NetBeans ###

/nbproject/private/

/nbbuild/

/dist/

/nbdist/

/.nb-gradle/

build/

!**/src/main/**/build/

!**/src/test/**/build/

### VS Code ###

.vscode/

### Git ###

.git/

### Docker related ###

Dockerfile

.dockerignore

构建映像并运行容器

我们将通过运行 docker build --build-arg VERSION=0.0.1 -t spring-boot-demo-app .来启动使用上述 Dockerfile 创建 Docker 映像。

通过运行docker images命令来验证映像是否已创建。

一旦我们有了映像,我们就可以运行容器,通过运行 docker run -p 8080:8080 --name spring-boot-demo-app-container spring-boot-demo-app.

就是这样,您的应用程序应该在端口 8080 上运行。

现在,让我们深入了解我们在上述代码中采用的最佳实践。

最佳实践

选择官方和经过验证的镜像

在对 Spring Boot 应用程序进行 Docker 化时,我们从与 Java 和 Spring Boot 相关的官方和经过验证的基础映像开始。例如,我们选择了 maven 和 openjdk 作为我们的用例。

选择特定镜像版本

为了增强可预测性,我们选择显式图像标记,而不是依赖最新标记,以确保稳定性。

Choose lightweight images 选择轻量级图像

我们选择较小的基础镜像,如高山或纤薄,以增强便携性并减少脆弱性。

优化镜像层缓存

构建 Dockerfile 以优化缓存涉及从最少到最频繁的更改排列命令。例如,我们首先只复制pom.xml文件,然后安装依赖项,复制源代码,最后打包它。

利用 .dockerignore 文件

使用过 Git 的人一定熟悉这个概念。通过使用 .dockerignore 文件修剪不必要的文件来减小图像大小并提高生成性能。

采用多阶段构建

使用多阶段构建优化效率并最小化最终映像大小,确保简化的 Docker 化应用程序。在第一阶段,我们使用 Maven 编译 Spring Boot 应用程序,随后,在第二阶段,我们使用 JRE 部署它,利用初始阶段生成的 WAR 文件。

用户权限管理

坚持最小权限原则,避免以 root 用户权限运行容器,增强安全性。例如,我们建立了一个名为springuser并转换到其使用的用户。

内存限制

在 Docker CMD 中为 Spring Boot 应用程序设置内存约束,指定 Xmx 值,例如,Xmx256m 表示 256 MB。

总而言之,通过浏览这些示例,您已经深入了解了为 Spring Boot 应用程序量身定制的 Docker 最佳实践。Docker化 不一定很复杂;这是关于做出明智的选择。因此,通过这些做法,请继续对应用程序进行Docker化。

转载此文是出于传递更多信息目的。若来源标注错误或侵犯了您的合法权益,请与本站联系,我们将及时更正、删除、谢谢。
https://www.414w.com/read/72386.html
0
最新回复(0)