为什么说docker是一种革命性的技术?

外贸外语IT小精灵


docker并不是革命性的技术,是一种技术在合适的时候被推倒了这个位置,据我所知docker刚出来也没有火,什么敌不过其他虚拟化方案,直到近两年微服务以及serverless等应用场景的出现,以及k8s等成熟的分布式解决方案的出现才最终成就了docker


黑白人


说docker是革命性技术谈不上,但是docker在软件研发到测试到发布,相比物理机、虚拟化都有非常大的优势。让大家觉的它是革命性技术。其实docker只是在软件研发比较有优势。

软件研发的挑战

为什么要讲软件研发挑战呢?因为docker在软件研发上市最具优势的。

一个计算机软件从客户的需求到程序员手下的代码到可运行版本的诞生,会经历需求调研、架构设计、程序编码、各种测试。在这过程中,程序员会碰到几个主要的挑战:

①、用什么操作系统(windows、linux、unix)?来源于客户需求;

②、用什么开发(J2EE,dot NET

③、开发方法(瀑布型、快速迭代等)?来源于开发团队;

④、频繁测试(需要频繁部署测试环境:含系统、开发所需环境,比如java;);

⑤、运行环境和开发环境有差别导致很多问题;

从上面挑战可以看出:软件研发跟软件代码不相关,又不得不做的是开发环境的部署,而且这里一直都需要用到它,一直持续到软件正式上线。

而docker非常适合这个需求,它利用linux的namespce技术将 代码运行需要的开发环境、网络、进程、数据存储打包在一起。和其他的docker或者系统进程完全隔离,互相之间不受影响,非常优越性。下面我们就来看看它的优越性:

docker的优越性

前面我们已经简要说了下docker的大概的技术和优越性。这里详细展开讲解一下:

1、持续一致性

这个是docker的核心优势,它打包了开发所需要的开发环境,而且这个开发环境一直保持不变。这个持续一致性,对于软件研发来说是非常重要的。

因为软件研发编写的代码需要很多依赖的包和库文件。而且版本不同也存在很多差别。所以,docker保持了这个一致性,减少了研发人员很多麻烦,大大提高效率。

2、性能卓越

docker 将开发环境、网络、进程、数据存储等系统运行需要的资源的都打包在一起。具备了和虚拟机一样的特性。但相比虚拟机它不存在虚拟层、也不存在虚拟硬件。执行效率方面,docker打包的进程可以直接调用cpu来执行,所以docker的性能相比虚拟机快很多。

3、很好的隔离性

前面说到docker打包了开发需要的资源形成一个容器。这个容器内部和外部天生具有很好的隔离性。容器内的进程和容器外的进程是不会互相关联通信的,而且它占有的计算资源cpu+内存+存储都是可以限定,不会互相竞争而导致物理主机崩溃。但相比虚拟化的隔离性还是差了一点点(因为不同容器还在同一系统下运行)。但不影响使用。

4、高安全性

高安全性也得益于它的隔离性。因为无论容器内的进程也好、数据也好都是独立的。外部无法获得。容器之间需要网络通讯,必须使用docker hub。而docker hub是类似于交换机的网络堆栈,是可以配置互相访问的端口。确保交换的安全。

5、高兼容性

docker 因为它是一个打包封装的容器,原本运行与linux系统内。如今云计算快速发展。docker 对云计算计算兼容性很高。

  • 云计算的巨头“亚马逊”、“微软”都是支持和兼容docker的;

  • 虚拟化的领头羊“vmware”也是支持兼容docker的;

  • 开源的Openstack也是支持和兼容docker的;

  • 国内的华为、阿里、腾讯云都是支持兼容的;

如此高的兼容性,为研发人员获取docker提供了很高的便利性。

结束语

综上所述,Docker 是在软件研发到正式发布具有很高优越性。同时它具备的这些特性也符合应用运行需要的基本特性。所以被人认为是革命性技术。

其实它也有很多不足之处,比如:隔离性、安全性就比虚拟机差。


数智风


一个非常好的问题,我是工作多年的Web应用架构师,来回答一下这个问题。欢迎关注我,了解更多IT专业知识。


Docker称不上革命性的技术,但可以称得上是一个革命性的解决方案和工具。


Docker基于Linux内核通过操作系统和虚拟容器调用CGroup, Namespace等系统接口完成资源的分配与相互隔离,依赖系统资源运行,使用的技术都是已有的。


Docker出现之前,有现在还在用的VMWare虚拟机,有Ghost,部分解决了服务器安装配置的琐碎工作,但是没有解决运行环境的问题。比如常见的环境不一致的问题:开发环境能运行,测试生产环境有bug?还有就是每次新服务器、新环境搭建时无穷无尽的问题。


那么Docker出现后,整个环境被打包起来,也就是将所有安装配置代码化自动化了,结合资源编排和云服务,可以秒启一个集群化的web服务系统,如果没有容器技术是做不到的。Docker是使用最普遍的容器技术,事实上的容器技术标准。


推荐看一个Docker秒启Web服务的视频:https://www.toutiao.com/i6801418770997838343/


急速马力快de源码客


Docker最近很火。Docker实现了“集装箱”——一种介于“软件包”和“虚拟机”之间的概念——并被寄予厚望,以期革新Internet服务以及其他大数据处理系统的开发、测试、和部署流程。

为了使用Docker,需要了解不少工具及其设计思路;而这些工具的文档分布在不同的网站。

说是革新,其实是Google已经用了很多年的方式,只是最近才因为Docker开源项目而广为人知。最近这将近十年的时间里,各互联网公司和高校都在奋力模仿Google的计算技术。了解这一模仿的过程,可以帮助我们深入理解分布式系统(包括现在常说的“大数据系统”)中若干重要问题。为此,本文以技术教程为主线,穿插了一些关于Hadoop和Mesos等“模仿”项目的介绍,简要追溯它们勇敢而艰难的“邯郸学步”的历程。最后,本文会介绍Google最近公布的“正确答案”——Hubernetes——Google核心技术Borg的开源版本。

Docker

Docker是一个软件系统,实现了一种称为“集装箱”的概念。集装箱类似Google机群管理系统Borg中的包(package)。

通常我们说的“包”是软件包——比如Ubuntu/Debian Linux里常见的.deb文件——安装的时候,安装程序会把被依赖的包也装上。可是执行的时候呢?得根据具体情况配置,然后依次启动互相依赖的多个程序。比如,启动一个Web服务之前,要启动Apache和MySQL;而且他们仨都得有合理的配置,确保它们能一起工作,来实现这个Web服务。

但是Docker集装箱以及Borg中的包更像虚拟机。虚拟机里包括程序和配置,所以可以被执行——也就是执行其中的程序。因为程序是配置好的,所以虚拟机可以被扔到各种环境上去执行——包括开发机、做演示用的笔记本电脑、用VirtualBox虚拟的机群、测试机群、预发布环境和产品环境。近几年随着“云计算”概念的普及,虚拟机被广泛使用,作为分布式计算的基础调度单元。

Docker作为一个软件系统,可以用来创建“集装箱镜像”(container image)和执行这些镜像。就像VirtualBox是一个软件系统,可以用来创建和执行虚拟机。但是集装箱比虚拟机“轻”——一个虚拟机包括一组虚拟硬件、操作系统,用来执行用户程序;而集装箱里没有虚拟的硬件,也没有操作系统,它用主机(host)的硬件和操作系统来执行程序。

那么在集装箱里跑程序和直接在主机上跑有什么区别呢?一个区别是,集装箱有一套网络端口空间(port space)。一个集装箱里的进程可以各自开端口,也可以连接对方的端口进行通信。但是这些端口是集装箱之外的进程看不到的。我们也可以让集装箱把某些内部端口号展示给外部,比如把集装箱内的端口5000映射到外部的8080。这样,当我们用主机上的程序(比如浏览器)访问本机(主机)的8080端口时,实际上访问的是集装箱里的5000端口。这项对外公开集装箱内部端口的技术,称为端口转发(port forwarding),和虚拟机的端口转发概念一样。另一个区别在于,集装箱里有虚拟的文件系统。这样我们可以把要执行的程序拷贝进集装箱。也可以把主机上的某些目录映射成集装箱虚拟文件系统的某些目录。

集装箱这个想法已经在深刻地改变传统分布式系统的开发、测试和部署的流程了。传统的做法是,开发者写一个Makefile(或者其他描述,比如CMakeList、POM等)来说明如何把源码编译成二进制文件。随后,开发人员会在开发机上配置并且执行二进制文件,来作测试。测试人员会在测试机群上配置和执行,来作验证。而运维人员会在数据中心里的预发布环境和产品环境上配置和执行,这就是部署。因为开发机、测试机群、和产品环境里机器的数量和质量都不同,所以配置往往很不同。加上每个新版本的软件系统,配置方式难免有所差异,所以经常造成意外错误。以至于绝大部分团队都选择趁夜深人静、用户不活跃的时候,上线新版本,苦不堪言。

而利用集装箱概念的开发流程里,开发者除了写Makefile,还要写一个Dockerfile,来描述如何把二进制文件安装进一个集装箱镜像(container image),并且做好配置。而一个镜像就像一台配置好的虚拟机,可以在机群上启动多个实例(instance),而每个实例通常称为一个集装箱(container)。在自测的时候,开发者在开发机上执行一个或者多个集装箱;在验证时,测试人员在测试机群上执行集装箱;在部署时,运维人员在产品环境执行集装箱。因为执行的都是同样地集装箱,所以不容易出错。

这种流程更合理的划分了开发者和其他角色的工作边界,也大大简化了测试和部署工作。





不会算命的猫老邪


在深入讨论Docker受欢迎的因素之前,值得注意的是,Docker不是唯一的容器平台,也不是第一个推出的。

其他框架,如OpenVZ和LXC,从20世纪20年代中期诞生。而其他类似容器的技术,如FreeBSD更进一步。而Docker在2013年发布,与目前的大多数主流技术相比,是一个非常年轻的技术。

不过奇怪的是,Docker并不是一个比较成熟的容器平台,在过去几年中已经大大地凸显了这一点。这是一个值得思考的结果,为了了解什么使容器普遍如此受欢迎,以及为什么Docker是如此成功地替代容器框架,而很少采用。

解释Docker的流行度

所以,人们需要考虑这两个因素。

首先,这就是为什么容器在过去几年中一直被证明对各种规模的企业具有吸引力的原因:

容器的启动和停止速度比虚拟机快得多。

容器更易于移植,因为无论何种类型的操作系统托管它们,容器主机环境都是非常一致的。

容器应用程序易于扩展,因为容器可以从环境中快速添加或减少。

容器可以轻松将复杂的单片应用程序分解成更小的模块化微服务。

那么有一个问题,那就是为什么Docker变得如此受欢迎。这是一个很难回答的问题,但专家认为以下因素正在发挥:

Docker从一开始就是开源的。这有助于Docker在技术市场更有吸引力,到2013年,开始将开源视为软件生产的默认模式(如果Docker在五年前出现,当开放源码的商业兴趣不那么强烈时,开源并不会对Docker有所帮助。

Docker出现在正确的时间。到2013年,虚拟机终于成为一种过时的技术。组织正在寻找一种更精简,更方便的部署应用程序,Docker恰好符合要求。当OpenVZ和LXC出现在20世纪20年代中期时,传统的虚拟化技术还没有完成,所以这些容器框架不太吸引人。

Docker与DevOps革命相吻合。DevOps在2010年流行起来,强调了软件交付中的敏捷性,灵活性和可扩展性。Docker容器恰好提供了一个很好的构建块,用于根据DevOps规定创建软件交付管道和部署应用程序。

Linux的比较

在许多方面,Docker的不可预测的成功反映了20世纪90年代Linux内核的成功。

正如专家所指出的那样,Linux作为一个默默无闻的软件项目进入了世界,这是一个芬兰学生运行的一个模糊的软件项目,没有资金或先进的设备。Linux最终成功地取得了巨大的成功,而像GNU和BSD这样的内核项目更为突出,更多的资金,但其专业化的内核项目受到限制。

Docker和LXC之类的替代品之间的区别可能不如Linux和GNU Hurd那样显著。尽管如此,Linux和Docker的崛起在相当短的时间内从默默无闻的项目到具有巨大商业价值的项目,这二者十分相似。

结论

专家认为时间可以解释为什么Docker容器变得如此受欢迎。Docker容器解决了过去五年来许多组织寻求解决的软件交付和部署问题。虽然早期的容器框架提供了类似的解决方案,但人们对它们的兴趣有限,因为他们解决的问题在首次亮相时,当时人们的需求并不紧迫。

一般来说,专家认为与Docker的时间相比,Linux的成功与否更为关键。Linux的成功很大程度上是由于其他内核项目(尤其是GNU)的混乱,因为Linux早期采用了创新的,分散的开发策略。但是时运肯定帮助Linux获得了成功,就像Docker一样。


Echa攻城狮


国内的程序员崇洋媚外,否则中国很多技术跟理念比国外的高,特别是靠着一知半懂的啥原理技术上去的业界领导者,这些人其实也就是皮毛,不过中国的技术精神还是挺好的就是不自信崇洋媚外!docker真的不算太高端技术,只不过是把应用打包了一下


分享到:


相關文章: