当前位置: 首页 > 科技观察

虚拟机与Docker有何不同?

时间:2023-03-19 17:06:13 科技观察

译者注:各种虚拟机技术开启了云计算时代;而Docker作为下一代虚拟化技术,正在改变我们开发、测试和部署应用程序的方式。那么虚拟机和Docker有什么区别呢?为了保证可读性,本文采用意译而非直译。另外,本文版权归原作者所有,转载仅供学习。首先大家需要明确一点,Docker容器不是虚拟机。2014年,刚接触Docker的时候,我把它比作一个轻量级的虚拟机。这样做没有错,因为Docker成功的秘诀原来就是比虚拟机更节省内存和启动速度。Docker不停地告诉大家,“虚拟机启动需要几分钟,但Docker容器只需要50毫秒”。不过Docker容器不是虚拟机,所以我们来对比一下。理解虚拟机当使用虚拟机运行多个相互隔离的应用时,如下图所示:从下到上理解上图:Infrastructure。它可以是您的个人计算机、数据中心的服务器或云主机。主操作系统(HostOperatingSystem)。在您的个人计算机上,您可能正在运行MacOS、Windows或Linux发行版。虚拟机管理系统(Hypervisor)。使用Hypervisor,可以在主操作系统之上运行多个不同的从属操作系统。Type1Hypervisor包括适用于MacOS的HyperKit、适用于Windows的Hyper-V和适用于Linux的KVM。Type2管理程序包括VirtualBox和VMWare。来自操作系统(GuestOperatingSystem)。假设你需要运行3个孤立的应用程序,你需要使用Hypervisor来启动3个从操作系统,也就是3个虚拟机。这些虚拟机非常大,可能有700MB,这意味着它们将占用2.1GB的磁盘空间。更糟糕的是,它们还消耗大量CPU和内存。各种依赖。每个从属操作系统都需要安装许多依赖项。如果你的应用需要连接PostgreSQL,你需要安装libpq-dev;如果你使用Ruby,你应该安装gems;如果您使用其他编程语言,如Python或Node.js,则需要安装相应的依赖库。申请。安装依赖后,应用可以分别运行在各个从操作系统上,实现各个应用之间的隔离。当理解Docker容器使用Docker容器来运行多个相互隔离的应用时,如下图所示:不难发现,相对于虚拟机,Docker要简单的多。因为我们不再需要运行一个臃肿的从操作系统。从下往上理解上图:Infrastructure。主操作系统(HostOperatingSystem)。所有主要的Linux发行版都可以运行Docker。对于MacOS和Windows,也有“运行”Docker的方法。Docker守护进程(DockerDaemon)。Docker守护进程取代了Hypervisor,后者是在操作系统之上运行并管理Docker容器的后台进程。各种依赖。对于Docker来说,应用的所有依赖都打包在Docker镜像中,Docker容器是基于Docker镜像创建的。申请。一个应用程序的源代码及其依赖被打包在一个Docker镜像中,不同的应用程序需要不同的Docker镜像。不同的应用程序运行在不同的Docker容器中,这些容器之间相互隔离。虚拟机与Docker对比Docker守护进程可以直接与主操作系统通信,为每个Docker容器分配资源;它还可以将容器与主操作系统隔离开来,并将每个容器彼此隔离开来。虚拟机启动需要几分钟,但Docker容器可以在几毫秒内启动。没有臃肿的从属操作系统,Docker可以节省大量的磁盘空间和其他系统资源。说了Docker的这么多优点,也没有必要完全否定虚拟机技术,因为两者的使用场景不同。虚拟机更擅长完全隔离整个运行环境。例如,云服务提供商通常使用虚拟机技术来隔离不同的用户。而Docker通常用于隔离不同的应用程序,如前端、后端和数据库。如果您对Docker感兴趣,请查看DiveIntoDocker课程。