VM映像和Docker映像有什么区别?

Docker和虚拟机的镜像有什么不同吗? 除了图像格式,我无法在任何地方find任何信息。 请注意图像大小,实例创build时间,捕获时间等。谢谢!

这些是我可以列出的docker和VM镜像之间的一些差异:

1. Docker中的快照stream程比VM更快

我们通常从基础图像开始,然后进行修改,并使用docker提交这些修改,并创build一个图像。 这张图片只包含了与基地的区别。 当我们想要运行我们的图像时,我们也需要基础,并且使用分层的文件系统将我们的图像分层到基础之上。 文件系统将不同的层合并在一起,我们得到我们想要的,我们只需要运行它。 由于docker通常build立在registry的现成图像之上,所以我们很less必须自己“快照”整个操作系统。 Docker将OS快照到一个公共映像的能力也使得在其他Docker主机上的部署变得容易。

2.对于Docker来说,启动时间比虚拟机less

虚拟机通常需要几分钟才能启动,但容器需要几秒钟,有时甚至不到一秒钟。

4.docker图像具有更多的便携性

Docker镜像由层组成。 当我们拉或转移一个图像,只有我们还没有在caching中的图层被检索。 这意味着,如果我们使用基于相同基本操作系统的多个图像,则仅创build或检索基础图层一次。 虚拟机映像没有这种灵活性。

5. Docker提供图像版本

我们可以使用docker commit命令。 我们可以指定两个标志: -m-a. -m标志允许我们指定一个提交消息,就像我们在版本控制系统上提交一样:

 $ sudo docker commit -m "Added json gem" -a "Kate Smith" 0b2616b0e5a8 ouruser/sinatra:v2 4f177bd27a9ff0f6dc2a830403925b5360bfe0b93d476f7fc3231110e7f71b1c 

6. Docker镜像没有状态

在Docker术语中,只读图层称为图像。 图像永远不会改变。 由于Docker使用联合文件系统,进程认为整个文件系统是可读写的。 但所有更改都转到最上面的可写入层,而在下面,只读图像中的原始文件保持不变。 由于图像不变,图像没有状态。

7.虚拟机是以硬件为中心的,docker容器是以应用程序为中心的

假设我们有一个容量为1GB的图像。 如果我们想要使用一个完整的虚拟机,我们需要有1GB的虚拟机数量x你想要的。 在docker容器中,我们可以共享1GB的大部分内容,如果你有1000个容器,假设它们都运行相同的操作系统映像,那么容器操作系统的容量可能只有1GB左右。

8.支持的图像格式

Docker镜像:

  • 裸。 该图像没有容器或元数据信封。
  • OVF。 OVF容器格式。
  • AKI。 一个Amazon内核映像。
  • ARI。 亚马逊ramdisk映像。
  • 急性心肌梗死。 亚马逊机器的形象。

虚拟机映像:

  • 生的。 非结构化磁盘映像格式; 如果你有一个没有扩展名的文件,它可能是一个原始格式
  • VHD。 VHD磁盘格式,这是VMware,Xen,Microsoft,VirtualBox等虚拟机监视器使用的常用磁盘格式
  • VMDK。 常见的磁盘格式支持许多常见的虚拟机监视器
  • VDI。 由VirtualBox虚拟机监视器和QEMU模拟器支持
  • 异。 光盘数据内容的档案格式,如CD-ROM。
  • qcow2。 由QEMU模拟器支持,可以dynamic扩展并支持Copy on Write
  • AKI。 一个Amazon内核映像。
  • ARI。 亚马逊ramdisk映像。
  • 急性心肌梗死。 亚马逊机器的形象。