如果容器没有Guest OS,为什么我们使用Docker的OS Base Image?

我刚刚开始研究Docker,对我来说有一些困惑。 正如我在Docker的网站上看到的,容器与虚拟机不同。 据我所知,一个容器只是一个内部运行整个隔离文件系统的沙箱。

我也读过一个容器没有安装Guest OS。 相反,它依赖于底层的操作系统内核。

所有这一切都很好。 我感到困惑的是Docker镜像以操作系统命名。 我们看到像Ubuntu,Debian,Fedora,CentOS等图像。

我的观点是:那些图像是什么,真的? 与创build虚拟机和安装Debian相比,创build基于Debian映像的容器有什么不同?

我以为容器没有安装Guest OS,但是当我们创build镜像时,我们将它们放在一个名为OS的命名镜像上。

另外,在例子中,我们看到当我们做docker run ubuntu echo "hello world" ,似乎我们正在Ubuntu上运行一个虚拟机,并运行命令echo "hello world"

当我们做docker run -it ubuntu /bin/bash ,看起来我们正在Ubuntu上运行一个虚拟机,并使用命令行来访问它。

无论如何,那些以操作系统命名的图像都是关于什么的? 运行带有其中一个映像的容器和使用相应的客户操作系统启动虚拟机有什么不同?

是这样的想法,我们只是与主机操作系统共享内核(因此我们可以访问底层的机器硬件资源,而不需要虚拟化硬件),但仍然使用容器上每个不同系统的文件和二进制文件支持我们想运行的任何应用程序?

    由于所有的Linux发行版运行相同(有点简化),Linux内核只有在用户级软件不同,所以模拟不同的发行环境相当容易 – 只需安装该用户级软件并假装它是另一个发行版。 具体而言,在Ubuntu操作系统中安装CentOS容器意味着你将从CentOS获得用户级,同时仍然运行相同的内核,甚至不是另一个内核实例。

    所以轻量级的虚拟化就像在同一个操作系统中有隔离的隔离区。 Au反实际虚拟化在主机操作系统内部拥有另一个完整的操作系统。 这就是docker无法在Linux内部运行FreeBSD或Windows的原因。

    如果这样会更容易,你可以认为docker是一个非常复杂和先进的chroot环境。

    容器在单个内核上运行。 换句话说,所有容器都有单一内核(主机操作系统)。 另一方面,虚拟机pipe理程序有多个kernals。 每个虚拟机运行在不同的内核上。

    “docker run ubuntu”就像创buildchroot环境一样。