3.Docker与LXC、虚拟化技术的区别——虚拟化技术本质上是在模拟硬件,Docker底层是LXC,本质都是cgroups是在直接操作硬件
先说和虚拟化技术的区别
难道虚拟技术就做不到吗?
不不不,虚拟技术也可以做到,但是会有一定程度的性能损失,灵活度也会下降。容器技术不是模仿硬件层次,而是 在Linux内核里使用cgroup和namespaces来打造轻便的、将近裸机速度的虚拟技术操作系统环境。因为不是虚拟化存储,所以容器技术不会管 底层存储或者文件系统,而是你放哪里,它操作哪里。
这从根本上改变了我们如何虚拟化工作负载和应用程序,因为容器速度比硬件虚拟化技术更快,更加便捷,弹性扩容的更加高效,只是它的工作负载要求操作系统,而不是Linux或特定的Linux内核版本。
那VMWare就这样玩完了?
没那么快!虚拟技术相对成熟,又有广泛的工具,还有生态系统来支持它在不同环境下的配置。至于工作负载,它要求非Linux操作系统,或者只能使用特定的核心虚拟化技术。
Docker并不是LXC的替代品,Docker的底层就是使用了LXC来实现的。LXC将Linux进程沙盒化,使得进程之间相互隔离,并且能够控制各进程的资源分配。
在LXC的基础之上,Docker提供了一系列更强的功能。
这里整理《Docker进阶与实战 》中提到的几个问题,这些问题也是在面试过程中经常被问到的。
一、Docker在LXC基础上做了什么
LXC,一般指Linux Container,即内核容器技术的简称。Docker在内核容器技术上做了什么工作,简单的说,Docker在内核容器技术(Cgroup和Namespace)的基础上,提供了一个更高层的控制工具,该工具包含以下特性:
1、跨主机部署。Docker定义镜像格式,该格式将应用程序和其所依赖的文件打包到同一个镜像文件中,从而使其在转移到任何运行Docker的机器中时都可以运行,并能保证在任何机器中该应用程序执行的环境都是一样的。LXC实现了“进程沙盒”,这一重要特性是跨主机部署的前提条件,但是只有这一点是不够的,比如,在一个特定的LXC配置下执行应用程序,将该应用程序打包并拷贝到另一个LXC环境下,程序很有可能无法正常执行,因为该程序的执行依赖该机器的特定环境配置,包括网络、存储、发行版等。而Docker则将上述相关配置进行抽象并与应用程序一同打包,所以可以保证在不同硬件、不同配置的机器上Docker容器中运行的环境和其所依赖的环境配置是一样的。
2、以应用为中心。Docker为简化应用程序的部署过程做了很多优化,这一目的在Docker的API、用户接口、设计哲学和用户文档中都有体现。其Dockerfile机制大大简化和规范了应用的部署方法。
3、自动构建。Docker提供了一套能从源码自动构建镜像的工具。该工具可以灵活地使用make、maven、chef、pupper、salt、RPM和源码包等形式,将应用程序的依赖、构建工具和安装包进行打包处理,而且当前机器的配置不会影响镜像的构建过程。
4、版本管理。Docker提供了类似于Git的版本管理功能,支持追踪镜像版本,检验版本更新、提交新的版本改动和回退版本等功能。镜像的版本信息中包括制作方式和制作者信息,因此可以从生产环境回溯到上游开发人员。Docker同样实现了镜像的增量上传和下载的功能,用户可以通过获取新旧版本直接新增的镜像层来更新镜像版本,而不必下载完整镜像,类似于Git的pull命令。
5、组件重用。任何容器都可以用作生成另一个组件的基础镜像。这一过程可以手动执行,也可以写入自动化构建脚本。例如,可以创建一个包含Python开发环境的镜像,并将其作为基础镜像部署其他使用Python环境进行开发的应用程序。
6、共享。Docker用户可以访问公共的镜像Registry
7、工具生态链。
二、Docker容器和虚拟机之间有什么不同
容器与虚拟机是互补的。虚拟机是用来进行硬件划分的完美解决方案,它利用了硬件虚拟化技术,例如VT-x,AMD-V会同时通过一个hypervisor层来实现对资源的隔离;而容器则是操作系统级别的虚拟化,利用的是内核的Cgroup和NameSpace特性,此功能完全通过软件来实现,仅仅是进程本身就可以与其他进程隔开,不需要任何辅助。
Docker容器与主机共享操作系统内核,不同容器之间可以共享部分系统资源,因此容器更加轻量级,消耗的资源也更少。而虚拟机会独占分配给自己的资源,几乎不存在资源共享,各个虚拟机之间近乎完全隔离,虚拟机更加重量级,也会消耗更多的资源。
我们可以很轻松地在一台物理机上运行100个或者更多的呃Docker容器,而且不会占用太多系统资源(如果Docker占用资源不多);而在单台机器上不可能创建100台虚拟机,因为每一个虚拟机实例都会占用一个完整的操作系统所需要的所有资源。另外,Docker容器启动很快,通常是秒级甚至是毫秒级启动。而虚拟机的启动虽然会快于物理机,但是也是在数秒级甚至数十秒级。
因此,可以根据需求的不同选择相应的隔离方式。如果需要资源完全隔离并且不考虑资源消耗,可以选择使用虚拟机;而若是想隔离进程并且需要大量进程实例,则应该选择Docker.
关于Namespace机制,可以参考陈浩的两篇博客:
http://coolshell.cn/articles/17010.html
http://coolshell.cn/articles/17029.html
3.Docker与LXC、虚拟化技术的区别——虚拟化技术本质上是在模拟硬件,Docker底层是LXC,本质都是cgroups是在直接操作硬件的更多相关文章
- Docker与LXC、虚拟化技术的区别——虚拟化技术本质上是在模拟硬件,Docker底层是LXC,本质都是cgroups是在直接操作硬件
先说和虚拟化技术的区别: 难道虚拟技术就做不到吗? 不不不,虚拟技术也可以做到,但是会有一定程度的性能损失,灵活度也会下降.容器技术不是模仿硬件层次,而是 在Linux内核里使用cgroup和name ...
- docker和虚拟化技术的区别
1.docker和虚拟化技术的区别 Docker 扩展了 Linux 容器(Linux Containers),或着说 LXC,通过一个高层次的 API 为进程单独提供了一个轻量级的虚拟环境.Dock ...
- 虚拟化–操作系统级 LXC Linux Containers内核轻量级虚拟化技术
友情提示:非原文链接可能会影响您的阅读体验,欢迎查看原文.(http://blog.geekcome.com) 原文地址:http://blog.geekcome.com/archives/288 软 ...
- docker中容器和镜像的区别
自学docker过程中一直搞不明白 镜像容器的关系,网上查阅看到一篇文章觉得讲的很好,转载记录. 转自 http://blog.csdn.net/chszs/article/details/48252 ...
- 广州.NET微软技术俱乐部与其他技术群的区别
.NET和微软技术相关的微信群有不少, 那么广州.NET微软技术俱乐部与其他技术群的区别是什么呢? 有十分大的区别! 本群公告写得很清楚! 本群坚决禁止讨论“JAVA和.NET哪个好”.“NET有没有 ...
- Docker环境下的前后端分离项目部署与运维(十一)Docker Swarm技术
Docker Swarm技术 docker swarm技术(之前的docker集群都是在 一个虚拟主机上的,但是如果这个主机挂掉了over了,docker技术就是多个虚拟主机形成一个集群) Swarm ...
- RAID 2.0 技术(块虚拟化技术)
RAID 2.0 技术(块虚拟化技术) RAID 2.0 技术(块虚拟化技术),该技术将物理的存储空间划分为若干小粒度数据块,这些小粒度的数据块均匀的分布在存储池中所有的硬盘上,然后这些小粒度的数据块 ...
- [转载]CTO和技术总监区别
原文地址:http://blog.sina.com.cn/s/blog_6024cfa90101cb0h.html 技术总监(Chief Technical Officer)与CTO(Chief Te ...
- Docker公共&本地镜像仓库(七)--技术流ken
分发镜像 我们已经会构建自己的镜像了,那么如果在多个docker主机上使用镜像那?有如下的几种可用的方法: 用相同的Dockerfile在其他host上构建镜像 将镜像上传到公共registry(比如 ...
随机推荐
- 微信网页授权access_token与基础支持的access_token
问题1:网页授权access_token与分享的jssdk中的access_token一样吗? 答:不一样.网页授权access_token 是一次性的,而基础支持的access_token的是有时间 ...
- python--Wrapper
然后给大家介绍的是Wrapper(装饰器),使用广泛.python笔试,面试的话也会百分百问到的,基础和中级的知识储备还是必用的. 让我们开始. 先来一些基础相关知识 *args,**kwargs的区 ...
- 英文缩写SFR
英文缩写为SFR,是Special Function Register(特殊功能寄存器)的缩写.
- java线程安全总结 - 1 (转载)
原文地址:http://www.jameswxx.com/java/java%E7%BA%BF%E7%A8%8B%E5%AE%89%E5%85%A8%E6%80%BB%E7%BB%93/ 最近想将ja ...
- 流量操控之SSH隧道与端口转发
目 录 第1章 概述... 3 1.1. 实现命令... 3 1.2. SSH隧道类型... 3 第2章 SSH隧道... ...
- python面向对象(进阶篇)
本篇将详细介绍Python 类的成员.成员修饰符.类的特殊成员. 类的成员: 类的成员可以分为三大类:字段(变量).方法.属性. 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对 ...
- ThinkPad 触控板双指不可以滑动
我一直在想为什么,今天我想禁用触摸板的时候,我找到原因了. 是因为没有装驱动. http://think.lenovo.com.cn/support/driver/newdriversdownlist ...
- oracle(sql)基础篇系列(二)——多表连接查询、子查询、视图
多表连接查询 内连接(inner join) 目的:将多张表中能通过链接谓词或者链接运算符连接起来的数据查询出来. 等值连接(join...on(...=...)) --选出雇员的名字和雇员所在的部门 ...
- +(void)load; +(void)initialize;有什么用处?
总得来说: 1.+load方法是在main函数之前调用的: 2.遵从先父类后子类,先本类后列类别的顺序调用: 3.类,父类与分类之间的调用是互不影响的.子类中不需要调用super方法,也不会调用父类的 ...
- 《数据结构与算法分析:C语言描述》复习——第六章“排序”——冒泡排序
2014.06.17 01:04 简介: 冒泡排序是O(n^2)级别的交换排序算法,原理简单,属于必知必会的基础算法之一. 思路: 排序要进行N轮,每一轮从尾部逐个向前扫描,遇到逆序对就进行交换.确保 ...