如日中天的Docker解决了什么问题?

更新时间:2023-05-05 17:35:40 阅读: 评论:0

如⽇中天的Docker解决了什么问题?
毫⽆疑问,DocKer成了近些年来最⽕热,甚⾄最具颠覆性的技术之⼀。国际上,所有泛云计算相关的公司,⼏乎都在某种程度上宣布⽀持并集成Docker。在2014年6⽉的DockerCon中,很多公司都分享了他们⾃⼰如何和Docker集成的故事。虽然每家公司⽤着各⾃不同⽅式实现着不同程度的同Docker的集成,但他们都⼀致认识到了Docker可能会为他们带来的潜在收益。Microsoft,Amazon,IBM,Google,Facebook,Twitter,Red Hat,Rackspace和Salesforce等诸多公司共聚⼀堂,共同⽀持某⼀技术的场⾯似乎也不是我们经常能看到的。同时,国内众多泛云计算公司,互联⽹公司,甚⾄相对传统的IT⼚商也对Docker 多有关注。
►为什么像Microsoft或者Amazon这样的巨头会⽀持Docker?
►为什么像之前的PaaS玩家,如Heroku和Google,也在Docker⾝后,摇旗呐喊?
► Docker的出现,是不是为所有的这些⼚家提供了⼀个新的领域,新的竞技场?
► Docker真的能融合IaaS和PaaS么?
►我们⼜真的能相信上⾯的提到的⼚家会持续的⽆条件的⽀持Docker么?
这⼀系列的问题,在已经过去的2014年并没能给出答案,但在2015,相信⼀切会逐渐明朗。
似曾相识的历史
如果说在这之前,还有哪项技术获得了类似的业界的⼴泛⽀持,我想是Java。当Java在上世纪90年代发布的时候,每⼀家公司都表⽰了极⼤的兴趣,直到他们意识到Java实际上对他们⾃有的平台其实是⼀种巨⼤威胁。Java的愿景是“Write Once,Run Anywhere”,⽽Docker提出了“Build once,Run anywhere,Configure once,Run anything”。很⼤程度上,⼆者都对某些公司形成了潜在的威胁。尽管我们⽬前还看不到具体的⼀些公司针对可能的威胁采取的应对措施,但未来是谁也⽆法保证类似Java或VMware的历史不会重演。
⽬前,实际上泛云计算领域⼀些重量级⼚家,⽆论是IaaS⼚家, VM⼚家还是SaaS⼚家,⽆论是国际公司,还是国内企业,都在持续密切关注Docker,并评估Docker对⾃⾝业务的影响。
Docker的架构
从上图,我们可以看到,容器由于省去了操作系统,整个层级更简化,可以在单台服务器上运⾏更多的应⽤,⽽这正是IaaS所需要的,可能5G右的空间,对你来说不是什么⼤事,但是如果你需要对外提供成千上万的主机,那就是不得了。
普通虚拟机将整个操作系统运⾏在虚拟的硬件平台上,进⽽提供完整的运⾏环境供应⽤程序运⾏,⽽Docker则直接在宿主平台上加载运⾏应⽤程序.本质上他在底层使⽤LXC启动⼀个Linux Container,通过cgroup等机制对不同的container内运⾏的应⽤程序进⾏隔离,权限管理
和quota分配等每个container拥有⾃⼰独⽴的各种命名空间(亦即资源)包括:PID进程, MNT⽂件系统, NET⽹络, IPC, UTS主机名等。
传统虚拟化
若⼲年前,当VMwae刚刚开始提供⼯作站虚拟化服务的时候,也许很少有⼈能想到它现在能成为企业IT服务中的主要⼒量,能取得现在的成就。随后的⼏年内,VMware已经将虚拟化扩展到服务器,⽽现在更是已经扩展到云计算领域。对于Docker及其⽣态系统⽽⾔,借鉴传统虚拟化的经验,最终提供更安全,更健壮的⽣产环境的服务也应是Docker的⽬标之⼀。事实上,⽬前在裸机上直接运⾏Docker也成了传统VM之外的另⼀种选择。
坦率的讲,相较传统虚拟化⽽⾔,Docker的⼀系列的问题仍亟待解决,如缺乏成熟的管理⼯具,⽣态系统虽⼤但仍不完善。但我们仍然认为,Docker或者说容器虚拟化技术仍有很⼤机会能够解决这些问题,并最终取得相当的成功。
CaaS:容器即服务
⽬前,已经有⼀些新兴公司,以有些类似IaaS的⽅式,提供容器服务(Containers as a Service)。长远来看,也许CaaS的这种模式的出现,会使跨IaaS平台的动态调度容器、移动容器成为可能。就像Iaa
S的客户不需要关⼼其虚拟机的实际品牌⼀样,CaaS的客户也不需要关⼼他的容器到底是运⾏在AWS还是阿⾥云上。客户将会⾃⼰选择期望的地理位置,以及他们想要的容器运⾏,然后CaaS服务商将提供⾃动化的程序帮助进⾏资源调配,帮助客户选择最便宜的或最合适的公有云平台。
尽管这种在IaaS之上提供Docker容器的商业模式仍待讨论和观察,但Docker已经取得了巨⼤的影响⼒,如果Docker今后能在更多的企业,特别是企业的实际⽣产环境中发挥作⽤,我们认为CaaS同样是可以期待的。
对IaaS⼚家的影响
从创业公司到IT巨头,每⼀家公司都已经意识到或者逐渐意识到基于硬件的虚拟化的所为企业带来的益处。公有云⼚商,如AWS、Azure所提供的IaaS服务更多越来越像⽔、电、煤等公共服务。⽽Docker的出现,则便于这些IaaS⼚商提供更细粒度计算资源,进⼀步提⾼资源利⽤率,缩短资源开通时间,进⽽为进⼀步压缩公共云服务的成本提供了可能。对于如负载平衡、缓存和防⽕墙这些其他的IAAS的提供的服务⽽⾔,也可通过将其迁移到容器中,以提供更好的可移植性。
同时,对于混合云⽽⾔,VMware vCHS(vCloud Hybrid Service)和微软 Azure都在各种强调⾃⾝VM的可迁移性。⽽事实上,由于容器相⽐传统的VM更轻量,Docker容器可以动态地设置和迁移。从资源的利⽤率和可⽤性的⽽⾔,Docker是⾮常适合部署在混合云中,并能够更好的发挥混合云的能⼒。
对PaaS⼚家的影响
相⽐于IaaS,PaaS实际上起步更早。PaaS的初衷最是为了帮助开发⼈员实现够资源的⾃动调整,⽽不必⾯对IT基础设施管理的问题。早些时候,⼈们曾经预计PaaS将超越 IaaS,成为云计算领域中增长最快的市场。但⼏年后,由于Amazon在IaaS领域的巨⼤成功,使得早期的PaaS玩家,如Microsoft和Google意识到,IaaS相⽐PaaS⽽⾔,壁垒较低,更容易取得市场的认可。所以现在Microsoft和Google除了在原有的PaaS领域外,在IaaS领域也和Amazon展开了激烈竞争。
就PaaS⽽⾔,PaaS⼚商希望提供规范、⼀致的环境,⽽企业应⽤,⽆论是从开发、管理还是运维上都有各种个性化的需求。⼆者之间这种很难克服的冲突阻碍了市场的对PaaS的认可和接受。另外,每⼀PaaS⼚商都在为应⽤提供各⾃的服务和API,这就造成了应⽤在PaaS⼚商之间的移植是很困难的。⼀些组织在PaaS的迁移⽅⾯做了积极尝试,甚⾄希望能实现跨云服务提供商的迁移。但是由于没能得到类似Google App Engine和Microsoft Azure这样的⼚家⽀持,⽬前这些⼯作还还很难成为事实上的⾏业标准。
Docker的出现使PaaS以更简洁的⽅式为开发者提供服务成为了可能,Cloud Foundry⽬前也开始⽀持并集成Docker容器。有了Docker,开发⼈员不再需要为处理各种开发、测试、⽣产环境的差异⽽花费⼤量精⼒,他们可以将⼀个⼲净的开发环境直接迁移到⽣产环境,⽽不必担⼼各种依赖和配置问题。
这有效的解决了开发者经常⾯临的“依赖陷阱”。开发者不再需要为了使应⽤能够在PaaS中运⾏⽽学习额外的编程⽅式,他们的应⽤不需任何调整就可运⾏在Docker容器中。同时,Docker出现之后,开发者越来越多的考虑以Micro Service(微服务)的⽅式来实现他们的应⽤。长远来看,Docker将会使PaaS更易管理,更快地提供服务。
总体上说,Docker已经对仍在不断变化、演进的PaaS市场产⽣了影响。但这种影响究竟会加速PaaS的演进,打乱PaaS的演进,还是兼⽽有之,⽬前⾔之尚早。尽管⽬前还不是⾮常成熟,但Docker通过容器级虚拟化的⽅式,仍为乐于尝试的企业提供了⼀个解决环境依赖和可移植性问题的⽅案。
跨云的管理⼯具
多云管理软件通常被称为云计算管理平台 (CMP)。CMP通过对底层云平台的抽象,帮助客户来定义应⽤部署的拓扑结构。这种拓扑结构是独⽴于具体的云提供商或者云平台的。客户可以通过CMP来选择的具体的某⼀云平台来部署⾃⼰服务。通过CMP,客户永远不必处理具体某⼀云平台的特定的⽤户界⾯或API。这样,通过CPM,会把所有的云平台置于⼀个相同的公平竞争环境。
为避免被具体的云平台绑定,CMP⼀般只使⽤云平台提供的基础的计算单元,数据块存储,对象存储⽹络服务。⼀些CMP还将将⾃⼰的负载均衡、数据库服务和应⽤服务部署到每个云平台。这样会进⼀步避免将应⽤绑定到具体某⼀云平台。举例来讲,当客户在AWS上进⾏灾难恢复的时候,通过CMP,
他们也可以选择在⾃⼰的基于传统VM的私有云环境中运⾏他们的应⽤。
在很多⽅⾯,Docker提供了类似CMP的跨平台移植能⼒。客户可以通过Dockerfile声明⼀个Docker镜像和相关的拓扑结构,并把镜像build到具体的云平台中。与CMP类似,通过Docker,也可以将额外管理所需的⽹络、数据库等服务以容器的⽅式部署,进⽽满⾜各种具体的需要。
同时,⼀些新的基于Docker的管理⼯具也提供了多云平台的容器管理功能。事实上,这同CMP的功能有所重叠,⽽⼀些CMP⼚家也正在评估Docker的影响。像PaaS⼀样,我们不确认Docker到底会增加对CMP的需求,抑或反之?
同时,Docker的出现会不会让应⽤的故障追踪以及处理变得更复杂?⽽云计算管理平台会不会集成对Docker的管理?
对传统ISV的影响
对于传统ISV⽽⾔,在整个SDLC(Systems Development Life Cycle)环节中引⼊Docker,可能会成为⼀种趋势。Docker的引⼊,除了在ISV内部的开发、测试中会极⼤的解决配置依赖等问题,进⽽提升整体效率。我们认为,以容器为核⼼的持续集成和持续交付,最终将容器作为ISV向客户、向客户的云平台交付的实体,对于ISV及其客户⽽⾔,都会有很⼤的效率提升。
虽然⽬前,我们不清楚究竟是更多的ISV向其客户推荐了Docker,还是更多客户要求ISV基于Docker进⾏开发,还是两种可能都会有。但我们相信,Docker在企业应⽤市场,类似之前的VMware,会得到⼴泛应⽤。
对DevOps的影响
⽬前市场上虽然有很多各种各样的DevOps⼯具,希望帮助解决开发⼈员和运维⼈员之间的Gap。但Docker的出现,事实上提供了⼀种同Devops理念⾮常契合的框架。基于Docker:
►开发⼈员可以更专注于他们的代码,⽽不⽤担⼼如何在⽣产环境中运⾏他们;
►运维团队在部署的时候,可以视容器为⼀个独⽴的完整的模块;
► Docker分层的⽂件系统,使环境配置易于管理、维护;
►像Git⼯作流⼀样,通过Dockerfile,即便是复杂、异构的开发、测试环境,仍然可以⾼效的管理;
►即便在同⼀个VM中,多个容器仍能运⾏多种不同的环境;
► …..
我们认为Doker很有可能会对Devops的⽣态系统产⽣重要影响,甚⾄很有可能从根本上改变开发、运维的协作⽅式,并对市场上已有的持续集成,持续部署的解决⽅案造成重⼤影响。
这段时间Docker实在是如⽇中天,到处都是它的信息,它是什么?你认为它解决了什么问题?有哪些应⽤场景?
我们先来了解⼀下传统上的程序开发流程,这样有助于更清晰地了解Docker.
⽽对于Docker,简单的说Docker是⼀个构建在LXC之上的,基于进程容器(Processcontainer)的轻量级VM解决⽅案拿现实世界中货物的运输作类⽐,为了解决各种型号规格尺⼨的货物在各种运输⼯具上进⾏运输的问题,我们发明了集装箱。
Docker的初衷也就是将各种应⽤程序和他们所依赖的运⾏环境打包成标准的container/image,进⽽发布到不同的平台上运⾏。
从理论上说这⼀Docker container概念并不新鲜,各种虚拟机Image也起着类似的作⽤。Docker container和普通的虚拟机Image相⽐,最⼤的区别是它并不包含操作系统内核。
Docker到底做了什么,这个问题显然没有标准答案,⾯试官只是想看看你是否有⾃⼰的想法,是否对新技术保持敏感,如果你的观点跟⾯试官不谋⽽合,绝对加分)。
关于docker解决的问题,下⾯都是笔者个⼈看法:
1、程序在我这跑得好好的,在你那怎么就不⾏呢?!
这是⼀个典型的应⽤场景,Docker image中包含了程序需要的所有的运⾏时依赖,⽐如java的程序,肯定要在image中包含jdk;⽐如Python的程序,肯定要在image中包含对应版本的Python解释器。程序在我这跑得好好的,去你那就不⾏了,显然是环境问题。Docker把整个运⾏时环境打包放到image中,所以搞定了环境依赖问题!
这点很重要么?真的很重要!如果你做过部署或发布系统将会对此感触颇深。
我们知道,⼀个程序要跑起来,需要这么⼏部分:代码 + 运⾏环境 + 配置 + 依赖的服务。代码当然就是同⼀份代码,不同的环境都⼀样,通常不会有问题,Docker image中包含了运⾏环境+配置,这对部署相当友好。如果你没有做过这种系统(其实⼤部分⼈都没有做过啦),但是你肯定装过软件,装
⼀些复杂的软件的时候有没有因为版本依赖或者编译参数等让你抓狂?⽤了Docker再也没有这种问题了:

本文发布于:2023-05-05 17:35:40,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/858038.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:容器   提供   平台   环境   服务   问题   管理
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图