虚拟机与Docker有何不同?

本文讲的是虚拟机与Docker有何不同?【编者的话】各种虚拟机技术开启了云计算时代;而Docker,作为下一代虚拟化技术,正在改变我们开发、测试、部署应用的方式。那虚拟机与Docker究竟有何不同呢?

【3 天烧脑式 Docker 训练营 | 上海站】随着Docker技术被越来越多的人所认可,其应用的范围也越来越广泛。本次培训我们理论结合实践,从Docker应该场景、持续部署与交付、如何提升测试效率、存储、网络、监控、安全等角度进行。

首先,大家需要明确一点,Docker容器不是虚拟机。

2014年,当我第一次接触Docker的时候,我把它比做一种轻量级的虚拟机。这样做无可厚非,因为Docker最初的成功秘诀,正是它比虚拟机更节省内存,启动更快。Docker不停地给大家宣传,"虚拟机需要数分钟启动,而Docker容器只需要50毫秒"。

然而,Docker容器并非虚拟机,我们不妨来比较一下它们。

理解虚拟机

使用虚拟机运行多个相互隔离的应用时,如下图:

从下到上理解上图:

  • 基础设施(Infrastructure)。它可以是你的个人电脑,数据中心的服务器,或者是云主机。
  • 主操作系统(Host Operating System)。你的个人电脑之上,运行的可能是MacOS,Windows或者某个Linux发行版。
  • 虚拟机管理系统(Hypervisor)。利用Hypervisor,可以在主操作系统之上运行多个不同的从操作系统。类型1的Hypervisor有支持MacOS的HyperKit,支持Windows的Hyper-V以及支持Linux的KVM。类型2的Hypervisor有VirtualBox和VMWare。
  • 从操作系统(Guest Operating System)。假设你需要运行3个相互隔离的应用,则需要使用Hypervisor启动3个从操作系统,也就是3个虚拟机。这些虚拟机都非常大,也许有700MB,这就意味着它们将占用2.1GB的磁盘空间。更糟糕的是,它们还会消耗很多CPU和内存。
  • 各种依赖。每一个从操作系统都需要安装许多依赖。如果你的的应用需要连接PostgreSQL的话,则需要安装libpq-dev;如果你使用Ruby的话,应该需要安装gems;如果使用其他编程语言,比如Python或者Node.js,都会需要安装对应的依赖库。
  • 应用。安装依赖之后,就可以在各个从操作系统分别运行应用了,这样各个应用就是相互隔离的。

理解Docker容器

使用Docker容器运行多个相互隔离的应用时,如下图:

  • 主操作系统(Host Operating System)。所有主流的Linux发行版都可以运行Docker。对于MacOS和Windows,也有一些办法"运行"Docker。
  • Docker守护进程(Docker Daemon)。Docker守护进程取代了Hypervisor,它是运行在操作系统之上的后台进程,负责管理Docker容器。
  • 各种依赖。对于Docker,应用的所有依赖都打包在Docker镜像中,Docker容器是基于Docker镜像创建的。
  • 应用。应用的源代码与它的依赖都打包在Docker镜像中,不同的应用需要不同的Docker镜像。不同的应用运行在不同的Docker容器中,它们是相互隔离的。

对比虚拟机与Docker

Docker守护进程可以直接与主操作系统进行通信,为各个Docker容器分配资源;它还可以将容器与主操作系统隔离,并将各个容器互相隔离。虚拟机启动需要数分钟,而Docker容器可以在数毫秒内启动。由于没有臃肿的从操作系统,Docker可以节省大量的磁盘空间以及其他系统资源。

说了这么多Docker的优势,大家也没有必要完全否定虚拟机技术,因为两者有不同的使用场景。虚拟机更擅长于彻底隔离整个运行环境。例如,云服务提供商通常采用虚拟机技术隔离不同的用户。而Docker通常用于隔离不同的应用,例如前端,后端以及数据库。

如果你对Docker感兴趣的话,不妨学习一下Dive Into Docker course

欢迎加入我们Fundebug的Docker技术交流群: 305097057。

原文链接: Comparing Virtual Machines vs Docker Containers(翻译:Fundebug

为了保证可读性,本文采用意译而非直译。另外,本文版权归原作者所有,翻译仅用于学习。

原文发布时间为:2017-05-31

本文作者:Fundebug

原文标题:虚拟机与Docker有何不同?

时间: 2024-10-26 05:42:49

虚拟机与Docker有何不同?的相关文章

初识Docker,概念-架构-相关术语

介绍Docker概念与平台架构,相关术语 Docker的历史 诞生 Docker 是Docker.Inc 公司开源的一个基于 LXC技术之上构建的Container容器引擎,基于Google 公司推出的 Go语言实现的云开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目.项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护.而且居然只有 1W 行就完成了这些功能.如果想尝试一下的话可以看 官方介绍了.   D

有了Docker的程序猿们就能开启“上帝视角”?

现在,如果有程序猿说不知道Docker,这将是难以想象的. 百科是这样描述Docker的."Docker是dotCloud开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何接口."而更为通俗的说法是,Docker是轻量的虚拟化技术,它拥有"统一.一次操作和随处运行"的特性. 在很多程序媛心中,这应该是男神级的程序猿了吧 今年是Docker

Docker缩短新开发者熟悉项目时间的五个方面

本文讲的是Docker缩短新开发者熟悉项目时间的五个方面[编者的话]本文介绍了如何使用Docker容器来减少新员工入职加入团队的准备启动时间的五个方法,包括Docker容器是唯一的依赖.容易知道如何构建环境.跨机器的便携性.一致性的开发环境以及轻量级的环境. 无论公司规模大小,加入新的开发者并且想要让其尽快达到能够干活的程度,仍然是一个显著的挑战.新开发者被雇佣和生产(作者所谓的生产可以看"注1")的时间越长,需要耗费的时间就越长,尤其是一些经验丰富的开发者. 鉴于此,有效的入职工作流

我的碎碎念:Docker入门指南

本文讲的是我的碎碎念:Docker入门指南,[编者的话]之前曾经翻译过很多Docker入门介绍的文章,之所以再翻译这篇,是因为Anders的角度很独特,思路也很调理.你也可以看下作者的演讲稿<Docker, DevOps的未来>.本文介绍了Docker的一些基本概念.诱人的特性.Docker的工作原理.日常管理基本操作,以及一些Docker的问题的解决方案. 什么是Docker,你应该知道些什么? 相比很多人的解释,我相信说Docker是一个轻量级的虚拟机更容易理解.另外一种解释是:Docke

【转载】从Docker容器漏洞谈Docker安全

近日,一篇在Docker博客上发表的文章显示,Docker的容器已经被突破,并且能够遍历宿主机的文件了.由于Docker的轻量,快速等等优点,让Docker在PaaS[注]领域愈发火热,自然也就吸引了安全人员对其进行研究.这篇文章无疑将Docker推进了一个新纪元:放开应用,想想安全. 不要给用户root权限 该文章的作者强调:只有在容器内以 root 权限运行不受信任的应用程序,才有可能触发这个漏洞.而这是我们不推荐的运行 Docker Engine 的方式. 这句话可以分两个层次来解读,首先

docker-一台服务器跑同一个App的多个Docker Container,性能会怎样?

问题描述 一台服务器跑同一个App的多个Docker Container,性能会怎样? Container是用namespace 来做隔离的,那么问题来了 如果我在一台服务器上, 使用同一个应用的image (比如 WordPress)起了 n个 container 那么这个服务器满载的时候性能 和 同样一台服务器只用一个 Container 处理时满载的性能有什么区别? 按照Container的说法,runtime overhead 很低,是不是这两个场景性能差不了太多 ? 求高手解答 解决方

Docker 容器概念

不玩虚的, 当然更畅快 docker 与虚拟机(vm)对比: lark_01_vm_vs_docker 虚拟机运行在虚拟硬件上, 应用运行在虚拟机内核上.而 docker daemon 是宿主机上的一个进程, 应用只是 docker daemon 的一个子进程, 换句话说, 应用直接运行在宿主机内核上. 虚拟机需要特殊硬件虚拟化技术支持, 因而只能运行在物理机上.docker 没有硬件虚拟化, 因而可以运行在物理机.虚拟机, 甚至 docker 容器内(嵌套运行). 因为没有硬件虚拟化及多运行一

MAC环境docker容器中的django运行,修改views.py后无变化

问题描述 环境是MAC,上面运行了一个docker容器,在容器里,执行pythonmanage.pyrunserver0.0.0.0:8000来运行django,并监控8000端口.docker创建容器使用的命令:dockerrun-d-v~/code:/home/work/code-p8197:8000code所以,在MAC上.虚拟机上以及docker容器中,同时存在一个code目录,里面代码是一样的,而django的manage.py也在code里面.当我在MAC上修改了django的vie

《Docker技术入门与实战》——2.2 安装Docker

2.2 安装Docker Docker支持在主流的操作系统平台上使用,包括Ubuntu.CentOS.Windows以及MacOS系统等.当然,在Linux系列平台上是原生支持,使用体验也最好.Ubuntu 1. Ubuntu 14.04及以上版本 Ubuntu 14.04版本官方软件源中已经自带了Docker包,可以直接安装: $ sudo apt-get update $ sudo apt-get install -y docker.io $ sudo ln -sf /usr/bin/doc