VM还是Docker?

如何理解您需要Docker,而不是VM? 让我们尝试了解虚拟机(VM)和Docker容器的隔离之间的主要区别,即它们是否可以互换以及如何使用它们。


那么Doc​​ker容器和VM之间有什么区别?
虚拟机(VM)是具有所有虚拟设备和虚拟硬盘的虚拟计算机,在其上安装了新的独立OS(来宾OS)以及虚拟设备驱动程序,内存管理和其他组件。 也就是说,我们获得了物理设备的抽象,该抽象使您可以在一台计算机上运行许多虚拟计算机。 虚拟设备显示在系统属性中,并且已安装的应用程序与其交互,就好像它是真实的一样。 同时,虚拟机本身可以与真实计算机完全隔离,尽管它可以访问其磁盘和外围设备。
已安装的VM可以通过不同方式占用计算机磁盘上的空间:


  • 固定的硬盘空间,可以更快地访问虚拟硬盘并避免文件碎片;
  • 动态内存分配。 当安装其他应用程序时,将为它们动态分配内存,直到达到分配给它的最大数量。

使用VM时,模拟虚拟设备和启动来宾OS,支持和管理必要的环境以使应用程序正常工作会产生额外费用。 另外,当您在服务器上部署大量虚拟机时,它们在硬盘驱动器上占据的空间只会增加,因为 每个VM至少需要用于访客OS和虚拟设备驱动程序的空间。


Docker是用于创建基于容器的应用程序的软件。 容器和虚拟机解决了一个问题,但解决方法不同。 容器占用的空间更少,因为 重用比VM更多的主机系统共享资源 与VM不同,它在OS级别而不是硬件上提供虚拟化。 这种方法提供了更少的硬盘空间,更快的部署和更容易的扩展。


docker容器提供了更有效的应用程序封装机制,提供了必要的主机系统接口。 此功能允许容器拆分系统的核心,每个容器都作为主OS的单独进程工作,该主OS具有自己的虚拟地址空间,因此不能更改属于不同存储区的数据。


Docker是在应用程序中使用容器的最常见技术。 它已成为该领域的标准,建立在Linux内核提供的cgroup和名称空间的基础上。 Docker的本机操作系统是Linux,因此Windows上Docker容器的启动将在Linux虚拟机内进行。


容器是用什么制成的?


图像是创建容器的主要元素。 该映像是从添加到项目中的Dockerfile创建的,是一组彼此分层并以只读方式分组在一起的文件系统(层)。 最大层数为127。


每个映像的核心是一个基本映像,该映像由FROM命令指示-Dockerfile映像形成的入口点。 每一层都是只读层,由一个命令表示,该命令修改写入Dockerfile的文件系统。 这种方法允许来自不同文件层的不同文件和目录透明地重叠,从而创建级联集成的文件系统。 图层包含元数据,使您可以在运行时保存和构建每个图层的相关信息。 每一层都包含到下一层的链接,如果该层没有链接,则这是图像中的最顶层。
从Docker EE版本06.17.02-ee5和Docker引擎-社区开始,使用Overlay2或Overlay,并且较早的版本使用AuFS(高级多层Union文件系统)。


容器-如何运作?


容器是组合代码和依赖关系的应用程序级抽象。 容器总是从图像创建的,添加可写的顶层并初始化各种参数。 由于容器具有其自己的记录层,并且所有更改都保存在该层中,因此多个容器可以共享对同一图像的访问。 可以通过docker-compose.yml项目中的文件配置每个容器,并设置各种参数,例如容器名称,端口,标识符,其他容器之间的依赖关系。 如果您未在设置中指定容器名称,则Docker每次都会创建一个新容器,并为其随机分配一个名称。


当容器从映像启动时,Docker会在下面的任何层之上安装文件系统以进行读写。 在这里将执行所有过程。 首次启动容器时,初始读写层为空。 发生更改时,它们将应用于此层。 例如,如果您要修改文件,则该文件将从底层只读层复制到读写层。 该文件的只读版本将仍然存在,但现在已隐藏在副本下。


级联联合文件系统如何工作?


级联集成文件系统(FS)实现了写时复制(COW)复制机制。 工作单元是一个层,应将每个层视为一个独立的完整文件系统,并具有从根目录开始的目录层次结构。 这种方法使用文件系统的统一安装,对用户透明地允许将各种文件系统(称为分支)的文件和目录组合到单个连接的文件系统中。 具有相同路径的目录的内容将一起显示在结果文件系统的一个组合目录中(在单个名称空间中)。


根据以下原则合并图层:


  • 其中一层成为上层,第二层及后续层成为下层。
  • 用户可以“从上到下”访问图层对象,即 如果所请求的对象在“上层”中,则返回该对象,而不管在“下层”中是否存在具有该名称的对象; 否则,返回“下层”的对象; 如果所请求的对象不在那里或那里,则返回错误“没有这样的文件或目录”;
  • 工作层是“上层”,也就是说,所有更改数据的用户操作仅反映在上层,而不会影响下层的内容。

结论


如果需要使用保证的专用资源和虚拟硬件来虚拟化系统,则应选择一个VM。 什么使VM得以使用:


  • 在一台计算机上安装几种不同操作系统的能力;
  • 在虚拟机之间分配系统资源;
  • 无需重启即可在操作系统之间进行切换;
  • 能够对系统的当前状态和磁盘内容进行“快照”,以使系统返回其原始状态;
  • 在硬件级别隔离故障和违反安全系统;
  • 在一台计算机上模拟计算机网络的能力。

如果您想将正在运行的应用程序隔离为单独的进程,那么Doc​​ker适合您。 为何使用Docker:


  • 在操作系统级别提供虚拟化;
  • 容器共享系统的核心,作为主要OS的独立进程工作;
  • 使用cgroup的每个容器可以分别限制系统资源的消耗,例如内存消耗和CPU负载;
  • 容器的FS使用COW机制创建的,从而可以加速应用程序部署,减少内存消耗并节省磁盘空间。
  • 一个容器的已更改文件系统可以用作形成其他容器的新基本映像的基础。

Source: https://habr.com/ru/post/zh-CN474068/


All Articles