Answers:
关于容器的第一件事是:
首先,这是一个过程。
一旦了解了这一点,就可以开始理解容器如何与虚拟机进行比较和对比。容器和虚拟机都共享与其主机的隔离。隔离方法是关键区别。
容器进程使用OS内核主机的扩展,在其上运行它们,以使其自身与其他进程隔离。其他扩展也提供磁盘和资源隔离。容器与主机OS 共享其内核和内存。
虚拟机使用虚拟机管理程序将虚拟机与其主机隔离。这是一层软件,可将对资源的请求从“来宾”(VM)转发到硬件。磁盘虚拟化提供磁盘隔离。VM 不与主机共享内核,而是将自己的内核加载到VM专用的内存空间中。
这种差异的一个重要影响是,容器必须与其主机内核兼容。例如,不可能在Linux主机上运行基于Windows Nano Server的容器,或者直接在Windows主机上运行Ubuntu容器。相比之下,虚拟机可以运行任何内核,而与主机操作系统无关。在Windows主机上运行Linux容器时,Docker在Linux VM中运行该容器。
操作上的差异在于敏捷性:容器的启动和停止速度与正常过程差不多。虚拟机“更重”,需要为其预留专用资源,并且启动和关闭虚拟机需要更长的时间。
容器为DevOps操作模型提供了很多灵活性:
这个词容器是指在现代Linux内核提供一个轻量级的虚拟化技术,这项技术是非常相似的FreeBSD的监狱。
较旧的,非容器式的Linux内核能够同时运行进程。系统的某些属性是进程专用的,例如进程环境或进程内存:只有拥有这些属性的进程和操作系统本身才能访问此数据。(有很多漏洞,例如某些ps实现,但这是真的!)进程之间共享其他一些属性,例如文件系统和网络接口。
一个现代的,可容器化的Linux内核能够将系统的更多属性作为与一个或一组进程关联的私有数据来处理。结果上下文是一个容器,而不是使用操作系统初始化的文件系统和网络接口在“初始容器”中运行程序,而是可以在其他容器中运行进程,以便它们看到不同的文件系统和文件。不同的网络接口列表。因此,在不同容器中运行的两个进程仅真正共享内核。您可能对chroot命令很熟悉,该命令可以在不同的文件层次结构中运行进程,容器使想法更进一步。
当然,这只是一个非常粗糙的解释,但我希望它有助于阐明什么是容器。现在,它们有什么用?
一种流行的接口Linux的容器的能力的内核由实施搬运工,命令行实用程序,可以用来产生代表的文件系统(伪影搬运工图像)和运行的进程在这些文件系统是可访问的容器。该软件套件还能够构建临时虚拟网络系统,以使多个容器在专用网络上进行通信。
基于容器的技术可方便地:
(随着您对Virtual Box等其他虚拟化技术的熟悉,您可能会指出这些技术也可以方便地解决上述三个问题。如今,虚拟化技术的范围非常小,我们可以在以下方面比较它们的普及性问题。计算机语言的流行在某些情况下:它可能取决于每个解决方案的技术优劣,但也取决于许多因素,我将它们标记为“机会”。)
通常,容器是指类似于docker容器之类的名称
我引用了docker定义:
使用容器,运行一件软件所需的一切都打包到隔离的容器中。与VM不同,容器不捆绑完整的操作系统-仅需要使软件运行所需的库和设置。
Linux容器(lxc)的名字是其根源,其目的是将进程与其主机系统隔离开来,第一个目标是避免损害进程来接管主机系统。
现在它们已在更广泛的范围内使用。在现代的“容器”定义中,您将或多或少地发布一个用于运行时的软件包,该软件包已经包括您的应用程序,必要时它是基础中间件以及所有必需的库,并确保它将在任何兼容的系统上运行。
第二个优点是,它允许在不同版本中使用具有相同依赖项的多个应用程序,而无需大量调整其环境变量,从而加载正确的应用程序。
不同于VM系统(如Virtual Box虚拟机或AWS上的EC2实例),容器仅在文件系统级别是虚拟的,而仅在内存堆栈上是隔离的。它们仍共享同一主机,并且它们下的操作系统将仲裁cpu tick。
虚拟机在硬件级别是虚拟的,您在其中运行操作系统,容器在OS级别是虚拟的,并且在其中运行进程。