docker和虚拟化技术的区别

Docker 提供了一个可以运行你的应用程序的封套(envelope),或者说容器。它原本是 dotCloud 启动的一个业余项目,并在前些时候开源了。它吸引了大量的关注和讨论,导致 dotCloud 把它重命名到 Docker Inc。它最初是用 Go 语言编写的,它就相当于是加在 LXC(LinuX Containers,linux 容器)上的管道,允许开发者在更高层次的概念上工作。

Docker 扩展了 Linux 容器(Linux Containers),或着说
LXC,通过一个高层次的 API 为进程单独提供了一个轻量级的虚拟环境。Docker 利用了 LXC, cgroups 和 Linux
自己的内核。和传统的虚拟机不同的是,一个 Docker
容器并不包含一个单独的操作系统,而是基于已有的基础设施中操作系统提供的功能来运行的。

Docker类似虚拟机的概念,但是与虚拟化技术的不同点在于下面几点:

1.虚拟化技术依赖物理CPU和内存,是硬件级别的;而docker构建在操作系统上,利用操作系统的containerization技术,所以docker甚至可以在虚拟机上运行。

2.虚拟化系统一般都是指操作系统镜像,比较复杂,称为“系统”;而docker开源而且轻量,称为“容器”,单个容器适合部署少量应用,比如部署一个redis、一个memcached。

3.传统的虚拟化技术使用快照来保存状态;而docker在保存状态上不仅更为轻便和低成本,而且引入了类似源代码管理机制,将容器的快照历史版本一一记录,切换成本很低。

4.传统的虚拟化技术在构建系统的时候较为复杂,需要大量的人力;而docker可以通过Dockfile来构建整个容器,重启和构建速度很快。更重要的是Dockfile可以手动编写,这样应用程序开发人员可以通过发布Dockfile来指导系统环境和依赖,这样对于持续交付十分有利。

5.Dockerfile可以基于已经构建好的容器镜像,创建新容器。Dockerfile可以通过社区分享和下载,有利于该技术的推广。

Docker
会像一个可移植的容器引擎那样工作。它把应用程序及所有程序的依赖环境打包到一个虚拟容器中,这个虚拟容器可以运行在任何一种 Linux
服务器上。这大大地提高了程序运行的灵活性和可移植性,无论需不需要许可、是在公共云还是私密云、是不是裸机环境等等。

Docker也是一个云计算平台,它利用Linux的LXC、AUFU、Go语言、cgroup实现了资源的独立,可以很轻松的实现文件、资源、网络等隔离,其最终的目标是实现类似PaaS平台的应用隔离。

Docker 由下面这些组成:

1. Docker 服务器守护程序(server daemon),用于管理所有的容器。

2. Docker 命令行客户端,用于控制服务器守护程序。

3. Docker 镜像:查找和浏览 docker 容器镜像。

2 docker特性

文件系统隔离:每个进程容器运行在完全独立的根文件系统里。

资源隔离:可以使用cgroup为每个进程容器分配不同的系统资源,例如CPU和内存。

网络隔离:每个进程容器运行在自己的网络命名空间里,拥有自己的虚拟接口和IP地址。

写时复制:采用写时复制方式创建根文件系统,这让部署变得极其快捷,并且节省内存和硬盘空间。

日志记录:Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索。

变更管理:容器文件系统的变更可以提交到新的映像中,并可重复使用以创建更多的容器。无需使用模板或手动配置。

交互式Shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互shell。

3 两个基础概念images与container

Container和Image
在Docker的世界里,Image是指一个只读的层(Layer),这里的层是AUFS里的概念,最直观的方式就是看一下docker官方给出的图:

Docker使用了一种叫AUFS的文件系统,这种文件系统可以让你一层一层地叠加修改你的文件,最底下的文件系统是只读的,如果需要修改文件,AUFS会增加一个可写的层(Layer),这样有很多好处,例如不同的Container可以共享底层的只读文件系统(同一个Kernel),使得你可以跑N多个Container而不至于你的硬盘被挤爆了!这个只读的层就是Image!而如你所看到的,一个可写的层就是Container。

那Image和Container的区别是什么?很简单,他们的区别仅仅是一个是只读的层,一个是可写的层,你可以使用docker
commit
命令,将你的Container变成一个Image,也就是提交你所运行的Container的修改内容,变成一个新的只读的Image,这非常类似于git
commit命令。

时间: 2024-08-11 15:04:17

docker和虚拟化技术的区别的相关文章

3.Docker与LXC、虚拟化技术的区别——虚拟化技术本质上是在模拟硬件,Docker底层是LXC,本质都是cgroups是在直接操作硬件

先说和虚拟化技术的区别 难道虚拟技术就做不到吗? 不不不,虚拟技术也可以做到,但是会有一定程度的性能损失,灵活度也会下降.容器技术不是模仿硬件层次,而是 在Linux内核里使用cgroup和namespaces来打造轻便的.将近裸机速度的虚拟技术操作系统环境.因为不是虚拟化存储,所以容器技术不会管 底层存储或者文件系统,而是你放哪里,它操作哪里. 这从根本上改变了我们如何虚拟化工作负载和应用程序,因为容器速度比硬件虚拟化技术更快,更加便捷,弹性扩容的更加高效,只是它的工作负载要求操作系统,而不是

Docker容器虚拟化技术

Docker是近十年软件工程领域最大的革命.Docker的技术可以完全存驻整个软件的开发.测试.部署和运维等软件生产的方方面面的环节. 提到Docker,也不得不提虚拟化,因为大家谈云计算的时候,也不得不提虚拟化技术.Docker所代表的虚拟化技术和我们以前谈的云计算的虚拟化技术怎么区别呢?以前我们谈云计算的虚拟化技术都是一些譬如Vmware或者是openstack,这些为代表的虚拟化技术都是比较重量级的虚拟化.以vmware举例,vmware大家都知道,他虚拟化的时候是将传统的一台计算机抽象成

dcos对虚拟化的影响,docker和虚拟化技术会怎么去选择?

---20160509运维之家新的论题--上午茶时间到喽,今天我们讨论的话题是:dcos对虚拟化的影响,docker和虚拟化技术会怎么去选择? 红颜醉小生: docker容器虚拟化可以提供更多的资源利用率 蝎: 现在的技术都在努力让上层应用和底层应用分开.用更为简便和兼容的中间系统来衔接.可以避免一以前经常遇到的软硬件的升级兼容问题.对于维护也应该是起了很大的简化作用.应该以后的虚拟化会完全成为这样的模式吧.作为中间的衔接.目前我们选择的是VMWARE虚拟化.因为应用的业务少.而且系统不一.多数

3.docker学习之docker与虚拟化

虚拟化技术是一个总称,是一系列实现虚拟技术的统称.从广义上来说,虚拟化技术包括了虚拟机技术和容器技术, 所谓虚拟化技术最大的特点就是将一个真实的机器进行虚拟地分割,然后分割出来的部分可以独立使用 有人说:"Docker是虚拟化技术." 有人却说:"虚拟化与Docker容器之争." 那么,到底Docker是不是虚拟化技术,如果是,为啥又说"之争?" 其实,准确来说,Docker是一种容器级虚拟化技术. 关于虚拟机,官方的说法是:虚拟机(Virtua

Xen虚拟化技术中PV和HVM的区别

转自 这里 Xen是一个开源的type-1或者裸机管理程序,它使得一个物理主机能够同时并行运行多个相同的或者不同的操作系统实例.Xen是目前唯一的开源可得的type-1管理程序.Xen被应用于许多商业和开源的应用程序中,比如:服务器虚拟化(server virtualization).基础设施即服务(Infrastructure as a Service).桌面虚拟化(desktop virtualization).安全应用程序(security applications).嵌入式和硬件设备(e

Docker引领Container虚拟化技术浪潮

今年的技术领域关注在人们热烈讨论的云基础建设,其中刚开始起步的Docker,作为一个超轻量化容器应用,仅次于OpenStack成为最受欢迎的云开源项目,VMware.谷歌.微软等纷纷和Docker展开合作. 云计算的明日之星Docker Docker的本质是Container,被形象地看作一个应用封装容器,以往开发者开发一款应用,需要考虑硬件.操作系统.运行环境的适配,有了容器就不用考虑这些了.现在开发者只需专注于开发软件,不需要考虑在哪运行自己的软件,这也是云计算的发展方向. Docker因其

XEN、VMware和Hyper-V三种虚拟化技术切割的VPS有什么区别?

首先,先来了解一下XEN.VMware和Hyper-V: 1. Xen XEN 是英国剑桥大学计算机实验室开发的一个虚拟化开源项目,XEN 可以在一套物理硬件上安全的执行多个虚拟机,它和操作平台结合的极为密切,占用的资源最少. Xen通过一种叫做准虚拟化的技术获得高性能,甚至在某些与传统虚拟技术极度不友好的架构上(x86),Xen也有上佳的表现.与那些传统通过软件模拟实现硬件的虚拟机不同,在Intel VT-X支持下3.0版本之前的Xen需要系统的来宾权限,用来和Xen API进行连接. 2.

虚拟化技术原理(CPU、内存、IO)

本文来自:http://www.ywnds.com/?p=5856 虚拟化 云计算现在已经非常成熟了,而虚拟化是构建云计算基础架构不可或缺的关键技术之一. 云计算的云端系统, 其实质上就是一个大型的分布式系统. 虚拟化通过在一个物理平台上虚拟出更多的虚拟平台, 而其中的每一个虚拟平台则可以作为独立的终端加入云端的分布式系统. 比起直接使用物理平台, 虚拟化在资源的有效利用. 动态调配和高可靠性方面有着巨大的优势. 利用虚拟化, 企业不必抛弃现有的基础架构即可构建全新的信息基础架构,从而更加充分地

虚拟化技术基础

摘要 虚拟化是云计算系统中的一种基础技术,可以说当前一个云计算服务必定是构建在虚拟化的基础上的.本文首先介绍了不同抽象层次的虚拟化技术,之后对应用广泛的系统级虚拟化和操作系统级虚拟化进行了更详细的分类和描述,最后介绍了各种典型虚拟化方案的具体实现. 虚拟化技术简介 首先,什么是计算机?现在使用的计算机都离不开冯诺依曼体系结构,如图1所示,有输入设备.输出设备.存储器.cpu这就算是完整的计算机硬件环境了(当然还需要网卡.显卡等等).虚拟化技术就是在一台机器上模拟出独立的cpu.存储器等使得同一台