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

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

移动应用云APICloud宣布完成A轮500万美金融资 从Apache Storm学到的经验教训 【CTO俱乐部走进天津】探讨如何成为技术团队管理者 不容错过!参加MDCC 2014移动开发者大会八个理由 你的钱被洗劫了么!APP安全问题来袭 10大最常见的数据库安全问题 南航微信服务号是如何炼成的? 超40项功能改进,虚幻引擎4.5正式发布! 【工具推荐】ER:可轻松构建一站式AJAX Web应用的开发框架 GraphLab:将大数据分析从理念运用到生产 支持Android 5.0:完全用Ruby的Ruboto框架迎1.2.0更新! 万物互联第一步:采用AllJoyn技术的智能硬件 【专访】敏捷专家何勉:让测试成为拉动组织敏捷实施的力量 Docker与微软合作 支持Windows Server 企业号热问热答——来深圳微信开发者大会聆听一线讲师的实战分享 AngularJS 1.3.0正式发布 超光速发展! 学个痛快!十款不容错过的Swift iOS开源项目 HTML5:助力智能电视生态实现新跃迁 MDCC 2014移动开发者大会公布全部议程 求更密集!Apple Watch SDK将于11月正式开放 【答疑】微信开放平台开发者资质认证 专访Informatica亚太和日本区副总裁Murray Sargant:中国公司正考虑数据资产货币化 Facebook又开源:让iOS应用界面极致流畅的ASDK框架 一周消息树:盘点史上最具毁灭性的软件Bug 微信公众平台设备功能支持个人开发者接入 2014中国移动开发者大调查第三批获奖名单曝光 微信企业号上线,带你看看它的真面目! OpenStack Juno版本发布——支持Spark和NFV 【十问十答】对话Go语言开发团队 苹果要求、Android开始,64位时代真的来了! MDCC 2014产品与设计论坛:带你发现产品之美 applet,这个霸道的家伙!怎么解决阿? c++类的一个小问题 一个大家都很棘手的问题 关天构造函数的问题 学习《windows程序设计》中的问题? pb8里的autoscript怎么弹出那么慢 消息:c++与Visaul c是不是有一定的区别呢? 怎样通过程序获得当前可用的拨号网络列表?? 高手在哪里?-------> 如何在第一时间里获得屏幕的变化呢?及获得屏幕变化的那部分?各位大师,帮帮我。谢了。 请问想具备基本的网络和数据库管理方面的知识,看什么书好啊?请大家帮忙推荐一下,谢谢! 请教W2k下使用Access的问题 大家帮帮忙,sql菜鸟问题, 各位兄弟帮忙看一下 谁知道高程分数线?拜托告知一声! 如何判断是否做了超级连接? vc中怎样调用dos下的代参数的可执行文件???请教! 如何让TreeView控件的每一个子节点前有一个多选框! jbuilder4中的JGL的问题 如何构建一个数据仓库(高分求救) 怎么样在NT里看到我的电脑装了哪些硬件? 查找数据不连系变化 招聘WINDOWS界面程序员(可兼职) 哪里有介绍cricheditview的中文文章,最好是详细一点的,谢谢! 怎么样将NT里的Temp这个文件移到别的分区? 刚买的机器回来却出了问题(请教高手) 小问题70分,谁解决了就送给谁 Server对象中,由两个方法跳转到其它网页,一个是 Execut() 另一个是什么?? 输入日期有误时,系统出现提示信息?如何避免这一现象,并且出现自己的提示信息呢? 怎样才能既不允许改变combox的值,又能给它的text属性赋值。也就是怎么指定它显示哪一项? 如何使用windows media 软件 WebBrowser控件的更多帮助信息到哪里找? VC中有关CListView的问题,请各位大侠指点 哪位老师知道.gra(据说是FOXPRO下使用的图表文件)如何打开?谢谢! DirectShow----WM_GRAPHNOTIFY怪问题!!! 到哪里可以找到DAO的最新的引擎? 拨号网络的原理是什么?请各位大哥赐教 有关于SQl_DMO. 如何在servelt中调用javabeans及其属性?急!也就是说,在servlet中如何通过调用javabean来和jsp进行通信呢? xslt语句可不可以内嵌到javascript函数中作参数??? 请大家进来探讨一个问题:用VC++编写事件处理程序 Fastreport2.45的安装及其应用,请高手help(分不够可以再加!!!) 招聘:windows界面程序员(可兼职) 请帮忙指出以下语句的错误。 用r+打开一个只读文件会怎样? 数据库连接没有问题,怎样解决这个数据库备份出错问题? 诸位大虾,VBA里面有没有全局的宏 高手,谁能大概讲一下,引用是如何工作实现的呢? WIN_NT上的IIS问题:想将InetPub目录移动,可是怎么也不能将InetPub目录下的Catalog.wci,MailRoot目录移动,也不能删除,请教。 Tdatetimepicker 极限搜索:上海 高程 考分查询 如何在vc下调用dos下带参数的.exe文件????请指教。。。。 磷在氯气中燃烧现象及原因 1-3丁二烯发生1.4加成或1.2加成的反应原理是什么 高一化学:用单线桥连接方法表示氧化还原反应中化合价的升降、电子转移 老师好!如图所示A~G是初中化学常见物质.图中剪头代表转化,“—”表示能相互反应.A为Hcl,G为H2.B,C,D,E,F均为氧化物. 1,3-丁二烯与等物质的量的溴加成时,主要是1,2-加成还是1,4-加成? 高一化学.单线桥 有关电子转移1题 K2Cr2O7 + 14HCl = 2KCl + 2CrCl3 +3Cl2 + 7H2O若有1molHCl被氧化,则有多少mol电子转移生成Cl2的物质的量是多少2题 3Cl2 + 8NH3 = N2 +6NH4Cl若有106.5gCl2参加反应则被氧化的NH3在标况下的体积多 初中化学中的几种常见物质有下图所示的转化关系 单线桥表示电子转移 请说明详细的情况 一道电子转移的化学题~在一定条件下,分别以高锰酸钾,氯酸钾,过氧化氢为原料制取氧气,当制得同温,同压下相同体积的氧气时,三个反应中转移的电子数之比为6KMnO4===3K2MnO4+3MnO2+3O2 2KClO3=2KCl+3O2 (2009•重庆)(4分)初中化学中的几种常见物质有下图所示的转化关系(部分反应物和生成物已略去),其中反应②常用于工业生产,反应③常用于实验室制备F气体.请回答下列问题:(1 初中化学重要化学方程式以及化学符号知识? ……氯气和磷发生反应~ 甲、乙、丙、丁是初中化学常见的化合物,甲和乙中含有碳元素,丙能做干燥剂.它们之间有如下图所示的转化关系(部分物质和反应条件已略去).则乙的化学式为______;丙转化为丁的化学方程 稍微说详细点,怎么看电子转移多少 就是不理解,到底算哪的?给个系统的回答,思路。 高一化学氧化还原反应方程式 初中化学的重点知识有哪些? 氯气与磷的反应条件如上 写出下列反应的化学方程式,若为氧化还原反应,请标出电子转移的方向与数目⑴铜与稀硝酸反应 ⑵二氧化氮与水反应⑶加热氯化铵和氢氧化钠的混合液 ⑷碳与浓硝酸反应 实验室制取氯气的化学方程式 4NH3+5O2=4NO+6H2O 有多少电子转移?当有2MOL电子转移时,有多少MOL氨参加反应? P与干燥氯气反应,若0.25克磷消耗314ML氯气 (标准状况)则产物中PCI3PCL5的物质的量之比 写出实验室制取氯气的化学方程式 A、B、C、D、E是初中化学常见的五种化合物,C、D为同一类物质,他们之间的转化关系 一定条件下磷与干燥的氯气反应,若0.25g磷消耗314ML氯气(标准状况下)0 - 解决时间:2010-6-16 19:41 一定条件下磷与干燥的氯气反应,若0.25g磷消耗314ML氯气(标准状况下),则产物中PCL3与PCL5的物 怎么记住初中化学方程式 如图是初中化学常见物质间的转化关系(1)若A含三中元素,A的俗名是 若A含四中元素A的化学式为 (2)写出B——C的化学方程式指出C的一种用途(3)若E——F为中和反应E的化学式为 (4)写 A、B、C、D、E五种物质均为初中化学中所涉及的常见物质,它们存在如右图的转化关系,“→”表示可以向箭头所指方向一步转化,弧线表示两种物质间可以发生反应,C是常见气体,D是常见单质,( 一定条件下磷与干燥氯气反应,若0.25克磷消耗314ML氯气 (标准状况)则产物中PCl3与PCl5的物质的量之比接近于多少? 氯气和磷反应的产物,现象及方程式 红磷在氯气中燃烧,因鳞与氯气物质的量之比不同,可发生以下两个反应:2P+3Cl2==2PCl3PCl3+Cl2==PCl5现有6.2g红磷在0.36mol氯气中充分反应,求生成物中PCl3与PCl5各多少摩尔? 一定条件下磷与干燥氯气反应,若0.248克磷消耗336ML氯气 (标准状况)则产物中PCI3PCL5的物质的量各为多少 氯气和磷的反应方程式是什么 红磷在氯气中燃烧的化学方程式红磷不是P2O5吗? 亚硫酸根离子与水和氯气反应的化学方程式 二氧化硫与氯气和水反应的化学方程式 氯气与磷的反应,生成什么?什么现象 红磷放在氯气中燃烧,若磷和氯气按物质的量之比为1∶1.8混合,充分反应后生成物中三氯化磷与五氯化红磷放在氯气中燃烧,若磷和氯气按物质的量之比为1∶1.8混合,待充分反应后生成物中三氯 二氧化硫和氯气两种气体按照物质的量为1比1在水溶液中发生反应的化学方程式 磷与不足的氯气反应及磷与足量的氯气反应的方程式 红磷在氯气中燃烧的现象是什么 氯气通入SO2溶液中反应的化学方程式和离子方程式是什么? A、B、C、D、E都是初中化学中常见的物质,其中A和D是常见的盐写出下列物质的化学式:;A:____B:_____C:_____D:______写出下列变化的化学方程式:A+B→C+DE→B—→CA溶液—— ||——|B溶液—— |—→ A.B.C.D.E均为初中化学所涉及到的物质,他们存在如图所示的转化关系,C是气体,D是常见单质“→”表示可以向箭头所指方向一步转化,弧线间的两种物质可一发生反应1.若A在常温下是液体,则C的 等物质的量的氯气和二氧化硫气体...等物质的量的氯气和二氧化硫气体和二氧化硫气体通入滴有品红溶液的氯化钡溶液中,以下叙述正确的是A.产生硫酸钡白色沉淀,溶液呈红色.B.产生白色沉淀 磷在氯气中燃烧的现象 等物质的量的氯气和碘化亚铁离子反应方程式怎么写的?急求.望各路好汉伸手相助 氯气的水溶液中通入过量二氧化硫的化学方程式 指出化学反应SO2+2H2S=3S↓+2H2O中氧化剂与还原剂的分子个数比之比为________,还原剂与氧化剂的质量之比为_____________谢 碘化亚铁里同氯气多少时恶化学方程式 A-G表示初中化学常见的物质,它们之间的转化关系如图所示(部分生成物已略去),其中A为金属氧化物,E、F为金属单质,且F为紫红色,化学反应②和③的基本反应类型相同.(已知CuO+H2SO4=CuSO4+H2O 如右图所示,A—E是初中化学常见的物质.图中“→ ”表示转化关系(部分物质和反应条件未标出).已知A是最轻的气体,C是人体胃液中含有的酸,D可以用于改良酸性土壤.①D的化学式_______;②C的 高一化学氧化还原电子数转移大家看个例子、3Cl2+8NH3====6NH4Cl+N2氧化剂是氯气、还原剂是氨气、这个都清楚、我的问题是当生成5.6L(标况)N2时、电子转移数是多少?被氧化的物质为多少克?这 实验室制取氯气反应的化学方程式. 如下图所示A—H是初中化学常见的物质.图中"→"表示转化关系,"-"表示互相能反应,(部分物质和反如下图所示A—H是初中化学常见的物质.图中"→"表示转化关系,"-"表示互相能反应,(部分物质和反 化合价的变化值*失去或得到电子的原子数=电子转移总数怎么样确定失去或得到电子的原子数?是看反应物还是看生成物? 实验室制取氯气的化学反应方程式. 如图所示,H是初中化学常见物质.图中“→ ”表示转化关系,“—”表示能相互反应(部分物质和反应条件未标出).已知A,B,C都是钙的化合物,B用于食品包装中干燥剂时可转化为C;D,E,F的组成中 1,3-丁二烯分子与一分子氯气的加成反应中是1,2-加成占优势还是1,4-加成占优势 用单线桥法表示下列反应(高一化学)!2H2+O2=2H2O4P+5O2=2P2O52KClO3=(等号上是MnO2,下是加热)2KCl+3O2↑2H2O=2Hg+O2↑WO3+3H2=W+3H2O
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn