如何使用多个基础图像构建泊坞窗图像

时间:2017-05-02 04:10:05

标签: ubuntu docker dockerfile

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

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

FROM dockerImaage1
FROM dockerImage2

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

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

可能有更多典型的案例,我们可能需要的是非常严重的特征。

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

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

3 个答案:

答案 0 :(得分:5)

答案是否定的。请参阅Moby问题中的详细讨论How do I combine several images into one via Dockerfile

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:2)

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

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