我通常将 docker 容器视为可执行进程,它们会随身携带一些“环境”,因此无需在 docker 主机上安装任何东西。例如,java jar 和 jre。
为了安装 jre,我们可能从 ubuntu 基础框开始,然后使用 aptitude 进行安装。但是,尽管我们实际上需要一个包管理器来为我们的应用程序配置依赖项(在本例中是 jre),但我认为执行我们的应用程序并不是严格要求的。
这就引出了一个问题,这个问题太过深奥,没有实际意义,但仍旧是一种好奇心:是否可以在 docker 镜像中安装依赖项,而不在构建的镜像中包含包管理器?
研究如何为 chroot 实现这一点,这似乎很难或不可能。从表面上看,这个挑战似乎是可以解决的(例如,如果我使用 gradle 或 maven 构建 Java 应用程序,则不必在我发布的程序中包含 gradle 或 maven 二进制文件),所以我也很好奇为什么它似乎没有简单的解决方案。是否有人在研究将依赖项安装到 docker 映像(或 chroot)中的问题?如果没有,为什么不呢?
(解决方案这里以及解决方案 2这里需要在 chroot 中安装包管理器,但这并不能解决我的问题:如何将包管理器从 docker 镜像中取出。第二个解决方案 1 涉及从源代码构建(我想是吧?)这也不是我想要的。