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

时间:2015-03-17 10:39:32

标签: cloud docker virtual-machine openstack

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

1 个答案:

答案 0 :(得分:28)

这些是我可以列出的docker和VM映像之间的一些区别:

<强> 1。 Docker中的快照过程比VM更快

我们通常从基础映像开始,然后进行更改,并使用docker提交这些更改,并创建一个映像。此图像仅包含与基础的差异。当我们想要运行我们的图像时,我们还需要基础,并使用分层文件系统将我们的图像分层在基础之上。文件系统将不同的层合并在一起,我们得到了我们想要的东西,我们只需要运行它。由于docker通常建立在来自注册表的现成图像之上,因此我们很少需要自己“快照”整个操作系统。 Dockers将操作系统快照到公共映像的这种能力也使得在其他docker主机上部署变得容易。

<强> 2。 Docker的启动时间少于VM

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

<强> 4。 Docker镜像具有更强的可移植性

Docker镜像由图层组成。当我们拉动或传输图像时,只检索我们尚未在缓存中的图层。这意味着如果我们使用基于相同基本操作系统的多个图像,则仅创建或检索基础层一次。 VM映像没有这种灵活性。

<强> 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使用Union文件系统,因此进程认为整个文件系统是以读写方式挂载的。但所有更改都转到最顶层的可写层,而在下面,只读图像中的原始文件保持不变。由于图像不会改变,因此图像没有状态。

<强> 7。 VM是以硬件为中心的,而docker容器是以应用程序为中心的

假设我们有一个1GB大小的容器图像。如果我们想要使用完整虚拟机,我们需要1GB倍x所需的虚拟机数量。在docker容器中,我们可以共享1GB的大部分,如果你有1000个容器,我们仍然可能只有1GB以上的空间用于容器操作系统,假设它们都运行相同的操作系统映像。

<强> 8。支持的图像格式

Docker镜像:

  • 裸露。该图像没有容器或元数据信封。
  • OVF。 OVF容器格式。
  • AKI。亚马逊内核映像。
  • ARI。亚马逊ramdisk图像。
  • AMI。亚马逊机器映像。

虚拟机映像:

  • 生。非结构化磁盘映像格式;如果你有一个没有的文件 扩展它可能是原始格式
  • VHD。 VHD磁盘格式,a VMware,Xen的虚拟机监视器使用的通用磁盘格式 Microsoft,VirtualBox和其他人
  • 的vmdk。支持通用磁盘格式 许多常见的虚拟机监视器
  • VDI。 VirtualBox支持 虚拟机监视器和QEMU仿真器
  • 异。存档格式 用于光盘的数据内容,例如CD-ROM。
  • qcow2。 由QEMU仿真器支持,可以动态扩展 支持Copy on Write
  • AKI。亚马逊内核映像。
  • ARI。亚马逊 ramdisk图像。
  • AMI。亚马逊机器映像。