Docker 从图片的一部分理解
Docker understanding FROM part of the image
阅读 https://docs.docker.com/introduction/understanding-docker/ 后,我仍然难以理解 docker 容器的轻量级。
查看一些 public 图像,其中大部分是基于以下 "base" 图像之一,例如 FROM debian:jessie
或 FROM debian:wheezy
,有还有 ubuntu 的变体,我猜 fedora 和 centos 也是如此(还有一个 "scratch" 这是另一个话题)。
所以,考虑到这一点,我明白,每个 docker 容器 运行 都是基础 OS(图中提到),那么它是如何工作的?轻量化从何而来?你可以 运行 图像基于,比如说,在 fedora 上的 debian:jessie
,以及基于 centos
在 debian 上的图像吗?
"scratch"呢?如果你的 Dockerfile 基于 "scratch" 那么你在容器中没有 OS 运行ning,那么在这种情况下它是如何工作的?
主机系统的 Linux 内核与此主机系统上的 docker 容器 运行ning 之间有什么关系?
Where is the lightweight comes from?
在所选后端允许的情况下,图像存储为与基础图像不同的增量——因此,如果您有多个容器使用相同的基础图像,则该基础图像仅在磁盘上复制一次。此外,每个映像都在重用您主机的内核,并且不需要硬件级虚拟化。
So, considering this, I understand, that every docker container runs the base OS (mentioned in the image), so how does it work?
"Runs the X os" 实在是太模糊了,不是一个有用的描述; "run" 这个词的意思本身就不清楚。在 Docker 环境中启动的每个应用程序都使用主机的内核,以及容器提供的文件系统内容(因此共享库、配置等)。
Can you run the image based on, say, debian:jessie on fedora, and image based on centos on debian?
是的。任何依赖于特定操作系统内核的功能将不可用。
What is the relationship between Linux kernel of the host system and the docker container running on this host system?
主机系统的内核是唯一使用的;期间。
What about "scratch"? If you base your Dockerfile on "scratch" then you don't have OS running inside the container, so how does it work then in this case?
您可以将任何软件插入容器 运行 您主机的内核中。在这种情况下,您有责任将该软件设置为 运行,而没有通常由基本映像提供的任何组件(如共享库)。这通常意味着您需要将此软件编译为静态构建,而不依赖于任何 OS 提供的实用程序(如 shell),除非您自己提供它们。
阅读 https://docs.docker.com/introduction/understanding-docker/ 后,我仍然难以理解 docker 容器的轻量级。
查看一些 public 图像,其中大部分是基于以下 "base" 图像之一,例如 FROM debian:jessie
或 FROM debian:wheezy
,有还有 ubuntu 的变体,我猜 fedora 和 centos 也是如此(还有一个 "scratch" 这是另一个话题)。
所以,考虑到这一点,我明白,每个 docker 容器 运行 都是基础 OS(图中提到),那么它是如何工作的?轻量化从何而来?你可以 运行 图像基于,比如说,在 fedora 上的 debian:jessie
,以及基于 centos
在 debian 上的图像吗?
"scratch"呢?如果你的 Dockerfile 基于 "scratch" 那么你在容器中没有 OS 运行ning,那么在这种情况下它是如何工作的?
主机系统的 Linux 内核与此主机系统上的 docker 容器 运行ning 之间有什么关系?
Where is the lightweight comes from?
在所选后端允许的情况下,图像存储为与基础图像不同的增量——因此,如果您有多个容器使用相同的基础图像,则该基础图像仅在磁盘上复制一次。此外,每个映像都在重用您主机的内核,并且不需要硬件级虚拟化。
So, considering this, I understand, that every docker container runs the base OS (mentioned in the image), so how does it work?
"Runs the X os" 实在是太模糊了,不是一个有用的描述; "run" 这个词的意思本身就不清楚。在 Docker 环境中启动的每个应用程序都使用主机的内核,以及容器提供的文件系统内容(因此共享库、配置等)。
Can you run the image based on, say, debian:jessie on fedora, and image based on centos on debian?
是的。任何依赖于特定操作系统内核的功能将不可用。
What is the relationship between Linux kernel of the host system and the docker container running on this host system?
主机系统的内核是唯一使用的;期间。
What about "scratch"? If you base your Dockerfile on "scratch" then you don't have OS running inside the container, so how does it work then in this case?
您可以将任何软件插入容器 运行 您主机的内核中。在这种情况下,您有责任将该软件设置为 运行,而没有通常由基本映像提供的任何组件(如共享库)。这通常意味着您需要将此软件编译为静态构建,而不依赖于任何 OS 提供的实用程序(如 shell),除非您自己提供它们。