从四个问题出发去吃透Docker这项技术

小编去了解一项技术时,总是喜欢朝着四个方面去做研究:这个技术为什么会出现?这个技术是什么?这个技术如何运用?有没有类似功能的技术,区别在哪?

首先了解这个技术为什么会出现?主要目的就是了解当前这项技术的发展契机,是为了解决什么问题出现的,这样有利于在我们接触的技术越来越多时,知道每项技术是解决什么问题的,从根源上懂得衡量该怎么去选择。

其次就是了解这个技术是什么,要真正的掌握一门技术,最主要的还是掌握这项技术的核心原理,甚至能从底层代码角度给出分析并展开。

再者,就是实战的运用,技术本身不是孤立的,在了解了原理之后,就是需要动手操练,实践是检验真理的唯一标准,在多门技术的融合使用中,加深对当前技术的深入了解。小编在面试中接触过四类人:第一种是理解深入并且实战经验也很丰富;第二种是实战经验丰富,但理解不够深入,表现比如表达不出来关键点,对一些核心名词理解较差;第三种是理解有了,但是没有过实战,表现是能侃侃而谈,但一问实际使用,比如需要引入什么jar包、如何处理异常、怎么部署等等就是一问三不知;第四种就是两者都没有掌握的。我们在选择的时候一般也只会选择前两种。

最后,就是了解类似的技术,在一个领域,如果只是掌握一门技术,在运用上当然没有问题,但是现在技术日新月异,需要不断学习新的技术,拓宽我们的知识面,并且有比较才知道区别,了解同一个领域不同的技术,也能从侧面加深我们对当前技术的理解,这也是相辅相成的。

今天,我们就从这四个角度来谈谈Docker这么技术。

一、Docker为什么会出现

作为程序员来说。软件开发部署最让人头痛的事情是需要重复在不同的操作系统或者不同的环境下搭建同样的环境。环境搭建需要添加各种依赖,可能还需要配置各种环境变量,有时候在一台机器上正常运行,却不能保证在另外一台机器也能正常运行,费时费力,还容易出错。有没有一种办法,能不能从根本上解决问题,软件可以带环境安装?也就是说,安装的时候,把原始环境一模一样地复制过来。

1、虚拟机

虚拟机(virtualmachine)就是带环境安装的一种解决方案。它可以在一种操作系统里面运行另一种操作系统,比如在Windows系统里面运行Linux系统。应用程序对此毫无感知,因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删掉,对其他部分毫无影响。虽然用户可以通过虚拟机还原软件的原始环境。但是,这个方案有几个缺点。

资源占用多:虚拟机会独占一部分内存和硬盘空间。它运行的时候,其他程序就不能使用这些资源了。哪怕虚拟机里面的应用程序,真正使用的内存只有1MB,虚拟机依然需要几百MB的内存才能运行。

冗余步骤多:虚拟机是完整的操作系统,一些系统级别的操作步骤,往往无法跳过,比如用户登录。

启动慢:启动操作系统需要多久,启动虚拟机就需要多久。可能要等几分钟,应用程序才能真正运行。

2、Linux容器

由于虚拟机存在诸多缺点,Linux发展出了另一种虚拟化技术:Linux容器(LinuxContainers,缩写为LXC)。Linux容器不是模拟一个完整的操作系统,而是对进程进行隔离。或者说,在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。

由于容器是进程级别的,相比虚拟机有很多优势。

启动快:容器里面的应用,直接就是底层系统的一个进程,而不是虚拟机内部的进程。所以,启动容器相当于启动本机的一个进程,而不是启动一个操作系统,速度就快很多。

资源占用少:容器只占用需要的资源,不占用那些没有用到的资源;虚拟机由于是完整的操作系统,不可避免要占用所有资源。另外,多个容器可以共享资源,虚拟机都是独享资源。

体积小:容器只要包含用到的组件即可,而虚拟机是整个操作系统的打包,所以容器文件比虚拟机文件要小很多。

总之,容器有点像轻量级的虚拟机,能够提供虚拟化的环境,但是成本开销小得多。

这个时候Docker出现了,Docker属于Linux容器的一种封装。先来看一下Docker的发展历史。

年,几个搞IT的大胡子年轻人在旧金山成立了一家做PaaS平台(平台即服务)的公司,公司起名为“dotCloud”。

这家公司主要提供基于PaaS的云计算技术服务。什么是PaaS?PaaS的全称是PlatformasaService,也就是平台即服务,它是描述作为集成租用或交付的计算平台的概念解决方案,解决方案堆栈可以是一组组件或软件用于开发功能齐全的产品或服务的子系统,例如使用OS,Web服务器,数据库和编程语言的Web应用程序等。

dotCloud不仅支持诸如PHP、MySql等传统技术框架,还包括Node.js、MongoDB等新兴技术。基于dotCloud提供的开发工具和技术框架,你可以直接使用dotCloud的SDK编写代码和构建业务服务,并在联网的时候把这些代码推送到云端,实现自动部署和测试。

Docker技术诞生之后,并没有引起行业的


转载请注明:http://www.aierlanlan.com/rzdk/1270.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了