您好,欢迎访问三七文档
当前位置:首页 > 金融/证券 > 股票报告 > docker从入门到精通-入门篇
Docker从入门到精通1第一部分Docker入门第一节引言1虚拟化技术整个虚拟化技术的发展有超过半个世纪的历史,当我看到这段历史的时候,不禁感叹老美在科技方面有多强悍。虚拟化一般分为硬件级虚拟化(hardware-level-virtualization)和操作系统级虚拟化(os-level-virtualization)。硬件级虚拟化是运行在硬件之上的虚拟化技术,它的管理软件也就是我们通常说的hypervisor或者virtualmachinemonitor,它需要模拟的就是一个完整的操作系统,也就是我们通常所说的基于Hyper-V的虚拟化技术,VMWare,Xen,VirtualBox,亚马逊AWS和阿里云都是用的这种技术。操作系统级虚拟化是运行在操作系统之上的,它模拟的是运行在操作系统上的多个不同进程,并将其封装在一个密闭的容器里面,也称为容器化技术。Docker正是容器虚拟化中目前最流行的一种实现。1.1硬件级虚拟化的历史19世纪60年代:美国出现了第一个虚拟化系统,它是由IBM开发的CP-40Mainframes系统,虽然这个系统只是在实验室使用,但却为后来的CP-67系统奠定了基础。在那个时代,虚拟化系统主要由通用,贝尔实验室和IBM主导研发。1987年:一个非常牛逼的公司InsigniaSolutions演示了一个称为SoftPC的软件模拟器,这个模拟器允许用户在UnixWorkstations上运行DOS应用。在此之前这是不可能办到的,当时一个可以运行MSDOS的个人电脑需要1,500美金,而通过SoftPC模拟之后,可降低到500美金。可以看出,当时的需求就是在大型工作站上运行微软的DOS。到了1989年的时候,InsigniaSolutions发布了Mac版的SoftPC,使苹果用户不仅能运行DOS,还能运行Windows操作系统。Docker从入门到精通21997年:随着SoftPC的一炮而红,其他虚拟化公司如雨后春笋般的出现了。在1997年,苹果开发了VirtualPC,后来又卖给了Connectix。1998年:真正的王者VMWare出现了,他们在1999年开始销售VMWareworkstation,也就是我们很多人使用过得桌面版的虚拟机。2001年:VMWare又发行了ESX和GSX,也就是我们现在经常使用的ESX-i的前身。2003年:之前所说的Connectix被微软收购,后续推出了MicrosoftVirualPC,再之后就没什么音讯了。同年VMWare也被EMC收购,成为EMC迄今最成功的一笔收购。就在这一年,一个开源的虚拟化项目Xen启动了,并在2007年被Citrix收购。备注:看了这个历史,不禁内心发出感叹。InsigniaSolutions的衰败,Connectix的没落,以及VMWare的半路杀出,都说明了商业和科技的竞争是不间断的,就像是一场长跑,一开始领先的,往往并不是最后的胜利者,你不进步,就肯定会被超越。1.2操作系统级虚拟化的历史1982年:你一定会很惊讶,第一个操作系统级的虚拟化技术是什么。答案就是chroot,直到现在我们依然在使用的一个系统调用。这个系统调用会改变运行进程的工作目录,并且只能在这个目录里面工作。这种操作其实就是一种文件系统层的隔离。2000年:FreeBSDjail,真正意义上的第一个功能完整的操作系统级虚拟化技术。所以,真正的容器化技术出现到现在已经过去了16年,并不是几年的时间。2005年:OpenVZ,这是linux平台上的容器化技术实现,同时也是LXC,即docker最初使用的容器技术核心实现。2008年:LXC发布,这是docker最初使用的具体内核功能实现。2013年:Docker发布,可以看出,docker本身是使用了LXC,同时封装了其他的一些功能。Docker的成功,与其说是技术的创新,还不如说是一次组合式的创新。备注:曾经听一位老大说过,iPhone你要说有多创新,真的说不上。手机很早就有了,电脑很早就有,触摸屏很早就有,但是苹果将所有这些有机的组合到了一起,再提供极致的用户体验,就产生跨时代的产品。同样Docker所使用的技术也都不是新技术,它将这一系列技术有机的组合到一起,并提供极致的用户体验,就产生Docker从入门到精通3了垮时代意义的产品。2基于服务的云计算模式我们知道传统的服务器或者电脑主机,基本都是一锤子买卖,商家卖给你之后基本就很难再从消费者身上获得其他收入。随着云的概念出现,越来越多的厂商都意识到卖硬件是不可能获得长期利益的,只有服务才是可持续的赢利点。因此,在2010年左右,出现了以大批提供云服务的公司。总体来说基本都可以归为下面几大类的一种或多种:1.基础设施即服务(Infrastructureasaservice),通常指的是在云端为用户提供基础设施,如:虚拟机、服务器、存储、负载均衡、网络等等。亚马逊的AWS就是这个领域的佼佼者,国内则以阿里云为首。2.平台即服务(Platformasaservice),通常指的是在云端为用户提供可执行环境、数据库、网站服务器、开发工具等等。国外的OpenShift,RedHat,Cloudera,CloudFoundry,GoogleAppEngine都是这个领域的,当然还有一个非常有名的公司,那就是dotCloud,后续我会再介绍一下这个公司。3.软件即服务(Softwareasaservice),通常指的是在云端为用户提供软件,如CRM系统,邮件系统,在线协作,在线办公等等。比如微软就把自己的Office搬到了云端,国内的有道、麦客、Tower都是属于这个领域的。一般认为这三种模式,是最基本的云服务模式,其分层结构如下图:Docker从入门到精通43Docker介绍Docker主要解决什么问题?Docker对外宣称的是Build,ShipandRun,Docker要解决的核心问题就是快速的干这三种事情。它通过将运行环境和应用程序打包到一起,来解决部署的环境依赖问题,真正做到垮平台的分发和使用。而这一点和DevOps不谋而合,通过Docker可以大大提升开发、测试和运维的效率,在这个移动互联网的时代,工程师都是很贵的,如果一个工具能节省人力,提升效率,必定会火起来。Docker的历史之前提到一家公司叫dotCloud,这家公司是一家法国的公司,最初也是提供PaaS服务的,他们提供了对多种语言的运行环境支持,如:java,python,ruby,node.js等。但是,可能叫生不逢时吧,在PaaS领域太多的巨头和大企业了,有一天SolomonHykes(Docker之父)就召集了公司的哥儿几个来商量了一下,最后得出的结论是,如果要和那些大厂商硬干肯定是不行的,那么干脆就把他们做的项目Docker开源了。即使赚不到钱,至少也在开源社区得到一个好名声。因此,在2013年3月,Docker正式以开源软件形式发布了。正是由于这次开源,让容器领域焕发了第二春,截止2015年11月,Docker在github上收到了25,600Docker从入门到精通5个赞,超过6800次克隆,以及超过1100名的贡献者,成为20个最具影响力的github开源项目。可以说,Docker是继Linux之后,最让人感到兴奋的系统层面的开源项目。据不完全统计,包括Docker公司、RedHat,IBM,GoogleCisco、亚马逊以及国内的华为等等,在为它贡献代码。在美国,几乎所有的云计算厂商都在拥抱Docker这个生态圈。Docker是什么呢?Docker其实是容器化技术的其中一种实现,根据我们之前的介绍,容器化技术并不是最近才出现的,那为什么Docker会如此的火爆呢?我觉得还是这个时代造就的,因为我们处在一个云计算发展异常迅猛的时代,而云计算又是所有移动互联网、IT、以及未来消费者行业的基础。从云计算服务的三层架构,我们可以看出传统的IaaS层,虚拟机是最基础组成部分,而虚拟机都是基于Hyper-V架构的,也就是说每一个虚拟机都会运行一个完整的操作系统,一个操作系统至少需要占用5G左右的磁盘空间,但是操作系统对于我们来说完全无用的,我们关心的是虚拟主机所能提供的服务。因此,我们迫切需要轻量级的主机,那就是Docker容器。我们可以看一下,Docker的基本结构:从上图,我们可以看到,容器由于省去了操作系统,整个层级更简化,可以在单台服务器上运行更多的应用,而这正是IaaS所需要的,可能5G左右的空间对你来说不是什么大事,但是如果你需要对外提供成千上万的主机,那就是不得Docker从入门到精通6不考虑的问题,而这正是容器虚拟化要解决的问题。每到这里,我都喜欢举一个例子:波音公司造飞机肯定不会考虑在水上航行的问题,造船厂也绝对不会考虑要在天上飞的问题,汽车制造公司也不会考虑要在水上跑的问题,那么对于广大的移动互联网公司和云计算公司,也可以只关注最顶层的应用,而不需要去考虑操作系统的问题。4预备知识这一节,主要介绍使用Docker需要了解的一些预备知识,主要包括Linux和公有云的使用,如果你对这两块已经比较熟悉,可以直接跳过进入下一节。为什么我们要介绍这两部分呢?因为Docker主要是运行在Linux下的,而且它的基础镜像也是基于Linux,如果你了解Linux将会遇到很多障碍;而公有云的话是日后的一个趋势,也是Docker为什么这么火热的的促成因素,所以我们也会做简单的介绍。4.1Linux快速入门Linux是开源软件的鼻祖,Docker目前基本上都依赖于于linux的内核,这一节主要快速简单的介绍一下linux。除去Docker的原因,我们还有以下原因要使用linux:本身开源免费,试想如果你是一个云主机提供商,如果每个主机都要付费,那得要给多少钱啊;支持众多的开源软件,这也是很大一笔开支,并且可以灵活的自由配置;基本上90%以上的互联网公司都是用linux作为后端服务器,如果你想学习开发,那么Linux就是一项基本功;云主机大多数都是基于Linux系统。很多刚开始学习的朋友一听见Linux就会害怕,其实根本就没什么可怕的。所有的现代操作系统基本都是类似的,Linux也有图形化界面,也支持鼠标键盘操作。所不同的是,Linux下更倾向于用命令行来进行操作,这样有更多的灵活性,你可以认为就跟windows下的cmd类似。只要你愿意学习,顶多就1个月Docker从入门到精通7就可以快速入手。4.1.1选取什么发型版本Linux包含了很多的发行版本,包括ubuntu,centos,redhat,federa等等,但是他们都是基于linuxkernel,各个发行版本都会做相应的包装、优化和简化,但是基本上内核版本不会有太大的差异。根据我的经验,我推荐使用ubuntu或者centos。Ubuntu的优点是:内核更新及时软件安装和更新方便GUI简单实用CentOS就是RedHatEnterprise的开源版本,也是不错选择,考虑到Ubuntu对Docker的完美支持,我一般推荐使用Ubuntu。Ubuntu可以在Docker的存储部分使用Aufs,而CentOS只能使用DeviceMapper,前者的性能要稍好一些。4.1.2使用图形界面还是命令行界面Linux的发行版本基本都提供了带图形界面和不带图形界面的版本,也可以在安装后进行调整。很多人认为Linux系统就不适合带IDE界面的开发环境,其实是错误的。我们可以在Linux下运行Eclipse等工具进行开发,而且跟其他平台没有任何差异。所以如果你要进行开发,可以选择图形界面。如果你是刚初学Linux,也可以使用图形界面,来进行过度。但是又回到我之前的飞机-轮船-汽车理论,凡是没有必要的东西都应该去掉,所以如果你是用Linux来运行后台程序,最好就选择服务器版,只运行命令行程序,多使命令行也是一种学习和锻炼。4.1.3英文还是中文一般来说使用linux的用户都是相对专业的用户,我建议一律使用英文操作系统
本文标题:docker从入门到精通-入门篇
链接地址:https://www.777doc.com/doc-6270769 .html