Skip to content
This repository has been archived by the owner on Sep 6, 2023. It is now read-only.

不要把大型JAR包放进Docker镜像-InfoQ #138

Open
jwenjian opened this issue Nov 17, 2019 · 0 comments
Open

不要把大型JAR包放进Docker镜像-InfoQ #138

jwenjian opened this issue Nov 17, 2019 · 0 comments

Comments

@jwenjian
Copy link
Owner

jwenjian commented Nov 17, 2019

InfoQ的一篇文章,谈为什么不要把大型JAR包放进Docker镜像,以及应该如何正确的构建基于java的docker镜像。


原则就是利用docker镜像的分层机制,每次分发时只更新程序的变更, 而不是将整个JRE都全部更新一遍。

Docker 镜像的分层机制非常强大。如果你所有的应用程序都使用了相同的基础镜像(比如 openjdk:11.0.4-jre-slim),Docker 重用了 OS 和 JRE 的一些层,这样就可以节省 Docker 注册表的存储空间,上传和下载镜像的速度也更快了,因为只需要传输更少的文件量(Docker 只会将新的层传输到注册表中)。

一个java程序,主要是由依赖项, 资源文件, 代码组成,这三项的占用空间的比例如下:

图片

没有必要每次代码的提交都把所有的依赖项,资源文件, 代码全部打包成一个新的docker镜像。

最好的实现是合理的对镜像进行分层:

图片

最后提到了google的Jib插件,它会为你处理好镜像分层的工作。

实际上,我们不需要手动编写 Dockerfile,我们可以使用谷歌的 Jib 插件。Jib 是一个 Maven 或 Gradle 插件,用于简化 Java 应用程序镜像的打包过程。对于我们来说,Jib 最重要的一个特性是,它会扫描我们的 Java 项目,并为依赖项、资源文件和代码创建不同的层。


原文: https://www.infoq.cn/article/eULlQ4A3RcaLLQeImQy9

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

1 participant