Linux 简单的Docker概念

Linux 简单的Docker概念,linux,docker,containers,Linux,Docker,Containers,我正在阅读Docker指南,除了一个概念外,我了解了大部分的基础知识 我了解了docker/whalesay占用的247MB。它需要下载几层,包括ubuntu的基本图像。但是hello world的大小应该差不多吗?它是一个独立的映像,可以在任何地方发布 当执行hello-world时,仍然有一个Linux层在某处运行它,我也在docker/whalesay之前下载了hello-world,因此它不可能使用从docker/whalesay下载的Linux层。我在这里遗漏了什么?它不是ubunt

我正在阅读Docker指南,除了一个概念外,我了解了大部分的基础知识

我了解了
docker/whalesay
占用的
247MB
。它需要下载几层,包括ubuntu的基本图像。但是
hello world
的大小应该差不多吗?它是一个独立的映像,可以在任何地方发布


当执行
hello-world
时,仍然有一个Linux层在某处运行它,我也在
docker/whalesay
之前下载了
hello-world
,因此它不可能使用从
docker/whalesay
下载的Linux层。我在这里遗漏了什么?

它不是ubuntu实例。检查轮毂:

如果单击“最新”,您可以在此处看到dockerfile:

FROM scratch
COPY hello /
CMD ["/hello"]
FROM定义了它所基于的操作系统。Scratch是一个“空”图像,如下所述:

查看会清除所有内容-它不使用任何基本图像,如Ubuntu等:

FROM scratch
COPY hello /
CMD ["/hello"]
来自的第一条指令
说明了我们打算构建的新映像的基础映像。从:

FROM
指令为后续指令设置基本映像。 因此,有效的
Dockerfile
必须将
FROM
作为其第一条指令。 该图像可以是任何有效的图像,尤其容易启动 从公共存储库中提取图像。(码头中心)

从头开始
(它不可能使用任何基本图像,因此最小图像大小)是一种特殊情况,术语
从头开始
保留自:

从头开始

此图像在构建基础图像(例如 如debian和busybox)或超最小映像(仅包含 单二进制和任何它需要的,例如hello world)

从Docker 1.5.0(特别是Docker/Docker#8827)开始,从头开始 Dockerfile中的“无操作”,并且不会在Dockerfile中创建额外的层 图像(因此以前的两层图像将改为一层图像)


编辑1-OP的新评论进一步澄清:


为了澄清,Docker安装了一个非常小的Linux dist。 这个非常简单的hello world映像使用默认的Linux Docker随附的地区

Paul Becotte的一个很好的澄清:


不。Docker不包含内核-它不是虚拟机。信息技术 是一种在现有内核上运行进程的方法 欺骗他们,使他们认为自己是完全孤立的。大小 映像实际上是一个“根文件系统”。。。在本例中,文件 系统只包含一个文件,这就是为什么它很小的原因最新版本 进程实际上在运行 Docker守护进程(您安装了Docker的Linux机器),并将其引导到容器文件系统


为了进一步澄清,我将分享一个使用最小图像的示例:

基于Alpine Linux的最小Docker映像及其完整包 索引和大小只有5 MB



p.S.
hello world
的情况下,没有任何基本映像,甚至没有最小映像。

因此它将hello程序复制到我主机上的当前工作目录?据我所知,它永远不会在工作目录上创建目录,它仍然是一个独立的映像,有自己的环境,这真的很简单。因此,它的存储方式与所有docker图像的存储方式相同。例如,它上面没有包管理器。但你可以用它作为基础来创建一个更大的图像,以确保你没有任何不需要的东西。像这个映像和busybox这样的东西通常被用来在raspberry pi之类的东西中为较弱的硬件提供支持。这个极其简单的
hello world
图像使用Docker附带的默认Linux dist?不,Docker不包含内核-它不是虚拟机。这是一种在现有内核上运行进程的方法,可以诱使它们认为它们是完全隔离的。图像的大小实际上是一个“根文件系统”。。。在这种情况下,文件系统只包含一个文件,这就是为什么它很小的原因。该进程实际上是在运行Docker守护进程的内核上执行的,并将其引导到容器文件系统。@PaulBecotte和@Nabeel感谢您的澄清。我非常接近于理解。当你说它运行在运行Docker守护进程的内核上时,这是否意味着自从我使用Docker for Mac以来,
hello world
二进制文件正在从我的Mac OS X Yosemite内核运行?如果我是在Linux上使用Docker,那么说明是有意义的,但是因为我是在Mac上,我想它应该是在Docker附带的一个小Linux内核上运行的,或者在你解释之后,现在是在Mac UNIX内核上运行的。不,我很抱歉。Docker for Mac包括一个实际的linux虚拟机,该虚拟机运行Docker守护程序并将Docker命令代理到该机器。因此,Docker for Mac安装了linux,但这与您的任何映像都无关。@PaulBecotte但说到映像,当我使用Docker for Mac时,它正在运行linux虚拟机,对吗?