当前位置: 首页 > 知识库问答 >
问题:

为什么构建Docker容器映像的第一步是将基本映像作为源,而基本映像本身在我看来是像ALPINE这样的操作系统?

许昆
2023-03-14

我最近从Udemy学习了一门关于Docker的课程,但我在理解Docker世界中的图像究竟是什么方面遇到了问题?

我所了解到的是,当Docker在我们的系统上运行时,它本身就是一个运行Linux操作系统的虚拟机。Linux操作系统从我们提供的映像运行多个容器。容器在硬盘上有其独立的空间,分配了自己的内存和CPU,但与虚拟机不同的是,它没有自己成熟的操作系统。

但是,因为我了解到容器共享一个操作系统,所以我对我们为运行容器而构建的映像感到困惑 因为我看到要构建一个Docker映像,我们首先要加载一个基本映像(在我看来,它本身就是一个操作系统,就像来自Alpine的…等)。那么,当映像本身中存在操作系统时,为什么说容器共享单主机操作系统呢?


共有2个答案

解修然
2023-03-14

基本映像只是一个Docker映像,它是使用所有其他Docker映像所需的公共包构建的。始终建议准备一个基本Docker映像,并使用该映像派生其他Docker映像。当然,为了提高Docker容器的性能和启动时间,在构建Docker映像时有许多最佳做法,使其尽可能优化。

运行Docker映像构建时,Dockerfile中的每条指令都会创建一个文件系统层。文件系统层是堆叠的,每个文件系统层都包含增量。

百里涛
2023-03-14

说容器共享一个操作系统有点误导。它们共享的是内核,而不是库和支持程序,这些库和支持程序通常与操作系统(如cp或bash)一起提供。

 类似资料:
  • 问题内容: 我有一个泊坞窗映像,我想找出它是从哪个映像创建的。当然有多层,但是我想找出最后一张图像(dockerfile中该图像的FROM语句)? 我尝试使用,但无法在其中找到此信息。 我尝试使用以下命令,但它给我一条错误消息 这是我收到的错误消息 问题答案: 您可以使用此答案中建议的方法:https : //stackoverflow.com/a/53841690/3691891 首先,拉: 获

  • 问题内容: 我正在处理dockerfile。我只是意识到我一直在使用索引图像。 所以我想知道: 如何在我的本地(自定义)图像之一不作为索引的情况下将其用作基础()图像? 问题答案: 您可以使用它而无需执行任何特殊操作。如果您有一个本地图像,可以这样做。如果您在Dockerfile中进行操作,但 没有 名为的本地映像, 则 Docker将尝试从注册表中提取它。 换句话说,如果Dockerfile这样

  • 问题内容: 我从dockerfile构建了Docker映像。我看到映像已成功构建,但是该如何处理?它不应该能够作为容器运行吗? 问题答案: 运行它的具体方法取决于您是否为图像指定了标签/名称。 使用名称(让我们使用 Ubuntu ): 没有名称,只需使用ID: 请参阅 Docker运行参考 以获取更多信息。

  • 我正在构建一个新图像,并将内容从主机操作系统文件夹D:\Programs\scrapy复制到其中,如下所示:

  • 问题内容: 我不确定我在问正确的问题…但是当我阅读所有可以接触到的docker时,我发现可以在Ubuntu 12.04上安装Docker(例如),然后安装一个Fedora容器还是其他版本的ubuntu?(有一个示例,其中用户在容器中安装了busybox。) 当然,我可能完全错了。 但是,我希望基本系统与容器之间存在短暂的连接。 重述:主机操作系统和容器基础映像的操作系统之间是什么关系? 问题答案:

  • 我有一个spring boot应用程序,其中包含一个主类。我的Docker文件如下: 我正在使用这个Docker文件创建一个Docker映像。让我们考虑这个docker文件是Docker1。 我有另一个Spring Boot应用程序(没有主类),Docker文件如下: 我使用Docker1作为第二个应用程序的docker映像的基础映像。当我试图运行第二个docker映像时,我得到一个错误“no m