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(比如 ...
随机推荐
- linux文件属性更改命令
chown 当我们要改变一个文件的属主,我们所使用的用户必须是该文件的属主而且同时是目标属组成员,或超级用户.只有超级用户的才能改变文件的属主. chown语法: chown [选项]...[所有者 ...
- 分享spring、spring boot、spring cloud一些学习资源,从基础知识到项目实战
1.spring注解驱动开发,学习spring boot和spring cloud必备知识 链接: https://pan.baidu.com/s/1xhULzLlpkERhoMi1G5Lgfg 密码 ...
- echarts零基础快速入门
第一步:得到这个dom对象.然后进行各种操作. var myChart = echarts.init(document.getElementById('item1')); 第二步:所有的配置项全部放在 ...
- Fiddler(一)
Fiddler:学习scrapy,不只是满足于网页上爬去信息的成功乐趣,现在开始接触爬去手机信息了,不好解决,知道过程不会轻松,但自己想去尝试.QAQ 写这篇博客是基于以下的几位大神学习笔记,我只是做 ...
- Redis 持久化操作
hash类型 类比:mysql数据库存储数据 持久化操作 以本身的数据以文件形式保存到硬盘中 手动快照持久化 i 备份机制(频率) vi redis.conf save 900 1 900s如果一个 ...
- 使用shell脚本依据分区信息分批次的下载hive表格数据
今天的业务场景大概是这样的,我想把hive表格下载到本地文件系统,然后把这个文件传送到另一个服务器上. 但是这个业务场景一个核心问题就是说我本地机器内存有限,hive表格大概是70G,我是不可能全部下 ...
- PHP.31-TP框架商城应用实例-后台7-商品会员修改-页面优化,多表数据更新
商品表修改功能 1.页面优化,类似添加页面 <layout name="layout" /> <div class="tab-div"> ...
- 3336 /P1948电话网络(二分答案)
3336 电话网络 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题目描述 Description 由于地震使得连接汶川县城电话线全部损坏,假如你是 ...
- 被relativeLayout的grivate center 折腾死了
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android=&q ...
- Windows下zookeeper注册中心的安装和启动
zookeeper的安装支持单机模式和集群模式 下载地址:http://www.apache.org/dyn/closer.cgi/zookeeper/,当前稳定版本为3.4.8 单机模式 修改zoo ...