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

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

证据显示:Linux战争已经转移到OpenStack RestKit:iOS开发必备,告别众多无聊代码 技术新突破:手机和平板可远程控制PC,Chrome Remote Desktop亮相 物联网高速公路上,快数据如何驱动分析 苹果或将使用雅虎的搜索引擎,抛弃谷歌 百万用户规模的系统如何扩展 大数据需要软件定义存储 倒计36小时!2014中国Spark技术峰会即将召开! 设计师专宠,Startup强大的UI设计框架 走进金山云:从技术走向服务 Qt Creator 3.1.0发布,全面支持iOS、Android、WP Google大中华区总裁石博盟与中国大学生畅谈科技与创新 阿里云:从防到攻,深入浅出DDoS 大数据处理分析的六大最好工具 微软:Windows Phone开发者可回复用户评价 不断缩水后的微博上市首日大涨19% 曾一度涨超40% Snapdragon LLVM编译器全新升级 支持骁龙64位处理器 EDP:基于Node.JS与NPM的企业级开发平台 想改变世界,先改变自己——知名Hacker、发明家Mitch Altman专访 《近匠》iHealth,健康大数据助力硬件“破壳” 一周消息树:如何做到每天写代码? 一周热点:微软SQL Server 2014三大新特性 《Make》创始人Dale Dougherty:全民创客 DevOps正在扼杀程序员? OpenStack新版本:新增近350个功能,修复Bug超2900个 【走近讲师】易欢欢:数据对接和后台是互联网金融的技术最难点 最火HTML5 JavaScript游戏引擎:国外篇(二) 挑战最强大脑——来自全球的14个编码社区 摩尔定律让位于贝索斯定律 InPaaS:新一代云计算应用平台 【技术博客推荐】樊哲谈机器学习算法与Mahout 关于多媒体定时器的问题,各位进来看看 session出的问题,高手请进来!! 请问,大连雅奇培训如何?请指点。。。。。。 怎样用header()做下载文件? 关于检测组合键的程序怎样写? 菜鸟问题!!!页面显示后台数据 请问软件包LEDA -- library of the data types and algorithms 哪里有下载的? 如何获得当前页面中的所有Textbox控件集合? 如何对两个表操作???谢谢! java的程序在写Dreamweaver 4里写完不可以直接用,是不是 打印的问题 DELPHI5的资源编辑器用起来很不爽,有没有好点的? 帮帮忙~~~~ 请问软件包LEDA 哪里有下载的?谢谢 ado连接远程数据库是以文件共享方式,还是c/s方式啊? 有没有工作的JAVA程序员吗? 简单的语法问题 vb还是不太会用 求教 最菜的问题 如何保存无法保存的网页? 只要每人献出一点爱,人人都能成为程序员 呵呵,又有问题了 苦恼,大家帮忙啊 关于声音处理的一个问题 求英文资料,急!!! 帮忙解释一下程序,谢谢:) 怎样实现这样的存储过程?高手快来! 用过websnap的进来看一下,巨简单! 调试版本与发布版本的区别? 急等答案, sql的基本表是用一个存储文件表示还是用若干个存储文件表示 我的Windows 2000有时无法关机(重起) ********通过编号找名称!*******求最快的方法!!! 格式化硬盘后安装WIN98过程中为什么出现蓝屏,继续安装下去连软件都安装不了? 请教一个让人郁闷的问题! 寻找一本人民邮电出版社出版的有关 GSM 网络优化的书 请问高手:能不能动态creatLayer? select * ????? 问候大家 晚上好 ,有个问题请教,立即给50分! 怎样使模式对话框最大化显示? 关于socket 十万火急,大哥大姐快救小弟一命!!!考高程的或考过的请帮忙,感激!!! 求救 跟帖 在SERVLET中,页面怎么跳转呢?客户端可以下载指定的ftp文件。。? 一个数据库连接问题??? 挂了双硬盘后,我的光驱不见了,请问怎么办?急!!!!!!!!!!!!!!!! 在SERVLET中,页面怎么跳转呢?客户端可以下载指定的ftp文件。。? 急急急急急! 寻求JB8+Weblogic7的配置! ftp 问题 CFormView有什么优势啊? 请问VB.NET中sln文件是做什么用的??? 你知不知ASP。NET可不可以做出JAVA APPLET 这样的效果?或者VB。NET也可以不? 稀土怎么样才能开采? e t s a 可以组成什么单词 问一道数问题已知代数式x方(a* x的五次方 + b* x的三次方+ cx)/x的四次方+d* x的平方当x=1时,值为1,当x=-1时直是?是-1伐 稀土怎么开采 黑洞一个小时=地球多少年? 高中政治生活是必修几? 稀土怎样开采 w t s e e 能组成什么单词 熬好的中药可以在常温下放多久不坏?(密封状态) 稀土在开采过程中产生的负面影响是什么 黑洞存在了多少年?黑洞是随宇宙诞生一起诞生的吗? 音响led灯我想做一个音响灯,灯是led.问题是用什么电路驱动.要求是这样的,有音频输入,有电源,led会跟着音乐的节奏亮,给个电路图. 打对号题 a e t s组成什么单词 怎么在音响上连接灯泡让它随着音乐的旋律闪烁?有源音响,但是我想在音响上接一串灯泡让它跟随音乐的旋律闪烁·请问各位大侠该怎么做啊帮帮忙!能不能请各位说的清楚一点啊! 打对号那题 e、t、a、t、s组成单词 功放机上像电灯泡一样的东西是什么,干什么用的. 打对号的题,在线等 世界上有没有无血动物 - 宇宙航行:关于地球同步卫星的说明中不明白的地方……由于同步卫星相对于地面静止,故其必须做匀速圆周运动,而做匀速圆周运动的物体的合外力必总是指向圆心……其中‘而做匀速圆周 打对号那道题4 将一个质量为M,边长为A的正方形均匀木箱放在粗糙水平面上将一个质量为m,边长为a的正方形均匀木箱放在粗糙水平面上,今用力推木箱使其绕一棱翻倒,求推力至少做多少功 答案是(根号2-1)m 日本核危机会污染盐巴吗? 三个打对号的题, 如图所示质量为m的木箱放在水平面上木箱中的立杆上套着一个质量为m的小球,开始时小球在杆的顶端,由静止释放后,小球沿杆下滑的加速度为重力加速度的二分之一倍,即a等于二分之一g,则小 卡拉ok音响高音会保护如何加灯泡详细步骤或图解我知道在音响里,我是说在分频器上怎么加 在绣十字绣过程中, 质量为M=50kg的木箱放在水平面上,木箱中的立杆上套着一个质量为m=5kg的小球.开始时小球在杆的底端,以16m/s速度向上滑行,滑行的最大高度为8m,则小球在下滑过程中,木箱对地面的压力为多少?希 LED灯条可以直接接上音响吗家里低音炮 可以把LED灯条直接接在喇叭线借口那里吗 我想让灯光跟着音频亮,我是电子白痴 谁知道怎么搞 有一种球从1.8米的高度自由落下后,第一次反弹的高度是1.5米,第二次反弹高度为0.9米,据此推理第三次弹起高度为()米 哲学有什么分类? 怎样记住有氧无氧呼吸公式 比赛用的篮球,从1.8米的高度自由落下后,第一次反弹高度应( )1.2米,( )1.4米. 运用政治生活说明如何理解当前国际形势的特点 氯化镁溶液是胶体吗?请回答具体些,马上选出最佳答案 对的打对号,错的打错号并说明原因 五颜六色是什么动物 无氧呼吸的公式是怎样的 判断的第四第五题打对号还是错号 掏鸟窝 我要四级燕子蛋,送我 要什么鸟蛋交换随挑要四级燕子蛋,加我好友,或留下开心名我加你开心名:罗文菁有5级燕子蛋,4级喜鹊蛋,4级布谷蛋,4级百灵蛋,4级珍珠鸟蛋,4级乌鸦蛋,4级白鸽蛋, 受平衡力的两个力大小相等吗 判断正误 对的打对号 错的打错号 掏鸟窝中怎么加入鸟友会 两力相同指两力的大小、方向、施力物体、受力物体都相同,实质上指的同一个力 这句为什么错? 请问:什么是二维码,具体怎么使用. 掏鸟窝中 什么是处在保护期的鸟蛋?为什么不能掏走? 锚杆长度和数量在设计里有要求吗,计算环向受力怎么样算啊?要重了? 怎么使用二维码?二维码是干什么用的? 关于问问分类我很气愤!分类是为了让想得到答案的人能更便于得到答案,而有些人不管什么分类,就选了,有兴趣的朋友可以去诗词歌赋里看看,没有几个是真正讨论诗词歌赋的!请问你们是怎么 长江的起源在那二 什么是二维码?二维码有哪些新奇应用 那为朋友能帮我买到是高等教育出版社或者是上海外语教育出版社急用! 英语翻译:1.你有养宠物的打算吗? 17岁,一米58正不正常? 大学英语教学大纲通用词汇表 哪里有旧书卖? 当大面积的烧伤护理不当时,易发生感染而引起严重的后果,为什么是由于非特异性免疫能力减弱?人体主要不...当大面积的烧伤护理不当时,易发生感染而引起严重的后果,为什么是由于非特异 球球从高处自由落下球从高处自由落下,触地面又弹起,每次弹起的高度都是下落高度的2/5,如果球从35米处落下,那第三次弹起的高度是多少 s e t w e 都能组成什么单词 急 问一道植物分类题下类植物依次按藻类植物,苔藓植物,蕨类植物,裸子植物,被子植物排列的是( )A 海带,葫芦藓,蕨,银杉,珙桐B 水绵,地钱,胎生狗脊,玉兰,水杉, 澳大利亚利用“特等舱”为美国搜集亚太我军2名专家将赴叙利亚执行化学武器销埃塞俄比亚“中国通”总统:中国值得埃“中国周”活动走进墨西哥高校国防部就日舰机闯入我演习区干扰演习提野田:小泉时代便开始探讨“购买”钓岛我军2名专家将赴叙利亚执行化学武器销日方渲染“中国威胁”旨在为扩充军备制陈昌智会见缅甸联邦议会代表团中国赴马里维和部队准备工作就绪国防部:日方有关言论颠倒黑白不自量力国防部:日方应习惯并接受别国合理合法国防部就日舰机干扰我军西太平洋演习提金正恩观看火力打击训练 欲打造精锐强北京积分落户分数好算门槛高 评分标准偷啥不好偷猪肉 藏哪儿不好藏裤裆财经观察:欧盟坎坷前行20年法国总统奥朗德会见王毅西班牙警察强奸妓女遭开除 被判监禁1中国海关知识产权保护展示厅正式开放杭州一天发生三起酒后落水事件 23岁沈阳市经济触底企稳 已显现回升向好态南京市委书记两会谈经济:促进更多民营广东十大海上丝绸之路文化地理坐标揭晓韩代理总统黄教安将发贺电祝贺特朗普就禽流感防控形势严峻 广州禽类交易实施调查:英国正式开始“脱欧”后英镑将进加拿大北部地区发生5.8级地震澳大利亚卫生部长被指“公费旅游”遭停美当选总统特朗普接受关于俄网袭干扰美日本外相出访捷克 就加强经济能源合作《爱乐之城》成第74届金球奖最大赢家当伙伴病到不能游泳 小金鱼用身体托着首届中华民族篮球公开赛总决赛将于2月政解|明年全国推行的这项新政,能否降国家统计局:2015年GDP最终核实江西资溪县“农民在建房遭强拆”涉事人乐平奸杀案蒙冤者称遭悬吊殴打 被口塞绥化四届市委常委简历(书记曲敏 副书国民党撤预防性不作为诉讼 “党产会”拉倒孙中山铜像判拘役 蔡丁贵选择入狱iOS10.1.1越狱不稳定 这款插
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘