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

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

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
随机主题
奢华无界 劳斯莱斯Black Badge库里南系列II诠释当代颠覆精神业内人士点评中超:观赏性提高,但节奏很慢,没接近现代足球!“钱江源”点亮“直播之光” 阿里公益在开化开设数字人才基地老牌工业镇走出“小巨人”, “小五金之乡”全球掘“金”|高质量发展调研行1894年, 18岁珍妃因得罪慈禧, 惨遭扒裤羞辱, 激烈反抗终致命丧黄泉DNF手游: 白嫖“赛丽亚的思念”称号, 新手练级注意事项经济学门类包括哪些专业国内首台甲醇双燃料低速机在中船发动机成功交验以案说法: 员工不服从合理调岗被辞退 用人单位无需赔偿1950年毛岸英牺牲, 9年后罗瑞卿密电任荣: 主席有一项任务交给你全新凯迪拉克XT5曝光,2.0T混动+贯穿大屏/尺寸加大/或于年内上市京东推京八条严抓考勤鼓励举报摸鱼, 打工人哭了英国官员: 英国不能承受在贸易问题上“冷落”中国的代价浅谈说说为何装机选i7 13700KF而非R7 7800X3D董军会见南非海军司令里程碑! 德约2-0完胜德国悍将旗开得胜, 生日夜手捧蛋糕乐开怀崔康熙两大嫡系夏窗驰援鲁能时间敲定, 能力已获认可, 值得期待越南经济崩盘! 重蹈日本80年代覆辙, 或成为亚洲第一个倒下的国家《DOTA2》游戏迎来 7.36 重磅更新: 首次推出先天技能、英雄命石加油站的汽油都藏在哪里?那么多的油,是怎么防止它发生危险的?宝马Skytop概念车视频泄露, 看上去是近年来最漂亮的宝马
最新回复(0)