编辑: 丑伊 | 2015-08-25 |
7 Docker简介 中正式支持Docker,都给业界一个信号,这是一项创新的技术解决方案.就连 Google公司的Computer Engine 也支持Docker在其中之上运行,国内BAT先锋企业 百度 Baidu App Engine(BAE)平台也是以 Docker作为PasS云基础.
3、Docker产生的目的就是要解决以下问题: 1)环境管理复杂:从各种OS到各种中间件再到各种App,一款产品能够成功发 布,作为开发者需要关心的东西太多,且难于管理,这个问题在软件行业中普遍存 在并需要直接面对.Docker可以简化部署多种应用实例工作,比如Web应用、后台 应用、数据库应用、大数据应用比如Hadoop集群、消息队列等等都可以打包成一 个image部署.如下图所示: 2)云时代的到来:AWS的成功,引到开发者将应用转移到云上,解决来硬件管理 的问题,然而软件配置和管理香瓜的问题依然存在.Docker的出现正好能帮助软件 开发者开阔思路,尝试新的软件管理方法来解决这个问题. 3)虚拟化手段的变化:云时代采用标配硬件来降低成本,采用虚拟化手段来满足 用户按需分配的资源需求以及保证可用性和隔离性.然而无论是KVM还是Xen,在Docker卡来都是在浪费资源,因为用户需要的是高校运行环境而非OS,GuestOS 即浪费资源,又难于管理,更加轻量级大LXC更佳灵活和快速: Docker-guide
8 Docker简介 4)LXC的便携性: LXC在 Linux 2.6 的 Kernel 里就已经存在了,但是其设计之初并 非为云计算考虑的,缺少标准化的描述手段和容器的可便携性,决定其构建出的环 境难于分发和标准化管理(相对于KVM之类image和snapshot的概念).Docker就在 这个问题上做出了实质性的创新方法. Docker-guide
9 Docker简介 Docker 核心技术 Docker核心是一个操作系统级虚拟化方法, 理解起来可能并不像VM那样直观.我们 从虚拟化方法的四个方面: 1. 隔离性 Namespace 2. 可配额/可度量 Cgroups 3. 便携性 AUFS 4. 安全性 AppArmor、SELinux、GRSEC 接下来将详细介绍Docker的技术细节. Docker-guide
10 Docker 核心技术 隔离性 Linux namespace 每个用户实例之间相互隔离, 互不影响. 一般的硬件虚拟化方法给出的方法是VM, 而LXC给出的方法是container,更细一点讲就是kernel namespace.其中pid、 net、ipc、mnt、uts、user等namespace将container的进程、网络、消息、文件系 统、UTS( UNIX Time-sharing System )和用户空间隔离开. 1. pid namespace 不同用户的进程就是通过pid namespace隔离开的,且不同 namespace 中可 以有相同pid.所有的LXC进程在docker中的父进程为docker进程,每个lxc进 程具有不同的namespace.同时由于允许嵌套,因此可以很方便的实现 Docker in Docker. 2. net namespace 有了 pid namespace, 每个namespace中的pid能够相互隔离,但是网络端口还 是共享host的端口.网络隔离是通过net namespace实现的, 每个net namespace有独立的 network devices, IP addresses, IP routing tables, /proc/net 目录.这样每个container的网络就能隔离开来.docker默认采用veth 的方式将container中的虚拟网卡同host上的一个docker bridge: docker0连接在 一起. 3. ipc namespace container中进程交互还是采用linux常见的进程间交互方法(interprocess communication - IPC), 包括常见的信号量、消息队列和共享内存.然而同 VM 不同的是,container 的进程间交互实际上还是host上具有相同pid namespace 中的进程间交互,因此需要在IPC资源申请时加入namespace信息 - 每个IPC资 源有一个唯一的