为什么Docker虚拟化比虚拟机更快速

22 浏览
0 Comments

为什么Docker虚拟化比虚拟机更快速

据我了解,虚拟机使用硬件虚拟化,而容器使用软件虚拟化,因此在性能上更优秀(比如,假设我在Windows机器上运行一个基于Docker的Linux系统)。但是,为什么操作系统虚拟化比硬件虚拟化更快呢?

0
0 Comments

Docker是关于容器化的,而不是虚拟化。它是关于如何在隔离环境中运行进程的。

这意味着如果不使用某种虚拟化(如Virtualbox、Hyper-v等),你不能在Windows上运行Linux容器,也不能在Linux上运行Windows容器。在开发时,在笔记本电脑上这样做是可以的,但在生产环境中,您将选择适合容器的适当架构。

什么是容器?

根据《系统管理员的容器指南》:

传统的Linux容器实际上只是Linux系统上的普通进程。这些进程组使用资源约束进行隔离:

- 控制组(cgroups)

- Linux安全约束(Unix权限、capabilities、SELinux、AppArmor、seccomp等)

- 命名空间(PID、网络、挂载等)

使用Linux命令手动设置所有这些(网络命名空间、iptables规则等)可能会很复杂,因此当您键入docker命令时,docker守护程序会在幕后执行它们。

关于速度…

首先,由于引入了复杂性,容器可能比直接在主机网络堆栈上运行进程更慢。例如,参见:在Docker容器中运行nginx的性能问题

但是,它们将为您提供速度。如何实现?

- 容器不是完整的操作系统(基础镜像大小较小)

- 容器遵循微服务和“做一件事,做好一件事”的概念。这意味着您不会像在虚拟机中那样将一切放入容器中。这被称为关注点分离,它导致应用组件更轻量级。它还为开发人员提供了速度,因为不同的团队可以使用不同的编程语言和框架分别开发其组件。其他人还将此称为开发速度。

- 镜像层:Docker有一种内部方法将镜像拆分为多个层,当您构建新镜像时,可以重用这些层。这使您能够实现快速部署(考虑到回滚的有用性)。

关于Windows容器

容器一开始只是Linux的一种东西,但这种容器化浪潮也对Windows产生了影响。最初,docker-toolbox使用Virtualbox在Linux虚拟机上运行容器。后来,引入了docker-for-windows,并提供了在主机上或hyper-v上直接运行容器的选项。如果您访问Windows容器类型,可以了解更多信息。

0
0 Comments

为什么Docker虚拟化比虚拟机更快?

Docker并不是通过虚拟化来工作的。它使用内核命名空间来实现类似chroot的效果,不仅限于根文件系统,还包括进程信息(PID命名空间),挂载点,网络,IPC(共享内存),UTS信息(主机名)和用户ID。

容器与主机共享内核。为了安全起见,Docker使用AppArmor/SELinux、Linux capabilities和seccomp来过滤系统调用。控制组(cgroups)用于进程记账和对资源施加限制。

你说容器与主机共享内核,但如果Docker镜像中包含与主机不同的操作系统,它们如何共享内核呢?(例如,在Windows主机上运行的Docker化的Linux)

如果在Debian系统上运行一个CentOS容器,它将运行CentOS的二进制文件(和库),但不会运行CentOS提供的内核。在Debian系统上的任何容器都将使用该系统上已安装的内核。

通过使用内核命名空间和共享主机内核,Docker相比于传统的虚拟机具有更高的性能。这使得Docker容器可以更快地启动和停止,因为它们没有额外的虚拟化层。此外,由于共享主机内核,Docker容器所需的资源更少,从而节省了系统资源。

在Docker中,容器镜像只包含应用程序和其依赖的库,而不包含完整的操作系统。因此,容器镜像的大小通常比虚拟机镜像小得多。这也有助于提高Docker的性能,因为较小的镜像可以更快地下载和部署。

总之,Docker虚拟化比传统的虚拟机更快,原因在于它使用内核命名空间和共享主机内核。这使得Docker容器可以更快地启动、停止和部署,并且对系统资源的需求更少。这使得Docker成为构建和管理应用程序的理想工具。

0