java - 如何减小我的 java/gradle docker 镜像大小?

标签 java gradle docker dockerfile gradlew

我有一个 Docker 文件,如下所示:

FROM openjdk:8

ADD . /usr/share/app-name-tmp

WORKDIR /usr/share/app-name-tmp

RUN ./gradlew build \
    mv ./build/libs/app-name*.jar /usr/share/app-name/app-name.jar

WORKDIR /usr/share/app-name

RUN rm -rf /usr/share/app-name-tmp

EXPOSE 8080

RUN chmod +x ./docker-entry.sh

ENTRYPOINT [ "./docker-entry.sh" ]

问题是最终图像大小为 1.1GB,我知道这是因为 gradle 下载并存储了所有依赖项。删除那些不必要的文件并保留 jar 的最佳方法是什么?

最佳答案

我真的对你的图片大小感到困惑。我有典型的 Spring Boot 应用程序,提供 REST 服务,包括不到 200MB 的嵌入式 servlet 容器!看起来您的项目依赖项可以而且应该进行优化。

Docker 镜像

openjdk:8(243MB 压缩)可以替换为具有缩减的 Alpine unix 镜像,例如 openjdk:8-jdk-alpine (52MB) 作为基础图片,但如果您不需要编译器功能(例如,不使用 JSP),您也可以选择仅包含运行时的 openjdk:8-jre-alpine (42MB),查看Docker Hub .我将它用于基于 Spring Boot 的 REST 服务,效果很好。

Java 依赖项

必须包含编译和运行时所需的 Java 依赖项,但您可能包含未使用的依赖项:

  • 检查您的依赖关系,当前编译/运行时依赖关系是否真正使用过,或者是否可以删除或移动以进行测试,请参阅 Gradle Java Plugin
  • 一些依赖有很多传递依赖(使用gradle dependencies显示),检查不必要的,如果不使用就排除它们,见Gradle Dependency Management .确保在最终应用之前进行集成测试,一些传递依赖项没有很好的文档记录,但可能是必不可少的!

关于java - 如何减小我的 java/gradle docker 镜像大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40958062/

相关文章:

java - 归并排序。错误 - 线程 "main"java.lang.ArrayIndexOutOfBoundsException 中出现异常 : 2

java - 你怎么 'escape'一个用户名:password pair in a connection string?

postgresql - 如何通过Ubuntu静默安装Postgresql。 Dockerfile?

gwt - 通过Gradle使用gwt-user.jar创建Javadoc

android - Android Studio 3.1.1 中的 Aapt2 错误

Docker : logs gone 中的 Python 日志记录类

docker - POD 定义 - 部署到 DC/OS

java - 连接到 xmpp 出现套接字异常(权限被拒绝)

java - IntelliJ IDEA 多实例

eclipse - 如何将新的自定义 "sample projects"添加到 Eclipse "New Gradle Project"向导?