简单的Docker概念

时间:2016-09-07 13:16:32

标签: linux docker containers

我正在阅读使用Docker指南的getting started并了解除了一个概念之外的大部分基础知识。

docker images screenshot

我了解docker/whalesay占用247 MB的方式。它需要下载几个层,包括ubuntu的基本映像。但是hello-world应该大小相同吗?这是一个可以随处运送的独立图像。

hello-world执行时,仍有一个Linux层在某处运行它,我还在hello-world之前下载了docker/whalesay,因此它无法使用从{{{}下载的Linux层。 1}}。我在这里缺少什么?

2 个答案:

答案 0 :(得分:2)

它不是ubuntu实例。检查集线器: https://hub.docker.com/_/hello-world/

如果你点击最新,你可以看到dockerfile:

FROM scratch
COPY hello /
CMD ["/hello"]

FROM定义了它所基于的操作系统。 Scratch是一个“空”图像,如下所述:https://hub.docker.com/_/scratch/

答案 1 :(得分:1)

调查Dockerfile清除了事情 - 它没有使用任何基本图像,例如Ubuntu等:

FROM scratch
COPY hello /
CMD ["/hello"]

第一个指令FROM表示我们打算构建的新图像的基本图像。来自docs

  

FROM指令为后续指令设置基本映像。   因此,有效Dockerfile必须有FROM作为其第一条指令。   图像可以是任何有效图像 - 开始时特别容易   从公共存储库中提取图像。 (Docker Hub)

并且FROM scratch(不能使用任何基本图像,因此迷你图像大小)是一种特殊情况 - 术语scratch是保留的 - 来自docs

  

<强> FROM scratch

     

此图像在构建基本图像的环境中最有用(例如   作为debian和busybox)或超级最小图像(仅包含一个   单个二进制及其所需的任何内容,例如hello-world)。

  

从Docker 1.5.0(特别是docker / docker#8827)开始,FROM scratch是   Dockerfile中没有操作,并且不会在你的文件中创建额外的图层   图像(因此之前的2层图像将是 1层图像)。

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

  

为了澄清,使用Docker安装了一个非常小的Linux dist。   这个非常简单的hello-world图像使用默认的Linux   Docker附带的dist?

Paul Becotte的一个很好的澄清:

  

没有。 Docker不包含内核 - 它不是虚拟机。它   是一种以现有方式在现有内核上运行进程的方法   欺骗他们认为他们是完全孤立的。的大小   图像实际上是一个&#34;根文件系统&#34; ...在这种情况下,文件   系统只包含一个文件,这就是它很小的原因。的的   进程实际上是在运行该进程的内核上执行的   Docker守护程序(您在其上安装了Docker的Linux机器),并将其chroot转移到容器文件系统。

进一步澄清 - 我正在分享一个使用最小图片Alpine的例子:

  

基于Alpine Linux的最小Docker镜像,包含完整的包   索引,只有5 MB大小!

P.S。如果是hello-world,那么任何基本图像都不会是微小的图像。