云计算:3、轻量级虚拟化-容器技术

上传人:桔**** 文档编号:569814283 上传时间:2024-07-31 格式:PPT 页数:34 大小:4.86MB
返回 下载 相关 举报
云计算:3、轻量级虚拟化-容器技术_第1页
第1页 / 共34页
云计算:3、轻量级虚拟化-容器技术_第2页
第2页 / 共34页
云计算:3、轻量级虚拟化-容器技术_第3页
第3页 / 共34页
云计算:3、轻量级虚拟化-容器技术_第4页
第4页 / 共34页
云计算:3、轻量级虚拟化-容器技术_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《云计算:3、轻量级虚拟化-容器技术》由会员分享,可在线阅读,更多相关《云计算:3、轻量级虚拟化-容器技术(34页珍藏版)》请在金锄头文库上搜索。

1、轻量级虚拟化容器技术容器简述nJ2EE容器nOpenVZnJails(FreeBSD)nZones(Solaris)nLinuxlxcnDocker ContainerDockernDocker是由PaaS提供商dotCloud在2013年创建的一款开源应用引擎,Docker可以自动将任何应用打包成轻量、可移植、自包涵的容器引擎。开发者构建的应用可以一次构建全平台运行,包括本地开发机器、生产环境、虚拟机和云等。nDocker是一种增加了高级API的LinuxContainer(LXC)技术,提供了能够独立运行Unix进程的轻量级虚拟化解决方案。它提供了一种在安全、可重复的环境中自动部署软件的方

2、式。nDocker的container(轻量级虚拟化技术,OS层虚拟化技术)比服务器虚拟化来的更加简单,并且需要更少的软件。n一个虚机占用的资源比一个Container占用的资源不止多十倍。在一个物理机上开一百个虚机是很困难的,但要实现100多个,甚至几百个Container是很正常的。n浏览器的沙箱从资源隔离的角度,以及Java的J2EEContainer从标准抽象化的角度,其实跟Container的概念是一致的。Page 3Docker核心技术nNamespace:隔离机制(隔离性)nCgroup:资源限额功能(可配额/可度量)nAUFS文件系统:支持写时复制特性(便携性)n安全性Page

3、 4Docker开发流程nDocker会将网络,存储这些事情都配好。下载应用并安装。并配置一些参数,打包上传Image。此外,Container既可以手动创建,也可以自动创建,如果源码库里面包涵DockerFile文件,那么将会自动创建,容器里不仅包涵应用,还包括应用的所有依赖项。n开发人员可以使用DockerSearch命令在DockerRegistry(无论是公有还是私有的)里搜索Containers,并且还可以使用DockerPull命令从注册表里推送Container,使用DockerRun命令执行启动、运行、停止等操作。值得注意的是,Run命令的对象可能是你自己的服务器、公共实例或者

4、是两者的组合。引自:http:/ 5Page 6Docker开发流程n我们设想一个公司的开发人员可能运行安装了Docker的Ubuntu。他可能从公共注册中心下载映像或者上传映像到公共注册中心,并在这个映像的基础上安装自己的代码或者公司专有知识产权的软件,还要生成可上传到公司私有注册中心的映像。为了方便扩展和伸缩,公司把生产环境部署在云中,即部署在亚马逊的WEB服务上(AWS)。亚马逊Linux上也运行了管理不同容器的Docker。n上面的所有三个环境运行着不同版本的Linux,但这三个环境都与Docker兼容。而且每个环境都运行着不同的容器组合。然而,由于每个容器都把自己的依赖同其他容器分离

5、开来,因此不存在任何冲突,所有容器都平安地并存着。n引自:http:/ 7DockerAppStorePage 8Docker容器与虚拟机n传统的硬件虚拟化(例如VMWare、KVM、Xen、EC2)旨在创造一个完整虚拟机。每个虚拟化应用不仅包含应用的二进制文件,还需运行该应用程序所需的库、一个完整的Guest操作系统。n由于所有的容器共享同一个操作系统(以及二进制文件和库),所以,他们明显要比VM小的多,这样,就完全可以在一个物理主机上托管100个VMs(一般VM数量会受到严格限制)。此外,因为它们使用主机操作系统,重启一个VM并不意味着要重启操作系统,因此,容器更加轻便、高效。Page 9

6、Docker容器与虚拟机nDocker中的容器效率会更高。因为一个传统的VM、应用、每个应用副本以及每个应用微小的变更都需要重新创建一个完整的VM。Page 10Docker使用入门nhttp:/ 11(1)namespacingn引自:http:/ namespacen之前提到用户的进程是lxc-start进程的子进程,不同用户的进程就是通过pidnamespace隔离开的,且不同namespace中可以有相同PID。具有以下特征:n每个namespace中的pid是有自己的pid=1的进程(类似/sbin/init进程)n每个namespace中的进程只能影响自己的同一个namespace

7、或子namespace中的进程n因为/proc包含正在运行的进程,因此在container中的pseudo-filesystem的/proc目录只能看到自己namespace中的进程n因为namespace允许嵌套,父namespace可以影响子namespace的进程,所以子namespace的进程可以在父namespace中看到,但是具有不同的pidPage 12二、net namespacen每个netnamespace有独立的networkdevices,IPaddresses,IProutingtables,/proc/net目录。这样每个container的网络就能隔离开来。nLX

8、C在此基础上有5种网络类型,docker默认采用veth的方式将container中的虚拟网卡同host上的一个dockerbridge连接在一起。三、ipc namespacecontainer中进程交互还是采用linux常见的进程间交互方法(interprocesscommunication-IPC),包括常见的信号量、消息队列和共享内存。然而同VM不同,container的进程间交互实际上还是host上具有相同pidnamespace中的进程间交互,因此需要在IPC资源申请时加入namespace信息-每个IPC资源有一个唯一的32bitID。Page 13四、mnt namespace

9、nmntnamespace允许不同namespace的进程看到的文件结构不同,这样每个namespace中的进程所看到的文件目录就被隔离开了。同chroot不同,每个namespace中的container在/proc/mounts的信息只包含所在namespace的mountpoint。五、uts namespacenUTS(“UNIXTime-sharingSystem”)namespace允许每个container拥有独立的hostname和domainname,使其在网络上可以被视作一个独立的节点而非Host上的一个进程。六、usernamespacen每个container可以有不同

10、的user和groupid,也就是说可以以container内部的用户在container内部执行程序而非Host上的用户。n延伸阅读:http:/ 14n而不同namespace之间资源还是相互竞争的,仍然需要类似ulimit来管理每个container所能使用的资源-LXC采用的是cgroupnCgroup!Page 15(2)cgroupnControlGroups(cgroups):cgroups实现了对资源的配额和度量。cgroups的使用非常简单,提供类似文件的接口,在/cgroup目录下新建一个文件夹即可新建一个group,在此文件夹中新建task文件,并将pid写入该文件,即可

11、实现对该进程的资源控制。n具体的资源配置选项可以在该文件夹中新建子subsystem,子系统前缀.资源项是典型的配置方法,如memory.usage_in_bytes就定义了该group在subsystemmemory中的一个内存限制n我们主要关心cgroups可以限制哪些资源,即有哪些subsystem是我们关心。Page 16nA*cgroup*associatesasetoftaskswithasetofparametersforoneormoresubsystems.nA*subsystem*isamodulethatmakesuseofthetaskgroupingfacilitie

12、sprovidedbycgroupstotreatgroupsoftasksinparticularways.nAsubsystemistypicallyaresourcecontrollerthatschedulesaresourceorappliesper-cgrouplimits,butitmaybeanythingthatwantstoactonagroupofprocesses,e.g.avirtualizationsubsystem.Page 17ncpu :在cgroup中,并不能像硬件虚拟化方案一样能够定义CPU能力,但是能够定义CPU轮转的优先级,因此具有较高CPU优先级的进

13、程会更可能得到CPU运算。通过将参数写入cpu.shares,即可定义改cgroup的CPU优先级-这里是一个相对权重,而非绝对值。当然在cpu这个subsystem中还有其他可配置项,详细说明参考相关手册。ncpusets:cpusets定义了有几个CPU可以被这个group使用,或者哪几个CPU可以供这个group使用。在某些场景下,单CPU绑定可以防止多核间缓存切换,从而提高效率nmemory :内存相关的限制nblkio:blockIO相关的统计和限制,byte/operation统计和限制(IOPS等),读写速度限制等,但是这里主要统计的都是同步IOnet_cls,cpuacct,d

14、evices,freezer等其他可管理项。n参考文献http:/ 18(3)LXCnLXC旨在提供一个共享kernel的OS级虚拟化方法,在执行时不用重复加载Kernel,且container的kernel与host共享,因此可以大大加快container的启动过程,并显著减少内存消耗。n在实际测试中,基于LXC的虚拟化方法的IO和CPU性能几乎接近baremetal的性能(论据参见文献3),大多数数据有相比Xen具有优势。当然对于KVM这种也是通过Kernel进行隔离的方式,性能优势或许不是那么明显,主要还是内存消耗和启动时间上的差异。在参考文献4中提到了利用iozone进行DiskIO吞

15、吐量测试KVM反而比LXC要快,而且笔者在devicemappingdriver下重现同样case的实验中也确实能得到如此结论。参考文献5从网络虚拟化中虚拟路由的场景(个人理解是网络IO和CPU角度)比较了KVM和LXC,得到结论是KVM在性能和隔离性的平衡上比LXC更优秀-KVM在吞吐量上略差于LXC,但CPU的隔离可管理项比LXC更明确。Page 19n参考文献n1http:/linuxcontainers.org/n2http:/en.wikipedia.org/wiki/LXCn3http:/marceloneves.org/papers/pdp2013-containers.pdf(

16、性能测试)n4http:/ 20Docker比LXC的优势nDocker的核心底层技术是LXC(LinuxContainer),Docker在其上面加了薄薄的一层,添加了许多有用的功能。这篇stackoverflow上的问题和答案很好地诠释了Docker和LXC的区别,能够让你更好的了解什么是Docker,简单翻译下就是以下几点:nDocker提供了一种可移植的配置标准化机制,允许你一致性地在不同的机器上运行同一个Container;而LXC本身可能因为不同机器的不同配置而无法方便地移植运行;nDocker以App为中心,为应用的部署做了很多优化,而LXC的帮助脚本主要是聚焦于如何机器启动地更

17、快和耗更少的内存;nDocker为App提供了一种自动化构建机制(Dockerfile),包括打包,基础设施依赖管理和安装等等;nDocker提供了一种类似git的Container版本化的机制,允许你对你创建过的容器进行版本管理,依靠这种机制,你还可以下载别人创建的Container,甚至像git那样进行合并;nDockerContainer是可重用的,依赖于版本化机制,你很容易重用别人的Container(叫Image),作为基础版本进行扩展;nDockerContainer是可共享的,有点类似github一样,Docker有自己的INDEX,你可以创建自己的Docker用户并上传和下载D

18、ockerImage;nDocker提供了很多的工具链,形成了一个生态系统;这些工具的目标是自动化、个性化和集成化,包括对PAAS平台的支持等;n引自:http:/ 21nDocker对container的使用基本是建立在LXC基础之上的,然而LXC存在的问题是难以移动-难以通过标准化的模板制作、重建、复制和移动container。n在以VM为基础的虚拟化手段中,有image和snapshot可以用于VM的复制、重建以及移动的功能。想要通过container来实现快速的大规模部署和更新,这些功能不可或缺。Docker正是利用AUFS来实现对container的快速更新。nAUFS!Page 2

19、2(4)AUFSn引自:1、http:/ 23Page 24nbootfs(bootfilesystem)主要包含bootloader和kernel,bootloader主要是引导加载kernel,当boot成功后kernel被加载到内存中后bootfs就被umount了.nrootfs(rootfilesystem)包含的就是典型Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件。由此可见对于不同的linux发行版,bootfs基本是一致的,rootfs会有差别,因此不同的发行版可以公用bootfs如下图:Page 25n在启动后,首先将rootfs置为readonl

20、y,进行一系列检查,然后将其切换为“readwrite”供用户使用。在docker中,起初也是将rootfs以readonly方式加载并检查,然而接下来利用unionmount的将一个readwrite文件系统挂载在readonly的rootfs之上,并且允许再次将下层的filesystem设定为readonly并且向上叠加,这样一组readonly和一个writeable的结构构成一个container的运行目录,每一个被称作一个Layer。如下图:Page 26n得益于AUFS的特性,每一个对readonly层文件/目录的修改都只会存在于上层的writeable层中。这样由于不存在竞争,多

21、个container可以共享readonly的FS层。所以Docker将readonly的FS层称作image-对于container而言整个rootfs都是read-write的,但事实上所有的修改都写入最上层的writeable层中,image不保存用户状态,只用于模板、新建和复制使用。Page 27n上层的image依赖下层的image,因此Docker中把下层的image称作父image,没有父image的image称作baseimage。因此想要从一个image启动一个container,Docker会先加载这个image和依赖的父images以及baseimage,用户的进程运行在

22、writeable的layer中。所有parentimage中的数据信息以及ID、网络和lxc管理的资源限制等具体container的配置,构成一个Docker概念上的container。如下图:Page 28Linux内核Page 29n扩展阅读:http:/ 30aufs:原理引自:“Container内核原理介绍”by邱模炯UCloudaufs应用介绍nDockerDesktop已安装firfox以及Libreoffice,通过noVNC可实现web版的远程桌面n引自:honggangli.elastos.org/files/2014/05/Docker相关相关资源整理源整理.pptnDockerUIWeb版Docker管理工具n引自:honggangli.elastos.org/files/2014/05/Docker相关相关资源整理源整理.pptndokku100行BASH的微Heroku。包含了一个PaaS的基本功能shipyardDocker管理界面,提供多Host,创建Container,查看Image等功能n引自:honggangli.elastos.org/files/2014/05/Docker相关相关资源整理源整理.ppt

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号