8月30日,由Docker中文社区主办的Docker Meetup来到深圳,并邀UCloud、华为云、七牛云存储等各领域专家共话Docker应用与畅想。git
随着新一波移动互联网浪潮涌入,曾经码农们的创富神话已变成了现在的掩面慨叹,“开发者之艰辛”“为开发者减负”的言论不绝于耳。曾有硅谷的工程师认为“若是说有什么能让开发人员工做变得轻松一点的话,docker就是其中之一”。docker
云计算Docker Meetup深圳行畅谈应用开发七牛云存储
Docker能够被形象地看作一个应用封装容器,以往开发者开发一款应用,须要考虑硬件、操做系统、运行环境的适配,有了容器就不用考虑这些了。开发者直接在容器里开发,提测时把整个容器测试,测试后在容器内进行改动,再上线。经过容器,整个开发、测试和生产环境能够保持高度的一致。此时开发者只需专一于开发软件,不须要考虑在哪运行本身的软件,这也是云计算的发展方向。Docker因其轻量级特性,可协助应用实现云端的即时迁移,这必吸引更多人来使用云服务,所以当之无愧称得上是云计算的明日之星。安全
UCloud做为国内顶尖的云计算基础服务商,受邀参加这次活动演讲。资深工程师邱模炯就Container内核原理作了详细介绍,如下是整理的演讲实录:网络
Docker的本质是Container,不少人疑惑Container与VM的区别,Container做为一种应用封装容器,在表象上相似于虚拟机VM,但在实现的原理和应用上与虚拟机VM其实有着巨大的区别:架构
云计算Docker Meetup深圳行畅谈应用开发工具
VM通常指系统虚拟化,每一个虚拟机的运行环境由VMM(虚拟化管理器)仿真而成,每一个VM运行各自的内核;而Container仅仅是应用封装容器,它在应用态封装了一个rootfs,多个Container共享同一个内核。VM和Container的整体架构图对好比上所示。从使用者的角度,Container和VM同样也拥有独立虚拟机这个假象,这正是底下内核的namespace和cgroup所努力达到的。不过因为Container的内核是共享的,这个假象虚拟机没法像VM虚拟机同样任意安装操做系统。在Docker Container用到的技术,除了namespace和cgroup,还用到了AUFS(联合文件系统)。这些是Docker Container在内核原理上主要的技术点。Namespace用作进程组的虚拟化,一组进程若是放入共同的namespace即产生没有资源限制的Container。一个进程的运行环境一般包括:pid,父pid;uid,gid;VFS mount(rootfs),net协议栈,hostinfo, IPC, /proc, /sys等。在有Container以前,全部应用程序的rootfs都是同样的,即整个操做系统的根目录;全部进程涉及到的网络环境都是同样的,即一样的IP地址,一样的路由,一样的网络接口。namespace的功能,容许多个进程组成一个container拥有独立的运行环境,不一样container有不一样的rootfs,不一样的网络协议栈,不一样的IPC。这就是namespace,进程运行环境所涉及的方方面面都有相应的namesapce。总的来讲,Namespace能够制造一种虚拟机的假象,能够实现独立的mnt;独立的pid空间;独立的网络协议栈;独立的IPC;独立的/proc /sys。oop
但Container若是只有Namespace,资源没法根据需求QoS配置,所以这里须要借助Cgroups。cgroup用于进程组的资源隔离,咱们能想到的方方面面的资源均可以经过cgroup来控制,好比控制一组进程总计使用多少CPU、总计使用多少内存;一组进程只能访问哪些设备;一组进程的IOPS最大只能多少。Container自然包含一组进程,Container就是借助cgroup来限制资源使用,使得不一样Container用到的资源正确隔离。性能
在提供了相似虚拟机的环境,且资源获得保证以后,这时咱们又会考虑另一个问题:如何使Container变得更精简。假设:一个Container的rootfs大小是1G,100个Container要100G,这不但占用大量空间,并且传输起来至关费事。这里咱们就会使用AUFS技术,以递进的方式建立"Container" —— 一个Container的rootfs叠在另外一个上面,就像使用Git增量开发同样。这样的话极大的节省了对存储的需求,也能加速容器的启动。 目前AUFS还有不太完善之处,例如,进行一个写的操做会须要致使整个文件的拷贝,AUFS自己的参数、细节太多,不可推理也不可预测,但总体上来讲AUFS仍是能够起到精简、提升性能的的做用。测试
在实际工做中,会有哪些场景适合Container或者VM呢?先来比较一下他们各自的优劣:Container运行开销小;部署速度;启动速度快,不须要走整个系统流程;VM运行开销大,由于多了一层Guest Kernel;启动速度较慢;但Container不能作在线迁移。咱们以实际应用场景来讲明,UCloud在一些内部的业务使用了docker,但没有像云主机同样像客户售卖Container。这是由于客户对虚拟机隔离性要求很是高,他们但愿咱们的虚拟机绝对安全,就目前为止,Container由于内核共享,没法作到完全的隔离,也就没有使人放心的安全性。从资源切割的角度,我的认为,Container更适用于大公司的内部云平台,同一台物理机经过Docker Container部署不一样的业务并相互隔离,提高资源利用率,简化业务管理和部署。特别是,Docker Container有着较完善的管理工具,可实现Container的一键打包、一键部署、一键运行,在业务迁移、部署方面颇有优点。