轻量级虚拟化容器技术介绍
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二、net namespace 每个net namespace有独立的 network devices, IP addresses, IP routing tables, /proc/net 目录。这样每个container的网络就能隔离开 来。 LXC在此基础上有5种网络类型,docker默认采用veth的方式将 container中的虚拟网卡同host上的一个docker bridge连接在一起。
Page 9
Docker容器与虚拟机
Docker中的容器效率会更高。因为一个传统的VM、应用、每个应用 副本以及每个应用微小的变更都需要重新创建一个完整的VM。
Page 10
Docker使用入门
http://tech.uc.cn/?p=2726
Page 11
(1) namespacing
传统的硬件虚拟化(例如VMWare、KVM、Xen、EC2)旨在创造一 个完整虚拟机。每个虚拟化应用不仅包含应用的二进制文件,还需运 行该应用程序所需的库、一个完整的Guest操作系统。 由于所有的容器共享同一个操作系统(以及二进制文件和库),所以 ,他们明显要比VM小的多,这样,就完全可以在一个物理主机上托 管100个VMs(一般VM数量会受到严格限制)。此外,因为它们使用 主机操作系统,重启一个VM并不意味着要重启操作系统,因此,容 器更加轻便、高效。
引自:http://www.oschina.net/translate/docker-lightweight-linux-containers-consistentdevelopment-and-deployment
Page 7
Docker App Store
Page 8
Docker容器与虚拟机
轻量级虚拟化容器技术介绍
容器简述
J2EE 容器 OpenVZ Jails(FreeBSD) Zones(Solaris) Linux lxc Docker Container
Docker
Docker是由PaaS提供商dotCloud在2013年创建的一款开源应用引擎 ,Docker可以自动将任何应用打包成轻量、可移植、自包涵的容器引 擎。开发者构建的应用可以一次构建全平台运行,包括本地开发机器 、生产环境、虚拟机和云等。 Docker是一种增加了高级API的Linux Container(LXC)技术,提供 了能够独立运行Unix进程的轻量级虚拟化解决方案。它提供了一种在 安全、可重复的环境中自动部署软件的方式。 Docker的container(轻量级虚拟化技术,OS层虚拟化技术)比服务 器虚拟化来的更加简单,并且需要更少的软件。 一个虚机占用的资源比一个Container占用的资源不止多十倍。在一 个物理机上开一百个虚机是很困难的,但要实现100多个,甚至几百 个Container是很正常的。 浏览器的沙箱从资源隔离的角度,以及Java的J2EE Container从标准 抽象化的角度,其实跟Container的概念是一致的。
Page 3
Docker 核心技术
Namespace:隔离机制(隔离性) Cgroup:资源限额功能(可配额/可度量) AUFS文件系统源自文库支持写时复制特性(便携性) 安全性
Page 4
Docker开发流程
Docker会将网络,存储这些事情都配好。下载应用并安装。并配臵一 些参数,打包上传Image。此外,Container既可以手动创建,也可以 自动创建,如果源码库里面包涵DockerFile文件,那么将会自动创建 ,容器里不仅包涵应用,还包括应用的所有依赖项。 开发人员可以使用Docker Search命令在Docker Registry(无论是公 有还是私有的)里搜索Containers,并且还可以使用Docker Pull命令 从注册表里推送Container,使用Docker Run命令执行启动、运行、 停止等操作。值得注意的是,Run命令的对象可能是你自己的服务器 、公共实例或者是两者的组合。
引自:http://baike.baidu.com/view/11854949.htm?fr=aladdin LXC所实现的隔离性主要是来自kernel的namespace, 其中pid, net, ipc, mnt, uts 等namespace将container的进程, 网络, 消息, 文件系统 和hostname 隔离开。 一、pid namespace 之前提到用户的进程是lxc-start进程的子进程, 不同用户的进程就是通 过pidnamespace隔离开的,且不同 namespace 中可以有相同PID。 具有以下特征: 每个namespace中的pid是有自己的pid=1的进程(类似/sbin/init进程) 每个namespace中的进程只能影响自己的同一个namespace或子 namespace中的进程 因为/proc包含正在运行的进程,因此在container中的pseudofilesystem的/proc目录只能看到自己namespace中的进程 因为namespace允许嵌套,父namespace可以影响子namespace的 进程,所以子namespace的进程可以在父namespace中看到,但是 具有不同的pid Page 12
引自: http://www.csdn.net/article/2014-02-01/2818306-Docker-Story
Page 5
Page 6
Docker开发流程
我们设想一个公司的开发人员可能运行安装了Docker的Ubuntu。他 可能从公共注册中心下载映像或者上传映像到公共注册中心,并在这 个映像的基础上安装自己的代码或者公司专有知识产权的软件,还要 生成可上传到公司私有注册中心的映像。为了方便扩展和伸缩,公司 把生产环境部署在云中,即部署在亚马逊的WEB服务上(AWS)。亚马 逊Linux上也运行了管理不同容器的Docker。 上面的所有三个环境运行着不同版本的Linux,但这三个环境都与 Docker兼容。而且每个环境都运行着不同的容器组合。然而,由于每 个容器都把自己的依赖同其他容器分离开来,因此不存在任何冲突, 所有容器都平安地并存着。