FROM 命令的用途 - Docker 文件

Purpose of FROM command - Docker file

提问人:overexchange 提问时间:1/2/2019 最后编辑:overexchange 更新时间:1/2/2019 访问量:52728

问:

Docker 容器的主要目的是避免在每个容器中携带 Guest OS,如下所示。

enter image description here如此处所述,该指令初始化一个新的构建阶段,并为后续指令设置基础映像。因此,有效的 Dockerfile 必须以指令开头。FROMFROM

我的理解是,允许容器在自己的操作系统上运行。FROM <image>


为什么有效的 Docker 文件必须有指令?FROM

docker docker文件

评论


答:

1赞 Varun Pozhath 1/2/2019 #1

FROM 指令指定要用于生成映像的基础操作系统体系结构。您必须使用某种形式的基础映像才能开始构建映像。它可以是 ubuntu、centos 或任何最小的 linux 映像,如只有 5MB 的 ALPINE!这个想法是只安装你需要的软件包,而不是把所有东西都捆绑起来打包成一个发行版。这使得 docker 映像的大小与成熟的 OS 发行版相比非常小。我希望这能回答你的问题。如果您有任何问题,请告诉我。

评论

0赞 overexchange 1/2/2019
“我们的想法是只安装你需要的软件包,而不是把所有东西都捆绑起来打包成一个发行版。”你到底在捆绑什么?如果一个容器有自己的内核,那么我为什么要使用 docker 容器?
1赞 Max 1/2/2019
“如果容器有自己的内核” - 它没有。内核与主机操作系统共享。
0赞 Varun Pozhath 1/2/2019
是的,和@Max上面说的一样。在这里,Docker 守护程序管理您的内核以及它如何利用可用的资源。
25赞 Max 1/2/2019 #2

容器不运行完整的操作系统,它们共享主机操作系统的内核(通常是 Linux 内核)。这是右图中的“主机操作系统”框。

不过,它们确实提供了所谓的“用户空间隔离”——粗略地说,这意味着每个容器都管理着自己在用户模式下运行的操作系统部分的副本——通常,这是一个 Linux 发行版,例如 Ubuntu。在右图中,它将包含在“Bins/Libs”框中。

您可以在 Dockerfile 中省略该行,或使用 ,创建一个空白的基础映像,然后自己将所有用户模式片段添加到空白内核之上。FROMFROM scratch

评论

1赞 overexchange 1/2/2019
假设 Windows 作为主机操作系统,如果我通过在 Dockerfile 中说启动容器,那么这个容器中的这些 C 可执行文件(比如 , )主要是基于 linux 的二进制文件(ELF-64)。这些二进制文件(ELF-64)如何与Windows主机操作系统(COFF格式二进制文件)一起使用?中间有 docker 守护进程FROM ubuntu/bin/ls/bin/grep
2赞 Max 1/2/2019
如果在 Linux 容器模式下运行适用于 Windows 的 Docker,它基本上会在后台运行 Linux VM。所有容器共享该 VM 的 Linux 内核(而不是 Windows 内核)。
0赞 Max 1/2/2019
实际上,看起来这不再准确:hanselman.com/blog/... - 不太确定 Windows 上的本机 Linux 容器支持是如何工作的,它可能有点类似于 Linux 的 Windows 子系统。
5赞 Richard Barber 1/2/2019 #3

另一个常见的用途是将构建链接在一起,以形成较小图像的多阶段构建。FROM

例如,这对于限制失败的自动构建期间的冗余重建非常有用。

评论

2赞 kev 7/20/2023
一个链接或更多信息会很棒。如果有人不知道如何使用,他们可能也不知道什么是。FROMmulti-stage builds
0赞 Hartley Brody 10/16/2023
下面是有关多阶段生成的详细信息的链接:Here's a link to more information on multi-stage builds: docs.docker.com/build/building/multi-stage