繁体   English   中英

如何使用多个基础图像来构建docker镜像

[英]How to use multiple base images to build a docker image

我使用了基础docker镜像(openjdk)来创建一个具有简单Java程序的图像。

但我想知道我是否在docker文件中使用2个基本图像。 我们怎么做? 我不认为docker支持以下任何东西:

FROM dockerImaage1
FROM dockerImage2

其中一个场景,为什么需要这个是我想要一个ubuntu的图像有openjdk ,所以一种方法是我使用ubuntu的基本图像和docker文件写入指令来安装openjdk,设置JAVA_HOME变量等,这无疑是麻烦的。

另一种选择,我喜欢在ubuntu的基础内使用openjdk的基本图像(如果可能的话)。

可能有更典型的情况,我们可能需要的是非常严重的功能。

有关如何在docker文件中使用2个基本图像的任何想法 还有人这样做过吗?

我在这里找到了一个逆向工程的链接,但它有一些限制,比如如果ubuntu的docker文件使用ADD或COPY等命令,逆向工程就会失败。

答案是不。 请参阅Moby问题中的详细讨论, 如何通过Dockerfile将多个图像合并为一个

容器背后的想法是真实构图的最小单位是容器。 通常,将多个图像合并到一个图像可能会引入一些问题。 例如,不同的图像在库或库版本上存在冲突。

最新版本的docker具有多阶段构建的概念。 参考:( https://docs.docker.com/engine/userguide/eng-image/multistage-build/

对于多阶段构建,您在Dockerfile中使用多个FROM语句。 每个FROM指令可以使用不同的基础,并且每个指令都开始构建的新阶段。 您可以选择性地将工件从一个阶段复制到另一个阶段,从而在最终图像中留下您不想要的所有内容。

容易? 不,Docker不支持这一点,因为它可以有效地组合多个Linux根文件系统。

最简单的方法是从Ubuntu开始然后安装openjdk,或者在docker hub上找到一个已经这样做的图像。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM