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

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

enableTab(position)-JQuery API tabs(initial, settings)-JQuery API triggerTab(position)-JQuery API triggerTab(position)-JQuery API Tooltip(settings)-JQuery API PHP简介-PHP初学入门教程1 选择PHP的理由 -PHP初学入门教程2 从一个简单的程序来了解PHP -PHP初学入门教程3 PHP语法基础 -PHP初学入门教程4 建设一个简单的交互网站(一) -PHP初学入门教程5 建设一个简单交互的网站(二) -PHP初学入门教程6 建设一个简单交互的网站(三)密码验证 -PHP初学入门教程7 PHP文件上传 -PHP初学入门教程8 为站点添加投票功能 -PHP初学入门教程9 广告条轮播-PHP初学入门教程10 操作MySQL数据库实现简单的留言板-PHP初学入门教程11 使用PHP来操作Oracle数据库 -PHP初学入门教程12 技术杂项PHP教程结束篇 -PHP初学入门教程13 .NET中DataSet和DataReader的区别与转换 CGI技术及其开发(二)-Delphi资料 CGI技术及其开发(一)-Delphi资料 COM/DCOM中如何传递数组-Delphi资料 COM与DCOM的区别与联系-Delphi资料 Cookie的建立使用-Delphi资料 Delphi 3中Cookie的建立使用 Delphi 中 串 行 通 信 的 实 现 Delphi4.0 开发WEBMAIL程序 Delphi4的Winsocket编程 Delphi4开发WEBMAIL程序 Delphi编写网络程序的安全措施 DELPHI 和 THE INTERNET 在线等待,我该响应谁?关于注册表单的简单问题! 第一次用RedHat Linux 8.0上CSDN.散分!! 进度条与进程的同步(马上给分) TCP协议能保证传输数的据的顺序吗。 win2000英文版操作系统下如何编辑中文文档?打什么补丁? 多线程问题,头晕!请高手帮忙! winrout的端口映射问题? 女儿经转载 如何实现使IE的回退按钮disabled 使用C#开发asp.net时对OO的一点不明白 vbscript调用perlscript(第一次写作,跟贴有分,欢迎交流) 怎样获得polyline曲线上点的坐标? MDI窗口如何关闭所有的子窗口? 求server2000下创建一个虚拟目录分配权限限制用户使用大小的API 想用VB制作一个标签打印系统。急! 为什么可用分不增加了? 请问怎样得到表的列数?如何得到某个列的名称? 有做过门禁系统的近来谈谈 谈的热烈的话我还要加分的:) 想做一个负责连数据库的代码模块,但不知道C#中模块的格式、与怎么调用?请赐教! 关于ODBC API中USHORT方式绑定的问题 有办法保证我的asp程序只能在一台指定的服务器上运行吗? 怎样将该段VB的代码传为C#(有关调用winAPI)? 关于Remoting的配置问题,高手帮忙! 关于安装系统的问题? 各位见笑了,对office不熟,在powerpoint里更改了母版并保存过了以后,怎么再改为不用母版? 高分讨教:如何控制用户的行为 高难度问题!!!~~~~~ 打开首页时,弹出另一窗口! 请问这个问题该怎么处理!十万火急!谢谢! 急:一个.Net 写DLL及调DLL的问题,请大家帮忙!(在线等候......可以再加分msn:w.hua@ynmail.com,qq:25857100) 救命啊 查找某个目录下是否有某个文件 邮箱命名的问题??? 怎样在一个窗口控件中显示两条自由报表的记录? 紧急求助USB带宽 请问哪里能下到《inside the c++ object model》英文版啊,谢谢 新手提问,大侠莫抛弃我,谢谢,请往里看。 求教:我想拦截CreateProcess()的调用,并取出参数是否可行???? 这是什么病毒 如何指定发送端口 如何设置treeview的scrollbar? 请问各位,谁写过一个程序的整个文档,小弟很急,想参考一下。不知是否可以。谢谢了! 打算过年后跳槽,大家帮帮忙看看我这水平能拿多少?来者有分 天灾 +人祸100分求救 各位再请看看: ccur(922337203685477.30)=922337203685477.25 ??? 用JAVA做APPLET程序的朋友请进!!! 如何使应用程序(基于对话框)在状态栏里不可见 急,求救!在线等!请帮忙,谢谢 SQL Server 的客户端问题? 在线等; 好好的程序不能运行了 ,提示:不能创建宏 通过了公共英语三级,什么时候有证书拿?怎样拿呢?成绩出了大概过多久才能拿证书呢?证书是不是快递过来的呢? The boy is two years 空than his brother.A 、 2 years older B 、2 years elder请问这里为什么选A不选B?还有表语和定语的概念是什么?区别又是什么》》? 我喜欢站在高处欣赏风景 怎么翻译 我公共英语三级这样考是不是能拿全证啊?我去年下半年过了笔试,拿了笔试的证书,今年上半年过了口试,我有保留上次的成绩来着,是不是可以拿个整的啊?o(∩_∩)o His brother is younger than the other boys in his class.(改为同义句)His brother is _______ _______ _______ in his class. 写作方法 英文怎么说 THin的反义词 选择题1 The boy is than his brother. A one year elder B one year older 英语不会怎么办? 各位英语达人们, thin(反义词)是什么 关于堕落天使的玄幻小说谁知道关于堕落天使的小说?要文笔很好的...狂神和堕落血天使已经看过了...还有其他的吗? 各位英语达人们,帮帮忙,做英语 想好好学英语了但只记住了单词别的都不知道,我这种情况应该怎么学好英语比如说语法,还有什么谓语主语,人称,动词,时态等等除记单词外的这些我都不知道,只记住了大部分的单词,我该怎么 堕落天使是谁 定都北京的朝代有哪些? head,the,the,green,shaking,his,in,boy,is,sweater咋写连词成句? B车堕落天使怎么样连续开了两个金丝缕中两个15天堕落天使,第一次中绝版B啊!电信一Q369360666 我是一名学生,我要能变过去式和过去分词的词,并且把过去式和过去分词写下来 例:go--went--gone我只知道一点点,只要能变得我全要,是要不规则变化的 用"the,is,the,in,boy,green,his,sweater,shaking,head在牛津英语6A上 堕落天使什么意思 哪几个朝代在北京定都? The boy in the green sweater is shaking his head.改为一般疑问句 急啊!同志们帮忙一下 威海学英语哪里好 slow反义词,short反义词,win过去式和badly反义词我需要帮助 公共英语三级笔试过了能拿证么 There are some easy English questions.(改为单数句) she often wears a pair of trainers (对划线部分提问) Itis surprising that --English can not speak --English language.A an,anBthe,anC/,an Dthe,the选哪个请说明理由!为什么答案为B 是a pair of glass 还是a pair of glasses 公共英语三级证书有用吗? The woman wants to buy a pair df trousers(同义句转换) I used to wear a pair of 是glass还是glasses 公共英语三级证有用吗这个证 我考下来了 找工作的时候能起到多大作用啊 I can't speak English.Please speak Chinese.You should not think that you don't know yourself when you came from abroad.汉语怎么说 He wants to buy A.two pair gloves B.two pair of glove C.two pairs of gloves 应该选哪个? 写出下列单词的反义词.1.high—() 2.badly—() 3.down—() It’s surprising that she could learn to speak English without a foreign ______ at such an old age.A、 tone B、 accent C、 sound D、pronuciation 文字翻译英语 阳台 advise sb to do与suggest sb to do的区别, his and warm green nice sweater is 连词成句 2010年12月英语六级模拟跪求2010年12月英语六级的模拟题,最好带听力. i a of pair boots want (.)连词成句 是一道题:the reporter went to the sea with severval ____to look for the fishing boat (fish) money not happy,more money happy.No money not happy,more money happy. want to a pair of tuy I shoes 怎么连词成句? went fishing 中的fish为什么要ing? Money _____ can't make you happyA.ever B.lonely C.alone D.just I want a pair ( )boots. last weenkend i went ()and() with my parents.ashopping,fishing b.shopped.fished c toshop,to fish it was his grandma's birthday变一般疑问句怎么变 he is not such a clever boy as his brother同义句是什么呀 写一篇关于“我的学习榜样”的英语作文 It's my backpack.改成一般疑问句 The boy is not so ______ (interesting) as his brother.是interesting还是interested为什么加interested 如何提高做事效率的英语作文 It is his backpack改否定句 The boy is not so(.)as his brother A.clear B.cleverC.taller D.shortest The boy is _______ than his brother.A.two yearThe boy is _______ than his brother.A.two years older.B.two years elder.C.two-year older.D.two-year elder. 我的爸爸用英语怎么说?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘