说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Docker:集装箱式“运输”在软件上的实现

HTML文档下载 WORD文档下载 PDF文档下载
如今,“集装箱化思维”被运用在软件“运输”上,Docker可以看作是用代码编写出来的国际集装箱,它可以把任何应用及相关依赖项打包成一个轻量、可移植、自包涵式的容器。

Docker是由PaaS提供商dotCloud在2013年年初创建的一款开源应用引擎,Docker可以自动将任何应用打包成轻量、可移植、自包涵的容器引擎。开发者构建的应用可以一次构建全平台运行,包括本地开发机器,生产环境,虚拟机和云等。

Docker基于Go语言开发,代码托管在 Github上,并遵循Apache 2.0开源协议。近期,这个项目得到了越来越多的用户追捧,Github上的Star数已经9000多,Google的Compute Engine也支持 Docker,而在国内,知名的 百度也把Docker作为其Paas的基础。


来自Docker官方博客

Docker容器可以封装任何有效负载,几乎可以在任何服务器之间进行一致性运行。

Docker的常用案例包括:

  • 自动打包和部署应用
  • 创建轻量、私有的PaaS环境
  • 自动化测试和持续集成/部署
  • 部署并扩展Web应用、数据库和后端服务器

背景

十五年前,几乎所有的应用都是采用定义良好的堆栈编写,并且部署到单一的专有服务器上。今天,开发人员可以使用现成的最佳服务组合构建和装配应用程序,并且为这些应用程序进行跨不同硬件环境的多重部署做好了准备,包括公共的、私有的和虚拟化的服务器。


图1 IT演变

这种设置可能会用在:

  • 不同服务和“依赖抵御”之间的相互不良反应
  • 在快速迁移和跨不同硬件之间面临挑战,不可能管理一个跨多个服务并且被部署在不同硬件类型上的矩阵。


图2 多个栈和多种硬件环境所面临的挑战

我们可以看到,这里有大量的组合和排列应用/服务以及随时需要考虑每一个应用程序被写入或改写的硬件环境。这将给编写应用程序的开发人员和试图创建一个稳定、安全、高性能操作环境的人们带来一个困难的局面。


图3 使用动态栈和动态硬件环境创建一个N*N矩阵

那么,该如何解决这种局面呢?让我们举个运输界的例子,在1960年之前,大多数散货通过船进行托运,托运人和承运人很担心不同类型的货物之间会发生些不良反应(例如,一批铁压在一袋香蕉上)。同样,各种不同运输方式之间进行转换也是非常痛苦的,其中一大半的时间都是花在港口对货物进行卸载,然后再装载,并且还要等待同一批货物一起被装到火车、卡车等交通工具上。这样,在多种不同物品和多个不同的运输机制之间就存在一个N*N的矩阵。


图4 1960年之前的海运

幸运地是,标准集装箱的出现解决了以上所面临的难题。任何货物,从开心果到保时捷,都可以通过标准集装箱进行包装。托运人员或承运人可以把集装箱进行密封或者禁止再次打开,直到运输到目的地。在运输过程中,集装箱可以被卸载、装载、堆积、运输并且还可以有效地长距离运输。集装箱颠覆了全球运输方式——一个标准,让货物在火车、汽车、轮船之间畅通无阻。今天,有1800万只集装箱进行着90%的世界贸易。


图5 一个标准容器(集装箱)的出现解决了运输方面的难题

在某种程度上,Docker可以看作是用代码编写出来的国际集装箱。


图6 软件“运输”解决方案也是一个标准的容器系统

Docker可以把任何应用及相关依赖项打包成一个轻量、可移植、自包涵式的容器,该容器拥有标准的操作,从而能够实现自动化。与此同时,所有的应用都可以运行在任何Linux服务上。相同的容器,开发者可以在笔记本上有规模的运行、生产、也可以在虚拟机、逻辑服务器、OpenStack集群、公共实例、或以上所有结合(的方式)上运行。

换句话说,开发者构建的应用只需一次构建即可多平台运行。运营人员只需配置他们的服务,即可运行所有的应用。

Docker的主要功能特征


物理容器 Docker
内容无关性(Content Agnostic)
相同的集装箱可以容纳几乎任何类型的货物
可以封装任何有效负载及其依赖项
硬件无关性(Hardware Agnostic)

同一标准的容器允许把货物从船上运输到火车、卡车上,直到运输到仓库,整个过程无需整理货物或打开容器

使用操作系统基元(例如:LXC)几乎可以在任何平台上运行——虚拟机、裸机、OpenStack、公共IaaS等,并且无需修改

内容隔离和交互 无需担心铁压在香蕉上,容器可以堆积运输 资源、网络和内容隔离,避免依赖地狱
自动化

标准的接口使其易于实现自动化装卸、搬运等

运行、启动、停止、提交、搜索等都有标准的操作,非常适合devops:CI、CD、自动扩展、混合云

高效 无需打开或修改,可以在起始两地快速地移动/运输
轻量级、几乎没有任何偏向和启动惩罚,可以进行快速移动和操作
职责分离
托运人担心盒子内部、承运人担心盒子外部
开发人员担心代码,运营人员担心基础设施 

更多技术特性:

  • 文件系统隔离:每个进程容器都运行在一个完全独立的根文件系统里;
  • 资源隔离:系统资源,例如CPU、内存等,使用cgroups分配在不同的流程容器里;
  • 网络隔离:每个进程容器携带自身的一个虚拟接口和IP地址运行在自己的网络空间;
  • 即写即拷(Copy-on-write):使用即写即拷方式创建根文件系统,这样部署速度极快、内存和硬盘空间极少;
  • 日志:Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索;
  • 变更管理:容器文件系统的变更可以提交到新的映像(image)中,并可重复使用以创建更多的容器。无需使用模板或手动配置;
  • 交互式shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互shell。

Docker有哪些基本功能?

Docker让开发和运维变的简单。下面这幅图会让你对Docker基本功能有个很好的认识,Docker会将网络,存储这些事情都配好。下载应用并安装。并配置一些参数,打包上传Image。此外,Container既可以手动创建,也可以自动创建,如果源码库里面包涵DockerFile文件,那么将会自动创建,容器里不仅包涵应用,还包括应用的所有依赖项。

开发人员可以使用Docker Search命令在Docker Registry(无论是公有还是私有的)里搜索Containers,并且还可以使用Docker Pull命令从注册表里推送Container,使用Docker Run命令执行启动、运行、停止等操作。值得注意的是,Run命令的对象可能是你自己的服务器、公共实例或者是两者的组合。


图7 Docker的基本功能

关于Docker的完整功能列表,大家可以访问: http://docs.docker.io/en/latest/commandline/

Docker的三种运行方式:作为守护进程,在Linux主机上管理LXC容器;作为一个CLI,与守护进程的REST API进行对话(docker run ...);作为仓库的客户端,分享你所构建的内容(docker pull, docker commit)。

Containers是如何工作的?与VMs有何不同?

一个Container通常包含应用及应用依赖项,Container用来隔离进程,这些进程主要运行在主机操作系统上的隔离区和用户空间。

这个是明显不同于传统的VMs。传统的硬件虚拟化(例如VMWare、KVM、Xen、EC2)旨在创造一个完整虚拟机。每个虚拟化应用不仅包含应用的二进制文件,还需运行该应用程序所需的库、一个完整的Guest操作系统。


图8  Containers vs. 传统VMs

由于所有的容器共享同一个操作系统(以及二进制文件和库),所以,他们明显要比VM小的多,这样,就完全可以在一个物理主机上托管100个VMs(一般VM数量会受到严格限制)。此外,因为它们使用主机操作系统,重启一个VM并不意味着要重启操作系统,因此,容器更加轻便、高效。

Docker中的容器效率会更高。因为一个传统的VM、应用、每个应用副本以及每个应用微小的变更都需要重新创建一个完整的VM。

如上图所示,一个新的应用在主机上仅仅包含应用及其二进制文件/库,这样就无需创建一个新的客户机操作系统。

如果你想在主机上运行该应用的几个副本,你甚至无需复制共享的二进制文件。

最后,即使你对应用进行了变更,你也无需拷贝变更内容。


图9 Mechanism让Docker容器更轻量

这不仅让存储和容器运行变得更高效,还让应用程序更新变得极其简便。正如下图所示,更新一个容器只需应用差异的地方。


图10 修改和更新Container

下面分享一些比较酷的Docker用例

实例 实例描述 链接
构建自己的PaaS
Dokku——Docker实现的mini-Heroku。你所见过最小的PaaS实现
http://bit.ly/191Tgsx
基于指令环境的Web
JiffyLab——基于指令环境的Web,使用更轻量、Python和UNIX shell
http://bit.ly/12oaj2K
应用部署简便

使用Docker部署Java应用

在Docker上运行Drupal

在Docker上安装Redis

http://bit.ly/11BCvvu
http://bit.ly/15MJS6B
http://bit.ly/16EWOKh
创建安全沙盒 Docker让安全沙盒的创建更简单
http://bit.ly/13mZGJH
创建自己的SaaS
把Memcached作为服务 http://bit.ly/11nL8vh
应用程序自动化部署
使用Docker的Push-button部署
http://bit.ly/1bTKZTo
持续集成部署 dotCloud的Docker和Strider的下一代持续集成&部署
http://bit.ly/ZwTfoy
轻量级桌面虚拟化
Docker桌面:通过SSH运行一个内部Docker容器 http://bit.ly/14RYL6x

备注:以上链接需翻墙

相关资料:

  • Docker官网
  • Docker托管地址
  • Docker入门教程

推荐阅读:

俄罗斯搜索霸主Yandex推出基于Docker的开源PaaS服务Cocaine

超越Google,他企图将整个互联网塞进1台电脑

PaaS乱局:Container的新机遇

情绪低落?没事,让计算机来帮你! 水果生意难做 前新浪架构师徐佳转行试水挖煤 思考软件开发中的快与慢 Apache CouchDB注入新鲜血液,整合分布式技术 CSS Shapes:Web设计人员的新工具 Android 4.3正式发布:四大新功能一览 史玉柱的创业经验谈 3G门户和GO桌面:海外推广的生意经 系统级编程语言性能大PK D语言成首选 解读Facebook第二季度财报 移动业务风生水起 如何避免失败,像Google一样玩转大数据 首届游戏运营技术论坛隆重开幕,共论大数据时代的游戏运营之道 OpenStack Swift遇到了Erasure Code 微软Win7 IE11开发者预览版发布 开始改进开发工具讨好开发者 个性化推荐服务商百分点宣布B轮融资1000万美金 全球著名互联网企业背后的开源力量 基础设施对决Facebook vs. Google:差距绝不是一点点 Amazon Q2财报同比转亏,但AWS反其道而行:高歌猛进! 开拓海外市场的两年:海外上线小技巧 SDCC 2013首批讲师名单出炉 一线工程师唱主角 [开源推荐] 跨平台的.NET运行环境 Mono 3.2发布 Heroku发布API平台Beta版 采用OAuth2.0安全授权 大数据时代:移动数据能为我们带来什么? iOS开发经验谈:如何提高应用开发效率? 贝索斯:你否定亚马逊的现在 我决定亚马逊的未来 谷歌新产品Chromecast:一夜之间价格从35美元飙至100美元 移动周报:苹果5周年限免神作,BADLAND开发者访谈 开源平台Cloud Foundry获IBM和百度支持,步入高速发展的“黄金期” GDK仍未发布 谷歌鼓励Glass开发者可提前用Android SDK开发 Adobe发布PhoneGap 3.0 支持命令行工具 初级vs.高级开发者 哪个性价比更高? 问题代码,请指出 progressBar 怎么使用? 在linux下调试时,session出了问题!急!在线等待! 数据窗口里有一个子数据窗口,初始时,如何使子数据窗口选择某一行 线程传递消息有时出现乱码 如何随机生成6位密码,但不能有重复 如何在邮件的信头立加入自己喜欢的图片??谢谢 请问:为什么可以给一般对话框上的按钮添加位图,在CDialogBar上却不行?如何在CDialogBar上的按钮上显示位图?谢谢回复。 救命!在线等!再发。 怎末实现 统计图片的点击率??? 在线等待,解决即给分!!! 求助!连接数据库问题? VC.NET和VC6.0的语法差别大吗? 图像处理和计算机视觉方面有什么牛公司嘛? 高分求服务器c#向客户端javascript传递数据的各种不同方法!!! 用过C196开发196KC/KB的请进,谢谢 我用MFC编写了一个ActiveX控件,如何实现安全接口? 如何实现 XP 中目录窗口左边那种菜单 有关界面设计的两个问题? drawString时怎样规定一个区域,在这个区域内的文字显示,超出的不显示 急!在线等!Excel文件导入的问题。找不到可安装的ISAM 结识搞PHP的朋友 关于cell组件 郁闷当中,谁能给个用vb做DLL然后在DLL中增加数据库记录,在asp调用的例子。 singleton模式实现的问题 100分 谁讲一下定点数和浮点数的区别 急急急.请各位大虾帮帮忙啊! 請問語句的意思,謝謝 (Oracle8i)以SYSMAN登录控制台 斑竹9我! 求教高手!!!TEXTBOX与DATAGRID的问题 求助!关于用74LS181模拟8位机的资料!(散分啦,小弟急用啊!) 我的WINDOWS2003的DIRECTX 3D功能用不了,为什么? 如何用命令来修改设置计算机的ip,网关和dns等内容 不知道到那里问,借个人气了 托架的图标 散分! 如何建立一个这样的数据窗口? 上次未解决的问题(附源程序,及时结贴)(输入地址时http://ip/default.asp能正常使用,但是用http://ip则只能显示首页) 这个分页查询的SQL语句有什么问题?高分求教!!! 怎样求一个集合的子集? 我应该怎么做(项目经理请进,至少代表全国大部分公司的问题),一个年轻软件开发人员的问题 zzzzzzzzzzzzzzzzzzzz 高手指点迷津,如何更新数据库里的image字段 算法问题,再请教各位高手! 急急急,有关classpath 急!如何把picturebox中的内容保存成图片呢! Web Service中怎样验证身份? Web Service性能测试,欢迎评论,来者有分! 散分! 数据类型转换 ColdFusion的语言 - CFML 寸天厘地是什么意思 明代有哪些运用火器射杀使用冷兵器的著名战役 逐层加热式电开水器技术的质疑所谓的电开水器逐层加热技术,可避免阴阳水和千沸水,真的能做到吗?都知道液体的对流原理,水在被加热后,一定会在水箱中对流,能不破坏水层结构吗?我看这是 怎么背化工设备图纸 项脊轩志是高中课本苏教版的必修几啊急················ 超级电容充电后,为什么电压会保持不变或是衰减的很慢?是内阻很小还是电解质的特性等原因造成的?求原理超级电容充电后的电压为什么会长时间的保持不变,本质原理是什么?影响其电压衰 阅读化工设备图的一般步骤和方法? 静电接地跟避雷针的作用有什么不同? 铁锈能导电吗?有人说能,但比较弱;有人说不能,它是绝缘的.我想知道到底能不能? 这仨字咋读? 苏教版高中语文书必修五《项脊轩志》后面一篇文言文是什么啊?书忘记带回来了..ps:《长亭送别》 也算..请告诉我后面一篇文言文是啥=-= 铁锈导电吗?请教铁锈是否导电?比如在交流220V或380V的情况下;另外,对于铜和铝而言,铜锈和铝锈也导电吗?请回答具体的情形. 求 凤栖梧 词,谢谢 北京特种作业操作证查询我把操作证号忘了,请问怎么找回? 铝电解电容器在高温老化时电压会下降10多伏,请问是怎么回事?是螺钉高压大容量的电容器450v5600uf 请问凤栖梧 柳永的那首词中,“强乐还无味”的“乐”和“还”怎么念?如题. 特种作业操作证查询塔吊证号T370421197003032913是真的假的~急 铁锈会导电吗? 与 柳永凤栖梧 类似的词 蝴蝶怎么折 纸蝴蝶的简单折法图解 把一个充电的电容器断电,在把一半的电容器充上均匀电解质,请问左右两边电容器的电压相同吗?要详解,思路清晰的增加悬赏! 生命诚可贵,爱情价更高,若为自由身两者皆可抛. 空调达到什么什么负荷时压缩机启动自动保护 铝电解电容器电解液的价格是多少 凤栖梧,栖是读qi 还是xi 病人右拇指感染,从左手背注入抗生素,经哪些途径到达病灶? 有机溶剂类铝电解电容器电解液国内有哪几家在做?什么量?什么价格水平?国外的主要是有谁在做?可否推荐几家? 光合作用的实质是氧化反应还是还原反应? 冰箱压缩机正常情况下会多久起动一次啊?压缩机起动和结束时冰箱会发出一声“叭”的声音,也不是很大,分别就一声,压缩机起动是开始制冷,对吧,那一般压缩机起动一次大概会持续多长时间 渤海海峡是内海海峡吗? 隔着炉火焰上方看物体为什么晃动 我想知道,现在的那种家用的电水壶,塑料的那种,他的加热方式是怎么样的?1.是把加热器直接放在水壶里面,也就是直接把水加热,还是2.在装水的塑料外面装一个加热器,隔着塑料加热水如果是 肌肉注射药物要抽回血吗 为什么在火焰上方看物体会晃动?如题 麻烦回答下,要准确点的 电动热水壶不加热什么问题 连接大西洋与其内海的海峡?1 苏伊士运河 2 直布罗陀海峡 3 土耳其海峡 4 马六甲海峡 1 2 1 4 2 4 2 3 氧化还原反应的本质 是不是有氧化反应就会有还原反应 水壶二次加热的问题?我买了个养生壶带有保温功能,当汤水煮好后可以恒定在一个温度上(我设定在40度),这样会不会造成汤水的亚硝酸盐升高呢?还有煮汤一般都要煮一两个小时会不会含有 现在的空气有没有毒 手机贴钢化膜怎么贴啊 指人的气量 病毒的生活需要空气吗 扣腚是什么意思 核糖体是不是属于细胞质 一般情况下空气中存在病毒么 从冷兵器到火器,这个进程对文明的发展有什么影响?(积极的) 氧化铁还原后的铁能不能用?还原后的铁能不能用来制造各种铁器 Zippo打火机新款沙子200带便携式烟灰缸24748礼盒装 “扎你腚”是啥意思 电可以组什么词 zippo SC1677这个型号到底是烟灰缸还是打火机啊? “席天卷地”的“席”是什么意思 母联开关是怎么切换电源的啊? 电怎么组词 请问“日色最慢的时候”表达出什么意思?女生好像已有男友,一晚,另一男生遇到这对情侣,当即跑开了.后来女生写道“相逢不晚为何匆匆”.数日后男生回答道“为何不晚匆匆相逢”.女生回答 电源无缝切换开关(装置)和电源互投开关(装置)的区别如题请专家解答 一群猴子,树上的是地上的五分之三,上去了6头,这时树上和地上的一样多,问原来一共有几头 求大家给我几张化工设备图我参考一下?我需要几张化工设备图,用auto cad 画的那种. 有没有一个电源进,两个电源出的切换开关.打算在一条3*35+1*16平方的铜芯电缆上,安装一个一进二出的切换开关来控制两路机子的工作,2个出线的电缆也是3*35+1*16平方,分别都引到225A的塑壳断路 有18只猴子在三颗树上.两分钟后2只猴子从第一棵树跳到第二棵树,然后5只猴子从第二棵树跳到第三课树.现在三颗树上的猴子数都相等.请问,原先每颗数上有多少只猴子? 外国专家学者积极评价习近平在周边外交美国安局30天内收集西班牙6050万韩国陆军前方哨所一士兵中枪身亡 军方宁波公共自行车实施满月 绿色出行渐获北京全城再陷严重污染 首次启动蓝色预中央气象台继续发布霾黄色预警 华北局尼日利亚叛军袭击军队 医院收到35具财经随笔:俄罗斯老拉达遭遇进口车挑战格鲁吉亚大选出口民调显示执政联盟或将澳大利亚山火多处火情失控 1名救援飞美管理自身经济能力遭疑 奥巴马急于吸浙江温岭遇害医生遗体被送殡仪馆 医务温岭市一医院“10·25”事件善后工综述:东南亚能源市场潜力备受关注南航空客380首航悉尼成功外交部就安倍涉华挑衅言论、美监听他国外交部:中方对叙提交化武初始宣布和销张平会见欧洲客人新闻分析:格鲁吉亚大选后内政外交如何新闻人物:格鲁吉亚当选总统马尔格韦拉研究:飞机座椅加宽1英寸 乘客睡眠质若不容父母,何以容天下?请认真读完!2016,获得福报最快捷的方法,你知1月2日【现代因果】8岁女孩给乌鸦喂女人,去工作吧!孩子大了,会远离你;男女最佳的生肖配对,你和哪个属相最配| 2016 纽约跨年攻略推荐 | 心烦的时候看看这些 飞碟说正式登陆新星球 飞碟说大淘宝 | 新年特辑饭后半小时,养生黄金期!冬天喝茶,你喝对了吗?肾怕缺水 心怕累 肝怕堵来 胃怕冷—喝酒时千万别吃这些菜,等于玩命!为什么喵星人会站立~~你缺只爪,我缺只手,这样我们在一起就给汪找了只喵伙伴,没想到一见面就..选对“偷情”地点绝对是个技术活...用爱包容的世界,流浪狗被老师收留成校那些你一直想知道的狗狗行为训练方法!这是一个悲伤的故事...但还是忍不住这些狗狗倒下的身影,倒映出这群贪婪的
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘