springbootdockerfile最佳实践

author author     2023-02-08     441

关键词:


  1. 最简单的Dockfile

这个 Dockerfile 非常简单,但它是运行 Spring Boot 应用程序所需要的一切,没有任何多余的装饰:只有 Java 和一个 JAR 文件。

FROM openjdk:8-jdk-alpine
ARG JAR_FILE=target/*.jar
COPY $JAR_FILE app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
  1. 使用用户权限降低风险
FROM openjdk:8-jdk-alpine
RUN addgroup -S spring && adduser -S spring -G spring
USER spring:spring
ARG JAR_FILE=target/*.jar
COPY $JAR_FILE app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
  1. 提高构建和启动时的性能

在Spring Boot JAR文件中,依赖项和应用程序资源之间存在清晰的分离,我们可以利用这一事实来提高性能。关键是在容器文件系统中创建层。这些层在构建时和运行时(在大多数运行时)都缓存,因此我们希望将最频繁更改的资源(通常是应用程序本身中的类和静态资源)分层在变化较慢的资源之后。

这个Dockerfile依赖于解压后的JAR包文件,所以需要一下命令配合:

mkdir -p target/dependency && (cd target/dependency; jar -xf ../*.jar)

解压后的目录:​​BOOT-INF​​ ​​META-INF​​ ​​org​

FROM openjdk:8-jdk-alpine  

# 由于验证码使用了本地的字体库 需要添加ttf-dejavu字体库
RUN apk --update add ttf-dejavu; \\
rm -rf /var/cache/apk/*

## 如果放开需要解决 写日志权限问题
#RUN addgroup -S spring && adduser -S spring -G spring
#USER spring:spring

ARG DEPENDENCY=target/dependency

COPY $DEPENDENCY/BOOT-INF/lib /app/lib
COPY $DEPENDENCY/META-INF /app/META-INF
COPY $DEPENDENCY/BOOT-INF/classes /app

EXPOSE 8080

# 直接使用启动类启动会比使用Jar包启动寻址更快
ENTRYPOINT ["java","-Duser.timezone=GMT+08","-cp","app:app/lib/*","cn.demo.Application"]

最后附上解压和构建镜像的命令脚本:

#mvn clean && mvn  -DskipTests=true package  
FILE=target/dependency
if [ -d "$FILE" ]; then
rm -f $FILE
fi

# 解压jar包的文件
mkdir -p $FILE && (cd target/dependency; jar -xf ../demo-1.0.0.jar)

# 构建镜像
docker build -t demo:1.0.0 .

平均堆栈身份验证 - 最佳实践

】平均堆栈身份验证-最佳实践【英文标题】:meanstackauthentication-bestpractice【发布时间】:2015-03-0103:04:35【问题描述】:我正在尝试找出构建身份验证系统的最佳实践,最简单的一个(基于用户名和密码)。我搜索了最佳实践并... 查看详情

DAO(数据访问对象)最佳实践 - 我看到的示例同时使用 DAO 和服务对象,这里的最佳实践是啥?

】DAO(数据访问对象)最佳实践-我看到的示例同时使用DAO和服务对象,这里的最佳实践是啥?【英文标题】:DAO(dataaccessobject)bestpractices-examplesIseeuseaDAOandaServicesobjectboth,whatisthebestpracticehere?DAO(数据访问对象)最佳实践-我看到的... 查看详情

有哪些 OOoBasic 最佳实践?

】有哪些OOoBasic最佳实践?【英文标题】:WhataresomeOOoBasicbestpractices?【发布时间】:2009-06-0514:51:46【问题描述】:编写OOoBasic程序的最佳实践有哪些?到目前为止,我知道你应该使用XRay,但其中也有很多奇怪的小怪癖。【问题讨... 查看详情

activity的最佳实践(代码片段)

文章目录Activity的最佳实践知晓当前是在哪一个Activiy随时随地退出程序启动Activity的最佳写法Activity的最佳实践知晓当前是在哪一个Activiy创建一个BaseActivity类,继承AppCompatActivity类.重写onCreate方法openclassBaseActivity:AppCompatActivity()overr... 查看详情

设置布尔标志的最佳实践

】设置布尔标志的最佳实践【英文标题】:Bestpracticeforsettingbooleanflags【发布时间】:2015-07-1411:49:54【问题描述】:我正在寻找有关拥有一个具有标志的类的最佳实践,该标志决定是否可以对该类执行操作。整个类将在WCFREST服务... 查看详情

dockerfile最佳实践

Dockerfile最佳实践本文是Docker官方文档docs/archive:v1.1中BestpracticesforwritingDockerfiles的理解和翻译。包含了Docker官方对编写Dockerfile的最佳实践和建议。这些建议是为了让你写出高效易用的Dockerfile。Docker官方强烈建议你遵从这些建议(... 查看详情

解雇 UIAlertController(最佳实践)

】解雇UIAlertController(最佳实践)【英文标题】:DismissalofUIAlertController(bestpractice)【发布时间】:2014-08-1712:56:35【问题描述】:当像这样使用UIAlertController时:varalert=UIAlertController(title:"CoreLocation",message:"LocationServicesDisabled!",pref 查看详情

javascript最佳实践(代码片段)

查看详情

redis最佳实践经验总结

                      查看详情

markdowndevops最佳实践(代码片段)

查看详情

mongodb最佳实践经验总结

                    查看详情

textlaravel最佳实践(代码片段)

查看详情

csscss最佳实践(代码片段)

查看详情

markdownfirebasefirestore最佳实践(代码片段)

查看详情

textrest最佳实践(代码片段)

查看详情

分析网页的最佳实践

】分析网页的最佳实践【英文标题】:Bestpracticeforprofilingwebpages【发布时间】:2010-10-1813:52:13【问题描述】:我正在尝试在我的应用程序中配置页面。我也想请教一些最佳实践来完成这项工作早期开发者使用工具作为Chrome开发者... 查看详情

jQuery 标准和最佳实践 [关闭]

】jQuery标准和最佳实践[关闭]【英文标题】:jQueryStandardsandBestPractice[closed]【发布时间】:2010-11-1718:02:38【问题描述】:我目前负责将jQuery的使用推广到我们公司内的Web开发人员社区。其中一部分涉及展示课程,但另一部分涉及... 查看详情

Java 数据绑定最佳实践

】Java数据绑定最佳实践【英文标题】:JavaDatabindingbestpractices【发布时间】:2011-03-0904:17:48【问题描述】:即使我不是Java新手,我也只在学校/大学环境中使用过它,所以我不了解企业中使用的所有最佳实践。特别是我现在正在... 查看详情