炸裂的云计算-05Docker容器介绍
Posted 大数据梅峰谷
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了炸裂的云计算-05Docker容器介绍相关的知识,希望对你有一定的参考价值。
-----内容简介-------------
1.PaaS平台介绍
1.1 PaaS平台简介
1.2 新老PaaS平台比较
2.Docker简介
2.1 Docker诞生前后
2.2 Docker的技术原理
3.Docker 基本概念
3.1 Docker Hub
3.2 镜像Image
3.3 Container
3.4 Repository
4. 参考资料
-----------------------------
1.PaaS平台介绍
曾经我们都在做一个称之为PAAS的平台,PaaS平台之前包括现在也是比较热门的一个技术概念,也就是平台即服务。通过网络程序提供的服务叫做IAAS,服务器平台或者开发环境作为服务进行提供叫做PaaS(软件研发的平台或者计算机基础平台作为一种服务)。
1.1 PaaS平台简介
老一代的PaaS平台,目标定的都非常大的,也存在一些问题,我们从软件开发过程的角度来看看PaaS平台的范围和存在的问题:
A.确定产品定位和需求,确定首次迭代的范围
B.制作界面原型
C.技术选型,然后根据技术选型为每个开发者搭建开发环境和技术栈,如java环境,数据库、中间件等等
D.构建基础技术框架和服务,包括日志、存储、消息、缓存、搜索、数据源、集群扩展等等
E.模拟用户容量、构建测试环境
F.开始编写真正的业务代码,实现产品的功能
G.迭代开发/测试,生生不息,周而复始
PaaS的环节在CDE,这三步骤没有写一行代码,但是投入了大量的人力和物理资源进行环境准备境,而且很难保证环境的一致性,如数据库服务,缓存服务,通过PaaS平台,可以避免这样的问题,数据库只要给url、账号就可以用,运维人员只要打包好放上去就可以了,这就是paas要做的事情。PaaS平台擅长应用的部署和托管,他用户也主要是针对开发者。
1.2 新老PaaS平台比较
1)老一代PaaS平台
老一代PaaS平台推广的并不是特别的好,主要特定:
A.主要提供应用的部署和托管
B.针对应用开发者
C.仅支持特定的IaaS基础技术
D.支持单种开发语言和框架
E.支持特定的服务,如自定义的数据存储APIS
F.没有很好的解决常用中间件的部署问题
G.难以解决应用和资源的隔离问题
老一代PaaS平台最大的短板是,只支持单语言,支持的中间件非常有限,应用的部署还是人工部署,手工部署。
新一代paas平台
新一代的PaaS平台引入了全方位的应用生命周期管理,更加关注开放性、应用的可移植性和云间相互操作性,典型代表有红帽的Openshift技术,Cloud Foudry,等等,新一代的PaaS除了第一代PaaS技术对用户在实现应用快速交付外,还弥补了第一代的诸多短板:
多语言框架:支持多语言和宽假以及语言框架的扩展机制
多服务:开放的核心服务以及服务的扩展机制
多云和多IaaS技术:支持多种IaaS技术和多云的部署,包括公有云和私有云
Docke支持传统的PaaS,Docker实际上是第三代PaaS平台,目前已经变成全球性的,世界性的PaaS平台了,是全球标准化平台。
2.Docker简介
2.1 Docker诞生前后
1)Docker公司
2010年,几个年轻人成立了一个做PaaS平台的公司,起名dotCloud,主要的业务基于PaaS平台为开发者或者开发商提供技术服务。Docker就是该公司于2013年3月发布的一个public项目,10月份公司改名为Docker Inc,专注于Docker引擎的和Docker生态系统。创业初期,当时提供了一个paas平台,在亚马逊的云端进行编程,包括雅虎杨致远在内进行了投资,但是随着Docker客户饱和,同时亚马逊自己也做起来了PaaS,公司开始碰到危机,中间也碰到了一些人来挽救,但还是依然没法存活,创始人干脆决定Docker全部开源吧,彻底的开源,把公司的20多号人全部投入到开源软件的研发中去,半年后,Docker在开源领域就火起来了,后来就成立了docker inc,专注于docker引擎和docker生产环境,14年被评为10大开源项目。后来,Linux也参与进来了,那些大的互联网公司不满足Docker被私有公司垄断,就由linux基金会牵头,要求docker公司把容器技术贡献出来。
2)Docker的生态圈
Docker主导的开放容器标准充满了巨头,如Google,IBM,微软,Redhat,硬件巨头方面有网络的思科、华为,也有Linux、虚拟化大佬Vmare,云计算公司有亚马逊,存储富士通等等,这么多巨头的倾力支持,当年的J2EE出来也不过如此。尽管有各大巨头的支持,Docker自身也通过收购一系列创业公司,加快了能力的提升,比如收购的sockerplane目的就是为了加强了网络方面的能力,Docker在网络方面的能力是不足的,这个在虚拟化技术体系里一直是个难点和弱点,另外存储也是Docker的弱点。Docker非常容易上手方便,倡导的思想就是让开发者使用越简单越好,所以一开始没有去碰复杂的网络环境,网络是虚拟化方面最复杂的,docker一开始是回避网络的。
RHEL 7上加入了docker,后来操作系统内置docker和k8s,红帽表现的也是非常积极,目前红帽手握vmware和docker 2大技术,虚拟化方面是非常的先进。国内的腾讯,百度,阿里也是全面拥抱Docker,腾讯是首家支持docker模式的互联网公司(阿里,百度把虚拟机技术占领了,Docker支持标准的docker镜像)。再通过数据来看他的发展
2.2 Docker的技术原理
Docker依赖于linux内核的,植根于linux基础之上,不依赖于任何语言,其实这个是linux专有的技术,Docker提供了标准化的封装,标准化的封装可任何地方调试和运行。
简单的说就是,在Linux系统上迅速创建一个容器(类似虚拟机)并在容器上部署和运行因公程序,通过配置文件可以轻松实现程序的自动化安装、部署和升级,非常方便。因为使用了容器,所以可以很方便的把生产环境和开发环境分开,互不影响,这是docker最普遍的玩法。可以封装web网站,中间件,消息队列等等,可以安装虚拟机,测试服务器,公有云,任何地方都可部署安装,Docker不存在各种依赖的关系,每个镜像都单独,真正做到部署的完全一致性。
Docker技术包含linux容器技术、AUFS分层文件系统、各种安全技术,后面发展的Jrails类似于linux容器技术的技术(目的是扩展到其他环境中,其实没什么必要,linux是唯一的竞争者,solora,aix等等都没什么竞争力)。下面重点介绍几个技术
2.2.1 Cgroups技术
这个是谷歌发明的技术,将多个程序定义成一个group,group先定好资源的占用率,通过限制group的使用率,避免某个进程把所有资源都耗光,把程序分组化管理,这就是cgroups技术。子系统:资源控制器,负责资源的分配,先挂在cpu子系统,内存子系统,才可以分配和控制。从而完成资源的限制,cpu,内存,io贷款,网络,磁盘存储等等都可以控制,是容器最基础的技术之一。
Cgroups被linux内核支持,有得天独厚的性能优势,发展势头迅猛,在很多领域可以取代虚拟化技术分割资源,cgroup默认有诸多资源组,可以限制几乎所有服务器上的资源:cpu mem iops,inbandwid,net,device acess等。
2.2.2 LXC技术
Linux容器技术:把一组程序拉倒一起,用cgroup来限定container资源的使用,就是一个容器。Namespace也是虚拟化的重要技术,是一个隔离技术,隔离在很多API都可以用到,平行宇宙,每个平行的都是互不干扰,你能看到你的,我能看到我的,相互看不到,你创建了一个网卡和我看见的网卡是完全独立的,也是kvm的重要技术,Namespace创建api,他是linux内核的,非常快的,Lxc是共享kernerl的类型,大大加快,减少内存消耗,通过cgropu,来隔离,所以开销很少,这个也是双刃剑的,共享了kernel,所有的容器内核都一样,一些特殊的应用对kernel是有特殊要求的,容器技术是做不到个性化的,虽然隔离很强大,但是不像虚拟机那么强壮,kernel停止,所有的容器服务都要停止。容器技术到底是不是主流,很难说,隔离的问题,会影响到同一台机器的其他容器。把容器和虚拟机技术结合在一起,intel也在做。
2.2.3 AUFS分层
AUFS是一个层状文件系统,PhotoShop都玩过,一层一层的画,迭代在一起,每一层上面都有东西产生,最后的东西就是各层的组装,你改变了这一层,但是不会修改原有的层,AUFS最早是ubuntu支持这个技术,后来redhat也觉得这个很好,用了这个技术,把他用到Docker上去:系统修改文件,写入是复制,多个层变成一个层。
2.2.4 APP打包
定义导包格式,提供打包工具,标准化统一运行,做了层级的组织,越往下,越base,往上就是叠加,分层化的image,不通的app可以使用底层的image,这样一个image中打多个应用时,可以最大限度的利用底层的image,非常精简和高效。
为了最大化的重用Image,加快运行速度,减少内存和磁盘footprint,Docker 容器运行时所构造的运行环境,实际上是由具有依赖关系的各个层组成,如一个apache的运行环境可能是基础的rootfs image的基础上,叠加了包含例如Emacs等各种工具的image,再碟机包含apache及其相关依赖的libarary的image,这些image有AUFS文件系统加载并合并到统一路径后在那个,以制度的方式存在,最后再碟机加载一层可写的空白的layer用做记录当前运行环境所做的更改。
有了层级化的iamge做基础,理想中,不通的APP就可以极可能功用底层文件系统,相关依赖工具等,同一个APP的不同实例也可以实现功用绝大多数数据,进而以copy on write的形式维护自己第那一份修改过的数据
2.2.5全生命周期开发模式
Docker正在迅速改变云计算凌云的的运作规则,并彻底颠覆云技术的发展前景。从持续集成/持续交付到微服务、开源协作乃至DevOps,Docker一路走来已经给应用程序开发生命周期以及云工程技术实践带来了巨大变革。一台机器只要docker环境,就可以把标准的docker镜像运行起来,dockerhub就是相当于svn存储打包好的image,docker运行时可以和dockerhub,启动没有就会去dockerhub上拉取。开发阶段主要有docker运行环境就可以,从dockerhub开发人员创建的docker开发完成了,就产生了版本发生变化,可以非常轻松的去更新,linux开发的人非常喜欢。
3. Docker 基本概念
3.1 Docker Hub
官方Registry的生态圈是比较丰富的,可以在DockerHub上下载大量已经容器化的应用镜像,即拉即用,可以和github绑定,github变化,可以同步到docker hub中,docker hub是另外一套API。很多公司对docker公司不满,docker容器和docker hub都是公司所有,docker公司想紧握到手里,引发开源界的争议,面向企业,而且收费,所以竞争对手用这个来反击.
Docker damon:容器,启动容器和dokcer日志大交大,docker client通过docker damon API进行交互,docker容器有2中一个公开的,一个私有的。Docker是Client/Server的架构,Docker客户端与Docker daemon进行交互,daemon负责构建、运行和发布Docker容器。客户端可以和服务端运行在同一个系统中,也可以连接远程的daemon。Docker的客户端的daemon通过RESTful API进行socket通信。
3.2 镜像Image
Docker镜像类似于虚拟机镜像,是一个只读模板,并且包含了文件系统。一个镜像可以只包含一个操作系统环境(比如SUSE镜像),也可以安装了用户程序及其运行环境(比如eBackup镜像)。镜像其实就是一个文件,任何用户程序都可以成为镜像的一部分。
镜像=操作系统+软件运行环境+用户程序
如上图,一个layer就是一个image,多个image又可以打包成一个image。Image类似一个单链表系统,每个image包含一个指向parent image的指针,没有parent image的;image是baseimage(image的指针靠sqlite数据库来保存)。最上面的一层(不属于image)是可写的,上面的内容依赖于下面的内容,如果要修改下面的内容,先将下面的内容复制到上面再进行修改。Image是创建container的基础。
3.3 Container
容器是从镜像创建的运行实例,可以将其启动、开始。停止、删除,而这些容器都是相互隔离(独立进程),互不可见的。
3.4 Repository
4. 参考资料
[1]https://blog.csdn.net/u012299594/article/details/52343910
以上是关于炸裂的云计算-05Docker容器介绍的主要内容,如果未能解决你的问题,请参考以下文章