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