文档章节

虚拟机与Docker有何不同?

Fundebug
 Fundebug
发布于 2017/05/31 09:27
字数 1171
阅读 11
收藏 0
点赞 0
评论 0

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

原文: Comparing Virtual Machines vs Docker Containers

译者: Fundebug

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

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

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

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

理解虚拟机

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

输入图片说明

从下到上理解上图:

  • 基础设施(Infrastructure)。它可以是你的个人电脑,数据中心的服务器,或者是云主机
  • 主操作系统(Host Operating System)。你的个人电脑之上,运行的可能是MacOSWindows或者某个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容器运行多个相互隔离的应用时,如下图:

不难发现,相比于虚拟机Docker要简洁很多。因为我们不需要运行一个臃肿的从操作系统了。

从下到上理解上图:

  • 基础设施(Infrastructu](https://static.oschina.net/uploads/img/201705/31092636_YZIq.jpg "在这里输入图片标题")](https://static.oschina.net/uploads/img/201705/31092636_YZIq.jpg "在这里输入图片标题")re)
  • 主操作系统(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

欢迎加入我们FundebugDocker技术交流群: 305097057

输入图片说明

版权声明:

转载时请注明作者Fundebug以及本文地址: https://blog.fundebug.com/2017/05/31/docker-and-vm/

© 著作权归作者所有

共有 人打赏支持
Fundebug
粉丝 3
博文 71
码字总数 96130
作品 0
厦门
Docker:替代传统虚拟机的“鲸鱼”(Docker: A 'Whale' Replacing Traditional VM)

概念 Docker架构 docker与虚拟机的异同 Centos7的docker安装 docker的使用 概念 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。 Docker 可以让开发者打包他们的应...

qq_32690999
2017/12/04
0
0
docker常见问题汇总

一、需求 公司本地环境上了xen和kvm,但上周,CTO跑过来跟我说,你这几天熟悉一下docker,公司打算利用docker做自动化持续集成,和快速部署,原有测试环境,可以先跑着。我想起去年,申请购入...

zouqingyun
2016/06/02
0
0
docker machine 安装、配置、使用实验

什么是docker machine? docker machine是docker提供的一个命令行工具,通过这个工具可以远程管理、控制多台主机,例如在每台主机上安装、配置docker,在远程主机上执行各种docker指令等。详细...

dkfajsldfsdfsd
04/12
0
0
docker 究竟是个什么东西?能解决什么问题?有什么好处?

看了网上的文章,看不懂,什么容器,什么虚拟化隔离,完全搞不懂这些词语。 docker 究竟是个什么东西?能解决什么问题?有什么好处? 我的理解是 docker 是一个小软件 可以运行在 任何它支持...

foxidea
2015/04/10
1K
1
Java程序员需要注意的五大Docker误区

Docker现在很火,容器技术看上不无所不能,但这实际上是一种误解,不要被炒作出来的泡沫迷住双眼,本文抛去炒作,理性地从Java程序员的角度,列举出Docker目前的五大误区,帮助你更好地理解D...

紫魅编程
2016/09/12
341
1
对Docke容器的理解和对虚拟机的区别

Docker的含义: 是一种用了新颖方式实现的轻量级虚拟机 专业叫法是应用容器(ApplicationContainer) 它能够在相同的旧服务器上运行的更多的应用程序 它使开发人员能够快速创建简单的,现成的运...

余梦似海
2017/04/10
0
0
『中级篇』docker-Machine的本地使用(十)

在第九篇说到了Vagrant,可以通过网络下载的的方式来获取,在补充个知识点,就是Vagrant还有个特别重要的特点。 Vagrant自动配置启动后的shell脚本 在window上演示,mac上同理,找到vagrant...

IT故事会
06/06
0
0
Docker Swarm 入门:单机创建 Swarm 集群

文/ANOYI ► Swarm 简介 swarm 是一组可以管理 docker 容器的机器集群,在 swarm 中的机器分两种类型:Manager 和 Worker,二者都可以运行容器,区别在于 Manager 拥有管理权,一些命令只能在...

Anoyi
01/06
0
0
【Docker】容器、虚拟机与Docker概念全解析

导读 Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。本文立足于新手,从容器和虚拟机两...

linuxprobe16
2016/12/24
10
0
Docker实操:1.制作Erlang开发环境镜像

1.安装docker toolbox 2.安装docker虚拟机 3.连接虚拟机 4.拉取镜像通过第三步以后,你已经连接上虚拟机了。因此,你可以直接在里面来拉取docker的镜像了。我这里拉取了ubuntu最新的镜像。命...

会飞的杨先生
2015/12/09
124
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring Boot 整合 MyBatis/通用Mapper/PageHelper分页插件

整合MyBatis 整合通用Mapper 1. POM依赖配置 <properties><mapper.starter.version>2.0.3-beta1</mapper.starter.version></properties><!-- 通用Mapper --><dependency><groupId>t......

OSC_fly
7分钟前
0
0
CentOS7 双网卡绑定

环境 操作系统 CentOS7.5,禁用 NetworkManager 服务 网卡 eth0 网卡 eth1 绑定网卡 bond0 网卡 eth0 配置 修改 /etc/sysconfig/network-scripts/ifcfg-eth0 TYPE=EthernetBOOTPROTO=noneD......

Colben
8分钟前
0
0
zk实战--rpc框架集群化

在看此篇内容时需要浏览下面内容 netty实战--手写rpc框架 前文功能简介以及功能扩充 利用netty来实现一个点对点的rpc调用。客户端和服务端都是靠手写地址进行socket同学的,无法1对多,也无法...

xpbob
25分钟前
9
0
springboot 发送邮件

获取授权码 添加配置 # 账号和密码spring.mail.username=aaa@qq.comspring.mail.password=bbb# 服务器地址spring.mail.host=smtp.qq.comspring.mail.properties.mail.smtp.ssl.en...

阿豪boy
25分钟前
0
0
如何使用GNU Ring?

文章名:如何使用GNU Ring? 作者:冰焰火灵X 1079092922@qq.com 文章许可:CC BY-SA 4.0 ##1. 安装 下载GNU Ring 点击左边选择你的系统版本(这里以 GNU/Linux 为例,我使用的是Mint 18.3)...

ICE冰焰火灵X
28分钟前
3
0
深入理解springMVC

什么是spring MVC Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而...

Java填坑之路
34分钟前
1
0
《射雕英雄传》书摘

1. 我虽是个飘泊江湖的贫家女子,可不是低三下四、不知自爱之人。你如真心爱我,须当敬我重我。我此生决无别念,就是钢刀架颈,也决意跟定了你。将来……将来如有洞房花烛之日,自然……自能...

k91191
44分钟前
0
0
解决:modal中datePicker 选中时,会触发modal的hidden.bs.modal事件

最近项目中发现了一个bug,具体表现为选中模态框上datepicker组件上的日期时,会触发模态框的关闭事件,导致数据编辑无法正常进行。网上搜索了下,解决方法如下: $('.datepicker').on('hid...

Funcy1122
48分钟前
0
0
Redis分布式锁的正确实现方式

前言 分布式锁一般有三种实现方式: 1.数据库乐观锁 2.基于Redis的分布式锁; 3.基于Zookeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis实现分布式锁。虽然网上已经有各种介绍Redis...

大海201506
今天
2
0
ClassNotFoundException: javax.el.ELManager

这个是因为tomcat7中的el-api2.2,有些版本太低,建议升级tomcat到8.0,利用el-api3.0就会解决这个问题。

无语年华
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部