我有一个 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/