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

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

C语言概述-C语言教程 Turbo C 2.0集成开发环境的使用(上)-C语言教程 Turbo C 2.0集成开发环境的使用(下)-C语言教程 程序的灵魂—算法-C语言教程 数据类型、运算符与表达式(上)-C语言教程 数据类型、运算符与表达式(下)-C语言教程 最简单的C语言顺序程序设计-C语言教程 分支结构程序-C语言教程 循环控制-C语言教程 数值数组-C语言教程 字符数组-C语言教程 函数(上)-C语言教程 函数(下)-C语言教程 预处理命令-C语言教程 C语言指针(上)-C语言教程 C语言指针(下)-C语言教程 结构体与共用体-C语言教程 位运算-C语言教程 文件处理-C语言教程 谭浩强C语言教程 C语言创建链表并实现插入、删除数据 C语言中队列Queue的操作 C语言实现堆栈stack操作 C语言建立和遍历二叉树 C语言冒泡排序法演示代码 C语言实现堆排序(Heap Sort) jQuery Ajax以JSON格式传递结果数据 微软称为WP8开发的应用不兼容WP7手机 WP8开发者必读 关于WP8开发者程序开发语言选择倾向的问题 强大的C#随机字符串生成器 现在出了本Jbuilder5的书。有没有谁有这本电子书啊? 高分求树型结构源代码 SDK问题 这句sql有问题吗? 关于驱动程序开发! 在SQL-SERVER中出现数据死锁的情况一般是什么,若是由多个用户同时向数据库更新数据而导致的死锁,解决此问题的办法有那些? 寻找源代码排版软件? 有没有用VC写过短信接收程序,我在接收中文时出现乱码。 请教大虾:用mideaplayer来播放一首歌,如何用progressbar来表示进度? 我想学习驱动程序的开发,请大家帮我推荐几本这方面的书? 编译出错,不解?请高手指点。 能否用Delphi 实现类似东石公司的虚拟光驱系统。 我想学习驱动程序的开发,请大家帮我推荐几本这方面的书? include头文件的问题 急!!!为什么TBlobField 下载时大小受限制,怎么解决? 关于导出动态连接库中的类的问题,不知道这里有没有高手? 一个让我痛苦了n天的问题 关于Hook的一个问题 联合查询如何修改? 获取密码时出错???? my gf photo 我想问一下,java生成的.class文件能不能通过某种工具生成.exe文件? VC中组合框为什么不能下拉? 请问哪有最新的wise for window .net的版本可以下载 "java原型开发"指得是什么开发? 能否用VC++实现类似东石公司的虚拟光驱系统 请问会话Bean和实体Bean的区别在那?能给出例子吗? word文档如何存入SQL SERVER 2000? 请问如何才能在windows 2000 server 上装MTS? 有女朋友而且上网和别的mm聊天的入内签名! 如何显示不同的颜色... 有关网络开发和com的问题,高分征集关注和提供方案! 探讨一下safearray 的使用问题 关于QQ界面的制作? 在主界面中添加一副图片的问题被遮住的问题 有一个EXE执行时,我希望能删除它自己 如何在程序中获取IE当前浏览网页的IP地址或域名地址? 有南京的兄弟吗?我想买《delphi4编程技术内幕》,就是Charlie Calvert那本精华。 如何在工具条上加载图片作为工具条的背景 怎样来写这个数据连接? dbgrid里的赋值问题 Borland自带的ADO例子为什么也出错啊? pb 出现 maximum script size exceeded 保存错误 愿意到上海的软件高手可以来看看,真是没想到 我这里有一个链表类,我怎么在别的文件中使用它呢? CArray的问题? 编译器出问题了! 那里可以找到asp.net的一些原码,现在市面上的书没什么有深度的 修改PING数据包VB能做到么?高手来指点,中级来探讨,初级来学习,分数大大的有~ ;) 请教(qingrun,qingrun等大虾),请指教? weblogic高手请指点!这是不是设置不对造成的? 为什么要确立“事物的正确答案不止一个”的思维方式?作者是用怎样的论证方法来阐明这一事理的? 应用写作复习题求答案一、单项选择题(每题1分,1.迄今所知我国最早的应用文文集是 ( )A.甲骨刻辞 B.钟鼎铭文C.《尚书》 D.《周易》2.我国第一部文体学专论是 ( )A.《文赋}》 B.《 数字电子技术练习题求解答 《事物的答案不止一个》:第三段是怎样确立”事物的答案不止一个“的思维方式的重要性- - 谁有应用写作的题 请问:谁有09年的文秘管理与应用写作形成性考核册作业答案 金属置换反应是不是要前面的活动顺序大于后面的:就好像ZN+CUSO4==·······那换过来可以吗 就是:CU+ZNSO4==````````` 某食堂发生一起食物中毒事件.食堂负责人及时撰写报告,向上级汇报情况.请问该负责人应使用哪一种类型的报告?为什么? 求最新:文秘管理与应用写作作业3和4!一、在一下五个文种中任选两个文种,进行写作练习.1、贺电(或贺信)2、请柬(要求包含“封面”与“内文”两个部分)3、感谢信(或表扬信)4、求职 例如容斥原理,抽屉原理…… 应用写作试卷求答案,二. 1.病文评析:(40分,(答题要求:逐条指出下面两则公文的失误之处,并提出补救措施,不要求重写.)(1)《××××学会会议纪要》时间:××××年×月××日参加人员 求电大09秋行政管理《文秘管理与应用写作》作业本答案急 《事物的正确答案不止一个》论点及论证方法 (1-2x)^7=a0=a1x+a2x^2+……+a7x^7求|a0|+|a1|+|a2|+……+|a7| 化学初三所有化合价! 《事物的正确答案不止一个》的中心论点是什么?2011-12-24 16:23 提问者:爱笑的樱桃小嘴 | 浏览次数:2次到底是“事物的正确答案不止一个”,还是“每个人都应有创造性思维”?好像:“事物 中和1MOL磷酸需要多少MOL的NAOH?书上说1MOL的P2O5与热水形成的酸需6MOL的NAOH中和.这种酸是不是就是磷酸?磷酸不是三元酸吗,为什么需要6MOL? 初三上化学(化合价这节)某金属M的氧化物的相对分子质量为a,对应的氯化物的相对分子质量为b,该金属的化合价为多少?A.+(2b-a)/55B.+(2b-2a)/55C.+(2a-b)/55D.+(2a-2b)/55一个青少年正常情 事物的正确答案不止一个的论点是什么? 求1mol磷酸和2.7mol氢氧化钠的反应方程式 初三常用的化学化合价都有什么啊 接诗句(一首夏天的古诗)仲夏苦夜短,__________________ 如何证明氧气不易溶于水 初三一个化学问题(离子和化合价的区别)RT 为什么要确立事物的正确答案不止一个的思维方式? 有两颗星,设二者的质量分别为m1和m2,相距L,试求出他们角速度的表达式 跪求关于化合价的化学题(初三的) 高中数学八个定理的内容几何里的 双星运动的两物体质量为M1和M2,相距为L, 一道高中八校联考现代文阅读题目,求详解江山如画不知不觉,我们飘进了一个村庄.平静了一天的世界,果真下起了大雪.好雪的爱妻终于如愿以偿了,她兴奋得又叫又跳,想天真的小姑娘,全然忘 将5ml 0.1mol/L的NAOH溶液 ,配置mol/L溶液时,应向原溶液中加水到多少mol配置0.005mol/L 高中数学定理和性质用于证明吗.还是只有定理用于证明 高中语文现代文阅读题有什么高效的解题方法 将5ml 0.1mol/L的NAOH溶液 ,配置0.005mol/L溶液时,应向原溶液中加水到多少mol 用什么除去乙烷中混有的乙烯? 初三化学化合式如何解答化合式 计算化合式 请给例题好吗 谢谢 先将5ml 0.1mol/L的NaOH溶液,配置成0.005mol/L溶液时,应向原溶液中加水( )ml 既可以用来鉴别乙烷和乙烯,又可以用来除去乙烷中混有的乙稀,得到纯净乙烷的方法有什么 初三化学材料总结(金属、复合……)请分别列举初中涉及到的材料并举例F:金属 合金 复合材料 合成材料 为什么金属与金属化合物溶液发生置换反应时,金属化合物必须溶于水 消化不良与电介质有关系吗 6.4克铜与足量浓硫酸反应,求浓硫酸是多少mol. A是一种红棕色金属氧化物 BD是金属单质 J是一种难溶于水的白色化合物 受热后容易发生分解B(高温)~HCI溶液~加热C naoH溶液~I ~HCI溶液~氨水溶液~F(白色沉淀) 空气中~G 音色与介质有关系吗 mol质量是什么概念.1 mol浓硫酸为几克密度为98% 金属化合物的问题.某化学成分是可溶性的碱式碳酸盐的胃酸药物,表示为My(OH)zCO3· 4H2O,其中M代表某金属元素.取该碱式盐若干,逐滴加入某浓度的盐酸使其溶解,当加入盐酸42.5ml时开始产生CO2,加 双星质量为m1,m2.他们之间的距离为L.求双星运行轨道半径r1,r2,以及运行周期TF向心力=Gm1m2/L^2=m1w^2r1=m2w^2r2 r1/r2=m2/m1 r1+r2=L 这些我都懂但我不懂得下面的计算过程,通过以上各式是如何变换得到 r1 高中数学 三角形的定理及证明过程 请论证一个观点:西方思维方式比中国传统思维方式优越400字左右 A星轨道半径为R1,B星轨道半径为R2,两星相距为L.则有R1+R2=L. 现代教育技术考题,电视信号的两种方式,除射频信号外还有( )A.音频信号 B.视频信号C.音、视频信号 D.彩色信号激光唱片上记录的是( )A.听觉信息的磁信号B.听觉信息的模拟信号C.听 尽量是课本之外的, 两颗行星的质量分别为m1和m2,他们绕太阳运动的轨道半径为r1和r2,若M1=M2,R1=4R2,则他们的周期之比是? 有没有谁有《现代教育技术》的试题? 为什么要确立“事物的正确答案不止一个” 两颗行星的质量分别为m1和m2,绕太阳运行的轨道半径分别为r1和r2,若它们只受太阳的引力作用,那么这两颗行星的向心加速度之比为? 这是现代教育技术里面的题目,有没有谁会做的啊,能不能把过程写详细点额,我比较笨额.一只100w的定压式扩音机,输出端子为0v、20v、40v、100v、240v,拟配接12.5w/8欧姆的扬声器两只,16w/4欧姆的扬 正确的答案不止一个 的思维模式有什么弊端 针对它作者提出了什么看法 为什么要确 密度在数值上等于物体质量与体积的比值 这句话对么 什么叫传播手段和途径?什么叫传播规律?是现代教育技术,理论与运用63页的题.
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘