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

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

果断Mark!Searchcode——源代码搜索利器 《近匠》图灵机器人:App和移动硬件的智慧大脑 极路由发布HiWiFi OS及应用开放平台 Loom SDK框架:命令行快速开发跨平台2D游戏 安全管家Q2移动安全数据报告:窃取隐私最多 Project Adam vs. Artificial Brain,微软与谷歌角力人工智能 “微信公众平台优秀开发商”征集评选活动正式启动 移动数据库新疆界:开源、Swift、可穿戴... Chromebook侵蚀微软商用PC市场,成绩喜人 2014微信开发者大会议程公布 8月1日前购票8折优惠并赠书 四火的唠叨:也谈谈全栈工程师 图形化与集成趋势 协同软件致远发新品V5.1 跨平台开发如何事半功倍 Xamarin推出免费培训 《近匠》上海庆科:海尔智能家居背后的云方案 轻松DIY智能硬件,开源电子原型平台Hippo-ADK 所见即所得!基于Polymer的设计工具Mobile UI Elements 好的产品经理是怎样炼成的? 统一架构、统一运维:UnitedStack发布UOS2.0 把轻应用带进汽车——宝马、百度编程马拉松大赛启动 “钢铁侠”Insteon的逆袭:声控智能家居新时代 游戏云纪元 第二届游戏运营技术论坛即将召开 Bitly:构建月处理60亿点击的分布式系统 重塑微软:Satya Nadella开启整合之路 推送工具个推完成B轮数千万美金融资 娱乐行业数据化 ABD爱梦娱乐发布大数据引擎产品 增强现实:10大AR应用窥探移动未来 LBS的硬件创新:高德LBS智能硬件编程马拉松圆满闭幕 2014优秀微信开发商评选上线 首批旅游汽车电商房产等行业应用出炉(表) 让梦想照进现实——宝马百度编程马拉松闭幕 IXDC大会:移动交互设计精髓——用户体验 想辨析“马航”等事件真伪,有很多技术和工具可以使用 初学com的几点疑惑(50分) xlqin 如何送分? 有无免费VB控件可实现类似WinZip压缩功能? 给我一个学DELPHIL的理由3 能 通过Tdatabase得到一个库中的所有表的名称吗? 将AUTOCAD做成一个后台的OLE自动化服务器,怎样取得CAD的方法? 关于AUTHORWARE打包? 如何在运行期动态创建和设置DBExpress数据源? 疑惑:为什么专家分会少?? 谁能给我连接sql2000数据库数据原的原代码===火急!!! 象素转换成毫米问题 为什么每个女孩都问我喜欢长头发呢,还是短头发? 如何用WIN98引导盘恢复系统的引导!!!!!! 怎么安装出来还是没有图标? 如何用WIN98引导盘恢复系统的引导!!!! 一个老问题 ?ACCESS2000的数据库有几行坏了,无法用ACCESS修复/无法删除,一读到该行ACCESS就直接退出,怎么办? 各位,感觉学数学难不难? 壹?ACCESS2000的数据库有几行坏了,无法用ACCESS修复/无法删除,一读到该行ACCESS就直接退出,怎么办? 号外:今天终于卖了侯捷的Inside The C++ Object Model ,休息时可以翻番,为了祝贺特灌水100 谁能给我连 接sql2000数据库数据原的原代码===火急!!! 高手帮忙,如何让我能用jbuilder5? 请问用Perl编写用户交互程序 请问各位大哥,上海的高程考试在哪里报名啊? dcom 服务器关闭时怎能捕捉异常 三戒,有请~~~ 谁知道websphere的试用版怎么做掉? 打印DataReport时怎样用API改变系统的纸型,急急急急急急急急急!!!! 新来的~~来报到了~~只能送20分~~希望大家不嫌弃~~ 请成功使用JBuilder5的朋友指教!! 激情放送 五位QQ号,100块,你会要吗? 555~~~~挂了PASCAL挂了,5555~~~~我学不好DELPHI 了5555谁帮我呀!!! 有编过游戏修改器的高手吗? jinesc领分~~~ 如何使UpDown每次增加或减少0.5? 有个问题很困惑,请教 上傳后,服務器端如何接收? 各位高手好!现在有谁是正在使用 LINUX 上网的.报一下好吗!!!!!! 我快神经了,求救 各位高手好!现在有谁是正在使用 LINUX 上网的.报一下好吗!!!!!!!! 别笑我傻,又有简单问题 各位高手好!现在有谁是正在使用 LINUX 上网的.报一下好吗!!!!!!! 各位高手好!现在有谁是正在使用 LINUX 上网的.报一下好吗!!!!!!!!!!!! 各位高手好!现在有谁是正在使用 LINUX 上网的.报一下好吗!!!!!!!!! 大家都谈谈建立什么样的目录结构能更好的管理硬盘里的东东 lilo 如何设置??请赐教!! 各位高手好!现在有谁是正在使用 LINUX 上网的.报一下好吗!!!!!!!!!!!1 mts是什么? mts是什么?? 学习汇编要什么基础,要看什么样的书,有没有好的汇编的电子参考书下载呢? 正是在我遇见他后,我才意识到自己犯了一个大错误的英语翻译 中国山东省烟台市芝罘区民生小区中兴街用英语翻译过来急需!中国山东省烟台市芝罘区民生小区中兴街 24-4 用英语翻译过来急需! 名胜古迹英语翻译 你的忠告是我避免犯了一个严重的错误的英文翻译 求英文写法,中国山东省烟台市芝罘区幸福小学 名胜古迹的英文翻译 英文翻译:你太粗心了!你在作文里犯了那么多的错误. 谁有山东省烟台市芝罘区地图?谁知道有详细的山东省烟台市芝罘区地图. 英语翻译 英语翻译是It's__ __ him to ___ ___ ___ ___填空 烟台市国家税务局 英文翻译 “中华人民共和国江西省南昌县人民检察院”的英文翻译 用英语翻译“她的粗心导致了她的失败” 烟台市公安局出入境管理分局!求准确的英文翻译! 江西省南昌市南昌县房价?我问一下……新竹小区,清水园,澄湖左岸……这一系列的房子的价钱大概是多少?主要是要便宜…… 谁能用英语翻译下 kitty在写作中犯了呢么多错误,真是太粗心了你帮助tom做家庭作业真是太好了 烟台市提供英语翻译的公司有那些?公司需要外出,希望有个好翻译. 江西省南昌县就是南昌市吗?有点不太明白,我只听说过南昌市,没听过南昌县,如果不是一个地方,那南昌县在哪 高中数学考试,怎么样才能避免粗心和计算错误?我的数学水平大概是160的卷子考147左右,可是最近连续几次考试,都出现莫名其妙的错误,比如明知道A=60°时带入余弦定理时COSA带成二分之根号三, 帮忙翻译“烟台大学”和'工商企业管理” 求江西南昌县向塘的地图, 把“我喜欢10月1日,因为是国庆节.”翻译成英语 烟台大学怎么翻译 江西省南昌县特警和南昌市特警【公务员】待遇上差别多少?我家在南昌县,单位近,家里在南昌县也认识点人,南昌市我认为是待遇可能会好, 国庆节翻译 山东省烟台市哪里可以学英语 对.有好处英语翻译 中文翻译成英文:国庆节快乐 英语翻译!请叫他xxx,因为他的名字不是xx,而且xx在中文里是个不好听的名字 改革开放30年来,我们的生活发生了巨大的变化 帮忙用英语翻译这句话 英语翻译1948年12月2日,中央人民政府委员会第四次会议接受全国政协的建议,通过了《关于中华人民共和国国庆日的决议》,决定每年10月1日,即中华人民共和国宣告成立的伟大日子,为中华人民 求翻译成英文地址 中国浙江省X市xx小区xx栋xxx室 改革开放胆子要大一些 这是谁在什么时候讲的 “节日有很多,但是我最喜欢国庆节”的英文 求大神英语翻译一个地址:XX省、XX市、XX区、XX路37号 英语翻译.1"A在这30年内发生了巨大的变化"2"A在这30年之后发生了巨大的变化" 为什么十月一日是国庆节 江苏省徐州市鼓楼区XX楼XX号楼XX单元XXX室英文怎么翻译 改革开放30年优秀作品集的英文翻译怎么说呢~ 英语翻译The meaning of many different customs observed during Easter Sunday have been buried with time.Their origins lie in pre-Christian religions and Christianity.All in some way or another are a "salute to spring," marking re-birth.The white E 英语翻译翻译:The director who we favorite is XXX不对的话哪里有问题?这句话的翻译要求是定语从句 英语翻译This house has been built in 1996. 英语翻译根据工程的进展情况,我方现向您提交以下材料的品牌和制造商,供你参考,并请尽快确认,以便我们进行采购:水箱-AAA水泵-BBB阀门-CCC水处理-DDD 复活节是几月的啊?英语翻译一下 英语翻译我是爸爸妈妈的乖孩子---用英语怎么说?还有不要百度查的- - 今天犯了最不该犯的错 求英文翻译 复活节简介の英语复活节是纪念耶稣复活,也是基督教最重要的一个节日.据圣经记载,上帝的儿子耶稣降生在马槽里,当他三十岁的时候,挑选十二个学生,开始传道工作.三年半中,他医病、传道 英语翻译 他一再地犯同一个错误 英文翻译 复活节用英语怎么说 要用到as far as i am concerned 英语翻译"因此就我而言,XXX需要受到所有人的重视"英语翻译"因此就我而言,我认为XXX需要受到所有人的重视" 英语翻译 复活节几月几日啊,用英语翻译一下,可以的话,不过不多,我快破产了! 用英文翻译“你将会去游泳吗?”“和我明天将会去南昌.” 英语翻译我有三本教材,英译汉,汉译英和英汉语言对比,我是应该先看英汉互译,还是先看英汉语言对比呢? 英语翻译从国外汇款时需要这些紧急谢谢~ 南昌是这两座城市中较热的一座城市 英文翻译 英语翻译:我犯了一个多么愚蠢的错误呀!(感叹句形式) 中国山东省烟台市芝罘区用英语怎么写中国山东省烟台市芝罘区民生小区中兴街用英语翻译过来急需!中国山东省烟台市芝罘区民生小区中兴街 24-4 英语翻译急等!
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn