Linux 了解技术(Docker)容器体系结构

Linux 了解技术(Docker)容器体系结构,linux,docker,architecture,containers,busybox,Linux,Docker,Architecture,Containers,Busybox,我是集装箱新手,希望能很好地了解集装箱技术(Docker)是如何从零开始构建的。我必须写一篇论文,希望到目前为止我对每一件重要的事情都有正确的理解 下图是我制作的,显示了我目前对容器的理解 显然,我们需要一个内核允许我们使用硬件的操作系统。对于Docker来说,这是Linux。Docker for Windows使用带有Linux的VM来实现这一点 在Linux操作系统之上,我们运行Docker引擎。我们的Docker引擎负责启动、构建、配置。。。我们的图像和容器。但最重要的是,Docker引

我是集装箱新手,希望能很好地了解集装箱技术(Docker)是如何从零开始构建的。我必须写一篇论文,希望到目前为止我对每一件重要的事情都有正确的理解

下图是我制作的,显示了我目前对容器的理解

显然,我们需要一个内核允许我们使用硬件的操作系统。对于Docker来说,这是Linux。Docker for Windows使用带有Linux的VM来实现这一点

在Linux操作系统之上,我们运行Docker引擎。我们的Docker引擎负责启动、构建、配置。。。我们的图像和容器。但最重要的是,Docker引擎处理与隔离容器有关的所有事情,例如,它维护名称空间或cGroup的使用方式,以便每个容器都有自己的完整文件系统

然后我们有我们的实际容器。容器本身几乎每次都需要一种操作系统本身。这主要是一个非常紧凑的像阿尔卑斯山或百事箱。它们收集了少量的标准函数,如大多数软件肯定需要的“文件”、“tar”、“grep”。这个紧凑的操作系统现在正在使用我们完整的Linux操作系统的内核它们没有自己的内核。

然后,我们将实际的软件(如Node.js或NGINX服务器)放在紧凑型操作系统之上。该软件仅使用compact操作系统,而compact操作系统反过来使用我们完整的Linux操作系统的内核。在运行时生成或完成的所有数据或修改都在容器的可写层上进行



如果我理解正确的话,我们的容器或容器中运行的所有东西都没有使用完整的Linux操作系统,也没有与之交互,而只是使用它的内核? 我也不太明白容器中的可写层是如何工作的。例如,我的软件如何知道只读层中修改过的文件现在存在于可写层中,并且应该使用它

我真的很感激对我迄今为止遗漏的内容提出一些更正或建议。多谢各位


如果我理解正确的话,我们的容器或容器中运行的所有东西都没有使用完整的Linux操作系统,也没有与之交互,而只是使用它的内核

容器只是进程。对于内核,Docker守护进程、NodeJS应用程序和Nginx是进程。这就是为什么容器没有自己的内核。Docker守护进程(和主机上的其他进程)与容器中运行的进程之间的区别在于它们的作用域(称为命名空间)。容器中的进程是独立运行的,它们在名称空间周围看不到任何东西。有许多不同的名称空间,例如,pid名称空间就是其中之一,它限制了其他进程的可见性。这就是为什么容器中的ps命令不显示来自主机或其他容器的进程。名称空间是一个核心的东西,它们更多的是关于进程可以看到和访问什么,同时还有一些cgroup对CPU和内存使用进行限制

我希望这对您有所帮助,至少,我试着把更多的注意力放在内核上,因为Docker只是一个守护进程,它通过配置名称空间、cGroup和自己的文件系统来旋转新进程

以下是一些可能有用的链接:

  • 另请参阅上关于容器的其他帖子(我推荐它,因为Julia用简单的文字解释了它,甚至提供了插图。)
如果你想更深入一点,我建议你看幻灯片并阅读


如果我理解正确的话,我们的容器或容器中运行的所有东西都没有使用完整的Linux操作系统,也没有与之交互,而只是使用它的内核

容器只是进程。对于内核,Docker守护进程、NodeJS应用程序和Nginx是进程。这就是为什么容器没有自己的内核。Docker守护进程(和主机上的其他进程)与容器中运行的进程之间的区别在于它们的作用域(称为命名空间)。容器中的进程是独立运行的,它们在名称空间周围看不到任何东西。有许多不同的名称空间,例如,pid名称空间就是其中之一,它限制了其他进程的可见性。这就是为什么容器中的ps命令不显示来自主机或其他容器的进程。名称空间是一个核心的东西,它们更多的是关于进程可以看到和访问什么,同时还有一些cgroup对CPU和内存使用进行限制

我希望这对您有所帮助,至少,我试着把更多的注意力放在内核上,因为Docker只是一个守护进程,它通过配置名称空间、cGroup和自己的文件系统来旋转新进程

以下是一些可能有用的链接:

  • 另请参阅上关于容器的其他帖子(我推荐它,因为Julia用简单的文字解释了它,甚至提供了插图。)

如果您想更深入地了解,我建议您阅读幻灯片。

如果您想简单地理解docker arch,它是一种与我们的其他web应用程序类似的客户机-服务器体系结构。docker cli是一个客户端,docker machine是一个服务器。对于可写层,请阅读docker卷上的文档-不使用完整的Linux操作系统,也不与之交互,只使用其内核?->它共享多个东西并运行一个内核,事实上,它可以通过网络与主机sys交互,甚至在用作卷时直接与docker套接字交互。。。您应该了解使用例如tun设备的特权模式,并且由于UNIX/Linux的方式是“一切都是文件”,因此(例如,“设备”是文件,套接字可以是文件,硬盘是文件)在这里也适用。。如果你想用简单的话来理解docker arch,你可以把它“装入”一卷,它是一个客户机-服务器架构,就像我们的oth一样