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

关注我,回复关键字“spring”免费领取Spring学习资料

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 上运行。

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

欢迎关注公众号:SpringForAll社区(spring4all.com),专注分享关于Spring的一切!回复“加群”还可加入Spring技术交流群!

最佳实践 

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

在对 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化。

给大家推荐我们团队开发的Chrome插件:YouTube中文配音。如果您跟我们一样,热爱看国外的视频学习前沿知识或者其他内容,该插件可以很好的帮助您讲外语视频一键转化为中文视频,官网:https://www.youtube-dubbing.com/




END



IDEA 源码阅读利器,太好用了~
Spring Boot 接口防抖(防重复提交),轻松搞定
写出屎山代码的 12 个技巧 ,一定得会 !
Java 22 正式发布,一文了解全部新特性

高质量交流群,关注:SpringForAll,回复关键词:加群

相关推荐

  • 4 个 yyds 的 Java 框架!
  • 美团招聘
  • 告别信息过载:大模型驱动的搜索与推荐,精准定位用户需求
  • 直播预告| 智能运维,如何让中小企业数据库管理更高效?
  • 从0到1,聊聊货拉拉如何搭建数据指标体系
  • Meta 如何将缓存一致性提高到 99.99999999
  • QCon全球软件开发大会(北京站)2024 优秀出品人与明星讲师名单揭晓
  • 独立站如何摆脱系统不稳定的“漏洞”?这家企业做到了!
  • 数据库的夏天!2024可信数据库发展大会如约而至,邀请你来!| Q推荐
  • 关于 Tab 与空格之争,暴躁老哥 Linus 又有新指示!
  • Mistral 不相信AGI,开源大模型CEO发出警告,科技带不来“新造的人”
  • 侯毅张勇收购盒马传闻不实;英伟达大跌10%;用于Llama3训练的高质量数据集首次公开!
  • 【每周一课#06】MidJourney 应用实战
  • 中科曙光董事长李国杰院士被证监会立案调查:涉嫌违法炒股
  • 奖金丰厚!KDD Cup 2024 检索增强生成CRAG挑战赛正式启动
  • CVPR 2024 | 知识蒸馏中的Logit标准化:辅助logit-based KD算法稳定涨点
  • Meta提出全新文档级嵌入框架,利用LLM来增强信息检索能力
  • 「空想AGI」闹剧何时休?Science专栏:对AI前景预测过于乐观
  • 小洞不补,大洞吃苦:西交、麦马开源全新「拖动式编辑」框架&数据集
  • 2023年AAAS Fellow名单出炉!信息计算领域:浙大教授、中科大校友当选