【问题标题】:How to reduce docker image size for Java application如何减少 Java 应用程序的 docker 镜像大小
【发布时间】:2021-05-03 20:25:26
【问题描述】:

我有以下 dockerfile 代码,但超过 500mb 的图像太大了。我尝试使用多阶段构建以减小大小,但之后 kubernetes 部署将无法正常工作。

FROM openjdk:8
ADD target/name_id.jar name_id.jar
EXPOSE 8080
ENTRYPOINT [ "java","-jar","name_id.jar" ]

有了这个文件,它就可以工作了。有人能帮我吗? 对于项目本身,使用了 maven 和 springboot。如果我更改代码中的某些内容,我还必须每次都清理安装 jar。

【问题讨论】:

  • 您的基础映像 openjdk:8 仅 509 MB。
  • 那么如何减少呢?

标签: java docker java-8 docker-multi-stage-build


【解决方案1】:

你能用openjdk:8-alpine吗,基础镜像大小为144.9MB。

使用下图缩小尺寸 • openjdk:8-jre-alpine:84 MB

或者您也可以尝试分别安装 5 MB 的 alpine os 和 openjdk 并检查大小

【讨论】:

  • 感谢您的回答,但这不是很高吗?我只使用一个带有一些业务逻辑的 Rest api 作为微服务。
  • 嘿,非常感谢你,现在图像尺寸变小了。但是有没有办法使用多阶段构建变得更少?我对此比较陌生。
【解决方案2】:

就个人而言,当我想到最小化 docker 镜像时,我想到了两件事

  1. 基础图片
  2. 多阶段构建

让我试着回答你的问题 我会使用小的 jdk 图像,即 openjdk:8-alpine 如果我想在 Dockerfile 中创建 jar 文件并执行它,我会使用它。在你的情况下,你只想使用一个已经存在的 jar 文件。

由于您已经拥有并想要使用名为 name_id.jar 的 jar 文件, 然后你只需要 java 运行时环境,即 openjdk:8-jre-alpine 而不是 openjdk:8-alpine

【讨论】:

  • 其实我很害怕听说过第二种方法。我将如何在 docker 中创建 jar 文件?每次我更改某些内容时,我都必须 mvn clean 和 mvn install 项目以便生成 jar。
  • 我需要更多关于您的项目的背景信息。一般来说,既然你说它是一个 maven 项目,并且想在 dockerdile 中创建 jar,这就是我推荐的
  • 对于你的基础镜像,使用 maven:3.5.4-jdk-8-alpine 而不是 openjdk:8 WORKDIR /workingdir (这会在容器内创建一个工作目录) COPY 。 . (这会复制您所有的项目文件)在这些之后,您可以在 Dockerfile 中运行您在项目上运行的任何 maven 命令,例如 mvn clean,mvn install 在 Dockerfile 中将是 RUN mvn clean RUN,COPY 是关键字,就像 EXPOSE, FROM、ADD 等
  • 嘿,谢谢你的回答,我对此很陌生,所以 dockerfile 看起来像这样:? FROM maven:3.5.4-jdk-8-alpine as build WORKDIR /workingdir From build COPY src run mvn clean run mvn install ADD target/name_id.jar name_id.jar EXPOSE 8080 对吗?
  • 我对你的项目知之甚少,但我的想法基于你所提供的类似于FROM maven:3.5.4-jdk-8-alpine WORKDIR /workingdir COPY src . RUN mvn clean RUN mvn install/ java -jar name_id.jar EXPOSE 8080
猜你喜欢
  • 2021-08-03
  • 1970-01-01
  • 2019-08-18
  • 1970-01-01
  • 1970-01-01
  • 2018-12-21
  • 1970-01-01
  • 2018-02-15
  • 1970-01-01
相关资源
最近更新 更多