在Docker容器中使用OS有什么意义?
在 Docker 存储库中,您可以找到一个Ubuntu Docker 映像:https : //registry.hub.docker.com/_/ubuntu/我认为Docker更像是“应用”级别。
Ubuntu Docker容器和Ubuntu虚拟机之间有什么区别?如果您在Docker容器中有一个完整的操作系统,那么使用Docker并不是没有意义的吗?
谢谢
在Docker容器中使用OS有什么意义?
在 Docker 存储库中,您可以找到一个Ubuntu Docker 映像:https : //registry.hub.docker.com/_/ubuntu/我认为Docker更像是“应用”级别。
Ubuntu Docker容器和Ubuntu虚拟机之间有什么区别?如果您在Docker容器中有一个完整的操作系统,那么使用Docker并不是没有意义的吗?
谢谢
Answers:
您缺少基本的Docker概念。这是完全不同的事情。
您需要了解的第一件事是Docker的理念:在容器中隔离运行一个进程。您不会在Docker容器中运行OS,而是将在容器内运行一个进程,该进程具有基于所选Linux发行版的根文件系统内容。Ubuntu是其中的一个选择。
现在,您应该想知道如何使进程在与主机运行的Linux发行版不同的linux基本映像中运行。要运行一个操作系统,您基本上需要:
Docker使用UnionFS来管理容器内的磁盘块层,以便您可以将它们堆积起来。
在后台,它使用联合挂载,该挂载允许同时挂载多个文件系统,看起来像是整个虚拟系统。实际上,它以只读模式将基本映像层作为读写模式放置在基本根文件系统之上。
在这里,您有一堆磁盘块,其分层方式使得基本映像来自的Linux发行版一旦安装在真实主机中便会包含相同的文件系统,但这一次它位于容器内。
现在缺少的最后一件事是:您如何孤立地运行这件事?
答案是:名称空间。我在这里不赘述,因为它会与原始问题有所出入。但是您需要知道的是,自内核2.4.19开始,多年来出现了各种命名空间。当前,以下名称空间可用:
命名空间是内核内部的隔离结构,允许进程在特定环境下运行。例如,MNT名称空间将是使进程在基本映像根文件系统规范中运行的关键功能。NET名称空间将是容器具有特定网络接口以便与Docker桥等通信的另一个关键功能。
因此,是的,所有这些操作的主要目的是隔离运行一个应用程序,并通过一个称为容器的盒子轻松地将其从本地环境运送到生产环境。
在深入研究Docker文档之前,最好先阅读一下。