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

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的新机遇

宅男程序员福利:来自纽约的28位智慧与美貌并存的IT女神 创季度记录:苹果发布第四季财报 iPhone仍是苹果商业心脏 在破晓中行走:一位盲人开发的盲人应用 腾讯云俱乐部成都站——云时代手游开发:用数据说话 首届微App峰会将在MDCC2013上举行 微信易信百度新浪等平台开发商云集 TUP Masters第七期:C++大师Lippman论编程新范式Hugo OpenCL用于13个微型计算机领域的经典案例 从测试数据来看Node.js和Java EE的性能区别 工作效率低下?业内人士建议你切勿追求完美 Mozilla发布可视化在线跟踪工具Lightbeam 望向海外:十大移动应用开发外包公司 Facebook支撑万亿Post搜索背后的技术窥探 云OS:共创智能化生态圈 云计算,让游戏世界更加精彩 360推儿童卫士手环,你怎么看? 量产谈判正在进行时:谷歌手表或比Google Glass先上市 Mozilla发布新版Firefox 25 提供支持Web Audio API UC产品总裁何小鹏:轻应用,做什么?怎么做? 高德携手阿里云发布“LBS云”,账户打通只是第一步 最后2天!2013移动开发者大会5折抢票倒计时 大数据如何改变在线广告业? 摩托罗拉推开源硬件平台计划Project Ara 七个垂手可得的敏捷开发工具 微信新版公众平台调整细节381处 300/次认证费引争议 libgit2:纯C语言实现的Git开发包 MongoDB的得与失 开箱即用!Android四款系统架构工具 谁说Kinect只是玩物?微软研究院使用它实现口语手语实时翻译 新浪微博推出粉丝服务平台 引发两微PK大战 MDCC2013移动开发者大会最新日程发布 门票优惠最后1天 英特尔CEO:EUV光刻技术或助力芯片突破摩尔定律 请你帮帮忙 如何设定属性页的大小? EXCHANGE 2000 SERVER的怪问题?! 等值线算法及源程序 如何使用VB访问MySQL数据库? 哪位大哥帮帮忙(跟贴有分),小问题,vb里怎样调用vc的动态库,还有为什么vc生成的Dll文件不好用regsvr32注册 急需解决的问题!一个向数据库写入时间数据的问题!多谢高手指教!100分! @@@谁有我郁闷???@@@ 应用cdo编程,怎样获得任意公用文件夹的FolderID 移动文件 DataSource的问题 cookie的问题 我学C语言有一段时间了但我发现没有什么成果?? 我想做一个象MSN类似的界面,请教各位应该怎么整啊? 简单的textbox控件问题,再次散分了! 有一个1024K*32位的存储器,由128K*8位的DRAM芯片构成,看下面对吗? colordialog的问题 win98窗口上的最大化最小化按钮变成了数字 请问,如何以编程的方式创建SQL server的实例的? 请问“[System.ComponentModel.DesignerCategory("Code")]的意义? table1.FieldbyName('Company').asstring:= ExpandFileName (filelistbox1.filename); 网卡使用的问题!在线等候 会c/s的高手请帮忙! 为什么我的winme关机后在开机总是要检查磁盘,可是我是正常关机呀,烦死我了。谁能解决给100分。 各位高高手,有没有MS SQLServer6.5的JDBC驱动?救人一命胜造十级**,忘了咋说的了. 大家给我解答我不会用,请再帮帮忙(前后贴200分一起结,谢谢) 在一个dataset中,对于不是主键的列中的值如何进行查询? 星球大战前传2:美国人全面攻击 有谁知道在哪有IIS6.0下载呢 请问在mysql中怎么建立自动增加的字段呢 , 好想在mysql中没有那么强大的工具。 请问哪里可以下载中文的windows Media Player SDK? 高分求助 数据备份 为什么Access中排序顺序不正确?<在线等待> 在菜单中增加CIMAGELIST中的位图,这样写对吗? 为什么受伤的总是我?只因为我是菜鸟??? 寻一个asp.net(codebehind)实现的数据库访问的demo sybase事务处理的问题 我的程序用的Access,,运行时出现“无法为更新引集定位:一些值可能已在最后读取后改变”什么原因? 怎样加大在sql server中存储图片字段的大小 这回真的是“高手请进”了!!!! 求救,javabean编译问题?? 如何获取Dispatch接口中的事件? 小小问题:如何清空用ADO连接的数据库表中的记录 大家由没有碰到这样的问题? 100分请高手给澄清关于数据库引擎的几个概念 请问 ucs2编码如何转化成gb格式的? 在Ado2.1中如果已经Addnew,如何撤消而不引起错误? 打开新窗口的问题 谁知道那里有电子版的《C语言编程思想》 如何获得输入得BSTR 字符串得值? 帮我想想! 为什么我运行 ms-project2000会出错!错误内容在里面,请大家指教!!! 双氧水可以清洗伤口吗? 地无三尺平,天无三日晴指哪一地形区 a 青藏高原 b 四川盆地 c 云贵高原 d 东南丘陵 1 2 二氯乙烷和二氯乙烷有什么区别 双氧水可以洗伤口吗 在1升水中溶解10.1克硝酸钾,即可配制得0.1摩尔每升的硝酸钾溶液,这句话对不对? 请问1.1二氯乙烷和1.2二氯乙烷有什么区别?二氯乙烷的散水和原装有什么区别? 一天,女儿满腹牢骚地向父亲抱怨起生活的艰难.父亲是一位著名的厨师.他平静地听完女儿的抱怨后,微微一笑,把女儿带进了厨房.父亲往三只同样大小的锅里倒进了一样多的水,然后将一根大大 将500毫升0.15摩尔每升的硝酸钾溶液蒸发...详情如下将500毫升0.15摩尔每升的硝酸钾溶液蒸发,部分溶剂再恢复到原来温度时,溶液体积为300毫升,求蒸发后溶液中硝酸钾的物质的量浓度. 1 ,2-二氯乙烷怎样生成1,1-二氯乙烷? 各写五个(1)酸+碱性氧化物→盐+水的化学方程式(2)碱+酸性氧化物→盐+水的化学方程式 答全了赏五十分,杜鹃花、百合只回答这两个属在东北有哪些物种,其颜色、分布、俗称.答不全恕不赏五十. 有两根蜡烛,一根长8厘米,另一根长6厘米吧两根蜡烛都燃烧掉同样的一部分后,短的一根剩下的长度是长的一根剩下长度的3/5.每根蜡烛燃烧掉多少厘米? 酸+碱性氧化物—→盐+水 和 碱+酸性氧化物—→盐+水,是否属于复分解反应? 山上开满了映山红,无论花朵和叶子,都比盆栽的杜鹃显得精神.山上映山红有什么特点?你从中感受到了什么? 有两根蜡烛,一根长8厘米,另一根长6厘米,有两根蜡烛,一根长8厘米,另一根长6厘米,把两根蜡烛都燃掉同样长的一部分后,短的一根剩下的长度是长的一根剩下的5分之3,每根蜡烛燃掉多少厘米? 碱和酸,碱性化合物和酸性化合物,盐,水.之间的方应 萝卜和甘蓝两种植物杂交,能得到的种子一般是不育的,但偶然发现个别种子种下去后可产生能育后代,出现这种现象的原因是 ( )A.基因自由组合 B.基因突变C.染色体结构变异 D.染色体数目加倍 有两根蜡烛,分别是8厘米和6厘米,两根蜡烛同时燃烧相同的一部分,短的一根剩下的长度是长的一根剩下的五分之三,每根蜡烛燃烧多少厘米? 杜鹃花有哪些品种?其中有映山红,还有些什么呢? 山上开满了各色的映山红,无论花朵和叶子 都比盆栽的杜鹃显得有精神这句话中精神的意思是什么 生活中精神还指什么,请用另一种意思造句 太阳下山了.(改成打比方的句子.) 求国外杜鹃花的品种及其名称例如:Dr.H.C(杜鹃花品种英文别名)Brasitia 萝卜和甘蓝杂交,得到的种子一般是不育的,如果要得到可育的种子,你认为该采取下列哪种措施A利用花药培养技术 B利用染色体数目加倍技术 C利用秋水仙素处理萌发的种子 D利用诱变育种技术 帮我改成打比方的句子 要算式 :-) 有一群蜜蜂 其中五分之一落在杜鹃花上 三分之一落在栀子花上 而这两批蜜蜂相差数的3倍的蜜蜂飞先月季花 最后剩下一只蜜蜂在茉莉花和玉兰花之间飞来飞去 花园哩共有多少只 京沪高速公路全程1200千米,一辆大客车和一辆小客车分别从上海和北京出发,相向而行,经过6小时在途中相相遇.如果大客车的速度是小客车的十一分之九,两车的速度各是每小时多少千米 如何把中国汉字发生无穷无尽的变化改成打比方的句子 胡萝卜 鸡蛋 咖啡豆的不同反应分别代表了人们遭遇挫折的哪些态度? 塑料是不是有机物 “太阳下山了”改成比喻句 胡萝卜,鸡蛋,咖啡豆的不同反应代表了人们对待挫折的什么态度 京沪高速公路全长大约1200 千米.一辆大客车和一辆小客车分别同时从上海和北京出发,相向而行,经过6小时在途中相遇.如果大客车的速度是小客车的11分之9,两辆车的速度各是每小时多少千米? 硒原子在化学反应中容易得到2个电子,形成__离子 花园里有一群蜜蜂,其中五分之一落在杜鹃花上,三分之一落在栀子花上,而这两批蜜蜂相差数的三倍的蜜蜂飞向月季花,最后剩下一只蜜蜂在芳香的茉莉花和玉兰花之间飞来飞去.花园里共有多 塑料洗衣盆是不是有机化合物 油菜(白菜型/甘蓝型/芥菜型)是蔬菜吗?油菜(白菜型/甘蓝型/芥菜型)是蔬菜,还是油料作物? 一个圆形花园,沿着它的边线大约每隔3.14米种一棵杜鹃花,一共种了10棵.这个花园的面积大约是多少平方米?求过程. 京沪高速公路全长大约1200千米.一辆大客车和一辆小客车分别同时从上海和北京出发,相向而行,经过6小时在途中相遇.如果大客车的速度是小客车的11分之9,两辆车的速度各走每小时多少千米? 春秋和战国时期是公元前几世纪 求答:花园里有一群蜜蜂,其中五分之一落在杜鹃花上,三分之一落在栀子花上,而这两批蜜蜂相差数的三倍的蜜蜂飞向月季花,最后剩下一只蜜蜂在芳香的茉莉花和玉兰花之间飞来飞去.花园里 京沪高速公路全长大约1200米.一辆大客车和一辆小客车分别从上海和北京出发,相向而行,经过6小时在途中相遇.如果大客车的速度是小客车的十一分之九,两辆车的速度各是每小时多少千米? 春秋从公元前770--470年,是我国( )瓦解时期,战国从公元前475—221年,是我国( )的形成时期. 一个圆形花园,沿着他的边线大约每隔3.14米种一棵杜鹃花,一共中了10棵.这个花园的面积大约是多少平方米?要有算式! 求初三科学浙教版化学方程式,化合价,化合价口诀 .不要复制的 不要自己编的.要标准的那种 联合收割机能收割什么农作物包括专用的和多用 的 高梁红了,谷子熟了,丰收的季节到了.(改成拟人句) 科学化合价4题1.某二价金属,它的氧化物11.2g全部转化成氯化物是,质量变为22.2g,该金属元素的相对原子质量是___________.2.某不纯的硝酸铵样品经分析知含氮33.3%,这种样品里硝酸铵(NH4NO3)的质量 都有什么作物可用联合收割机收获?说得越多越好.还有,小麦、玉米、水稻、甘蔗这些作物,收割机处理后得到的都是什么东西? 高粱红了,谷子熟了,丰收的季节到了.改成拟人句 一跟蜡烛燃烧8分钟后还剩下8厘米,燃烧18分钟后还剩下7厘米,这根蜡烛最初有多长? 哪位大虾知道棉花和谷物这两类农作物,从播种、生长、收割这一系列过程中所需全部机械设备都分别有哪些?请分别告知,棉花:谷物: 胡萝卜、鸡蛋、碾成粉状的咖啡豆,你会选谁?胡萝卜、鸡蛋、碾成粉状的咖啡豆,这3样东西同样面临逆境---煮沸的开水.下锅进入开水煮后,胡萝卜变软了,鸡蛋外壳里面的液体变成硬硬的固体了 哪里有胡萝卜,鸡蛋,咖啡豆的英语完型填空我要的是关于这篇文章的完型填空题,以前做过,但找不到了. 太阳下山了.把这句话改成打比方的句子.怎么写. 说说“胡萝卜、鸡蛋、碾成粉状的咖啡豆”的象征意义胡萝卜、鸡蛋、碾成粉状的咖啡豆,这3样东西同样面临逆境---煮沸的开水.下锅进入开水煮后,胡萝卜变软了,鸡蛋外壳里面的液体变成硬 欲配制1mol/L的cacl2溶液怎么办? 杜鹃花的阅读答案 上海市位于 A长江中下游平原 B青藏高原 C四川盆地 D江南丘陵 原子的种类、原子的化学性质分别与下列离子数密切相关的是 A质子数、中子数B质子数、最外层电子数 C中子数、最外层电子数 D最外层电子数、质子数 杜鹃花阅读答案
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘