Docker,容器,虚拟机和红烧肉
Docker火了,有多火你自己看看下面的统计数据就知道了
在发布4个月的时间里,下载量就超过50000次,github上收到超过4000个star,涌现了超过100个贡献者,并且有超过150个项目和超过1000个产品开始使用docker。
最有意思的事情是,在docker本身还没有稳定之前,就有如RedHat和AWS这样的公司为其提供官方支持,很多开发者和公司就急不可耐的把它用到生产环境,连docker自己的CEO都要跳出来劝说大家稍安勿躁,我们还没有准备好嘞。在整个IT软件发展历史中,好像很少有这种情况,特别是这种企业级运维相关的系统,一般大家都是慎之又慎,为何这次如此不谨慎,如此不认真,如此不负责任把还在beta阶段的系统上线运行?
我记得2014年8月,这时距离docker发布仅仅1年的时间,我与湖南某家大型媒体的研发中心交流,开发人员已经在使用docker运行他们的系统,而且有些已经进入生产环境。而在过去的2年里,每一个我所接触的客户,从C-level的管理人员,到中层管理者,到开发人员都在提这个东西。
它到底是什么?这可能是每一个IT从业者都想搞明白的问题。
Docker是什么?容器又是什么?
Docker 直译:码头工人。是在码头上搬运货物的工人
容器 英文:Container,如果再翻译回来就有2个不同的释义:集装箱/容器。
如果按照这世界上大多数正常人的理解,大家会把 Docker(码头工人)和 Container (集装箱)这一对事物放在一起,他们的关系一目了然:码头工人搬运集装箱。但是如果按照这世界上另外的一类人(程序员)的理解,我们会这样组合 ,Docker (代码集装箱搬运工)和 Container (容器)。
Docker与容器是完全2个不同的东西,Docker是用来组装/搬运/拆包容器的工具。当然也可以是人,我们原来这些苦逼的程序员谁没干过zip/copy/paste/unzip的工作呢?其实Docker就是这样一个工具,用来打包 (build)/传送(push/pull)/拆包 (run) 那些需要运行的应用。而容器就是那个包。

那么容器又是什么?
其实和集装箱很类似,就是把那些需要放在一起从A地运送到B地运行的,不能和其他程序混杂的代码封装成的一个包而已。这个概念从计算机出现的那天基本上就存在了,只是这么多年我们一直在不停的改进,但从来没有一个像docker这样的工具让容器的使用变的如此简单。在Unix/Linux的世界里,它曾将叫做 Process Container,现在被称为Control Group (cGroup);在Windows世界里,我们曾经有组件。他们的目的都一样,为了把程序从A地运送到B地,同时确保他们可以相互隔离的运行。
Docker绝对不等同于容器。一个是干活的人,一个是被搬运的物品,能一样吗?但是我仍然在各种技术文章,会议演讲上看到和听到将他们混为一谈的说法。实在觉得需要给他们正名,也是今天写这个文章的主要原因。
Docker,容器与虚拟机有啥区别?
在每一篇介绍Docker的文章里面都会看到与虚拟机比较的内容,其实我觉得这完全是拿苹果和香蕉比较,它们完全不具备可比性,至少在技术上!
大家为啥要这样比较,主要目的是让那些不了解IT但是却在管理IT的人(对,就是你的领导和你的客户)理解为啥他们好不容易,花了n多钱建立起了虚拟化平台/私有云,现在还要再花钱搞容器,搞docker。对的,这纯粹是个市场行为,与技术无关,因为他们在技术上不具备可比性。
惯常的说法,容器启动迅速(对,它只需要加载那些当前应用的进程)虚拟机启动缓慢(废话,它要加载一堆和应用无关的进程好吗)。你试试把100个应用打包到一个容器里面然后启动它,估计你一定会被98%的Windows用户打败。
给你一个hyper-v, vmware, kvm你跑不了容器,你还是需要在上面启动虚拟机,然后才能运行容器。就好像你要在家里提供100个品类的菜单,然后让你儿子每天回来点餐,给他个沙漏,然后说你随便点,我保证在10分钟内上菜。你当你是谢霆锋呢?人家谢大厨后面有10个帮厨,10个采购,10个餐厅经理,10个服务员,做的菜都是提前腌制的。你就算有三头六臂也只能说:臣妾做不到啊!
所以,容器之所以快,是把每次都要启动操作系统的操作预先完成了,这样只需要启动应用本身而已。而且,容器不会比直接启动一个应用快,甚至还会更慢一点。
然并卵,那我要这七十二变有何用?
牢骚发够了,还是说说Docker到底有啥用?Docker这个搬运工与其他搬运工不同的是,他在组装容器的时候会把应用需要的其他配件都放在一个集装箱里。这样,集装箱到货以后,直接开包就可以完成应用组装;不用再到其他地方七拼八凑的去找各种配件了。这就好比你想做红烧肉,原来的应用打包只给你打包了肉(应用),别的什么八角,香叶,冰糖,生抽老抽(应用依赖环境)都不带;现在商家提供一站式服务,一个包里不光有肉,还有七七八八所有的东西。你家里有炉子,有锅就够了(操作系统)。
另外,Docker厉害的地方在于,它不光提供了这些配料,还把物流给你搞定了。我们现在可以直接向商家(Docker Hub)下单,商家送货上门(Docker Pull),你准备好炉子和锅(操作系统),直接下锅(Docker Run),菜就上桌喽。
最后,用一句话定义Docker,那就是:优化应用运维过程的工具和生态系统。
晚上吃红烧肉!祝大家胃口好!

相关资料:
- 10月活动预告《在Azure上搭建容器化DevOps数据中心》
- Ignite2016 演示视频 – 容器化DevOps发布管道
- docker4dotnet 系列文章
- docker – 你应该知道的10件事
- DockerCon 2016 – 微软带来了什么?
请关注微信公众号 【devopshub】,获取更多关于DevOps研发运维一体化的信息

Docker,容器,虚拟机和红烧肉的更多相关文章
- 为什么Docker比虚拟机快?
1.Docker有着比虚拟机更少的抽象层,由于Docker不需要Hypervisor实现硬件资源虚拟化,运行在Docker容器上的程序直接使用的都是实际物理机的硬件资源,因此在Cpu.内存利用率上Do ...
- docker容器介绍
Docker容器 一.什么是Docker? Docker时Docker.Lnc公司开源的一个基于LXC技术之上搭建的Container容器引擎,源代码托管在Git ...
- 三文搞懂学会Docker容器技术(上)
1,Docker简介 1.1 Docker是什么? Docker官网: https://www.docker.com/ Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2. ...
- 在Windows宿主机中连接虚拟机中的Docker容器
1. 简单拓扑图
- Windows连接Linux虚拟机里面的Docker容器
一.Windows.Linux虚拟机.docker关系图 如果此时在Windows宿主机中pingDocker容器是ping不同的,因为在宿主机上没有通往172.17.0.0/24网络的路由,宿主机会 ...
- 问题:宿主机访问不到虚拟机内的docker容器
问题描述:初学Docker,主机Windows 10,虚拟机Cent OS7 运行了一个docker容器(Tomcat7),宿主机无法访问容器运行的服务. 问题原因:宿主机无法访问docker容器ip ...
- Docker:虚拟机挂起后,再启动docker容器连接失败
问题描述 当我们使用VMware15 Pro 创建虚拟机并运行Linux搭建的Docker时,挂起虚拟机后再次运行发现访问Docker容器失败. 解决方式 我们正常的挂起其实是:挂起客户机,博主尝试 ...
- Docker容器和虚拟机区别
Docker .虚拟机之间区别 虚拟机技术的缺点: 1.资源占用太多 2.冗余步骤多 3.启动很慢 容器化技术 1.服务器资源利用率高 2.比较轻量化 3.打包镜像测试,一键运行 比较Docker和虚 ...
- docker——容器安装tomcat
写在前面: 继续docker的学习,学习了docker的基本常用命令之后,我在docker上安装jdk,tomcat两个基本的java web工具,这里对操作流程记录一下. 软件准备: 1.jdk-7 ...
- 理解Docker(4):Docker 容器使用 cgroups 限制资源使用
本系列文章将介绍Docker的有关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...
随机推荐
- apache服务器中设置目录不可访问
<Directory "d:/amp/apache/htdocs/images"> Allow from all Options None</Dire ...
- Xcode制作插件
转发至:https://onevcat.com/2013/02/xcode-plugin/ Xcode 4 插件制作入门 本文欢迎转载,但烦请保留此行出处信息:http://www.onevcat.c ...
- Delphi XE7,Rad Studio XE7 官方下载(附Delphi XE7破解),更新Update1(转)
源:http://blog.csdn.net/maxwoods/article/details/39024525
- 【BZOJ 1572】 1572: [Usaco2009 Open]工作安排Job(贪心+优先队列)
1572: [Usaco2009 Open]工作安排Job Description Farmer John 有太多的工作要做啊!!!!!!!!为了让农场高效运转,他必须靠他的工作赚钱,每项工作花一个单 ...
- 已经安装了Myeclipse8.5 的情况下,激活myeclipse10.7要注意
使用下载好的10.7的包里的激活文件和提供的激活方法激活,不成功,在网上搜索了很多方法试过也不成功,最后打开安装目录D:\MyEclipse 10下的myeclipse.ini文件,发现如下内容: . ...
- IP组播技术介绍及实现例子
引 言 近年来,随着Internet的迅速普及和爆炸性发展,在Internet上产生了许多新的应用,其中不少是高带宽的多媒体应用,譬如网 络视频会议.网络音频/视频广播.AOD/VOD.股市行情发布. ...
- 好用的消息对话框-TipsWindown
TipsWindow的官网地址为:http://leotheme.cn/javascript/jquery-plugins-tipswindow-2-0.html 这个是一个爱好者维护的!在这里感谢这 ...
- Ubuntu和win10双系统Grup无法引导解决方案
通常我们经常安装双系统, 但是有时候安装完系统无法正常引导, 以下就说明Ubuntu和win10双系统, win10在grub界面不断循环的解决方案 直接在win10启动项目上按e进入编辑模式 在文档 ...
- OPENCV基本滤波算法
图像滤波的主要目的是为了在保留图像细节的情况下尽量的对图像的噪声进行消除,从而是后来的图像处理变得更加的方便. 图像的滤波效果要满足两个条件:1.不能损坏图像的轮廓和边缘这些重要的特征信息.2.图像的 ...
- STM32实现HID和u盘复合设备
USB设备可以定义一个复合设备,复合设备分两种,一种是一个设备多个配置,还有一种是一个配置多个接口,在本例中采用一个配置多个接口的方式 首先修改设备描述符,标准设备描述符和报告描述符都不需要修改, ...