linux 虚拟多个容器,快速理解Docker - 容器级虚拟化解决方案

是什么

简单的说Docker是一个构建在LXC之上的,基于进程容器(Processcontainer)的轻量级VM解决方案,拿现实世界中货物的运输作类比, 为了解决各种型号规格尺寸的货物在各种运输工具上进行运输的问题,我们发明了集装箱。

5036efdebddd5155884e270f64616cf5.png

Docker的初衷也就是将各种应用程序和他们所依赖的运行环境打包成标准的container/image,进而发布到不同的平台上运行

5b04221c62fb6d61eb2c4d9afc6c9ba6.png

从理论上说这一概念并不新鲜, 各种虚拟机Image也起着类似的作用

Docker container和普通的虚拟机Image相比, 最大的区别是它并不包含操作系统内核.

fa819659d0624e3d971ae03a5eb92dfe.png

普通虚拟机将整个操作系统运行在虚拟的硬件平台上, 进而提供完整的运行环境供应用程序运行, 而Docker则直接在宿主平台上加载运行应用程序. 本质上他在底层使用LXC启动一个Linux Container,通过cgroup等机制对不同的container内运行的应用程序进行隔离,权限管理和quota分配等

每个container拥有自己独立的各种命名空间(亦即资源)包括:

PID 进程, MNT 文件系统, NET 网络, IPC , UTS 主机名 等

与LXC有什么不同

基本上你可以认为目前的Docker是LXC的一个高级封装,提供了各种辅助工具和标准接口方便你使用LXC,你可以依靠LXC和各种脚本实现与docker类似的功能,就像你不使用APT/yum等工具也可以自己搞定软件包安装一样,你使用他们的关键原因是方便易用!

实际使用中,你一般不用关心底层LXC的细节,同时也不排将来docker实现基于非LXC方案的可能性

在LXC的基础上, Docker额外提供的Feature包括:标准统一的打包部署运行方案, 历史版本控制, Image的重用,Image共享发布等等

Container构建方案

除了LXC,Docker的核心思想就体现在它的运行容器构建方案上

464f2cd0a2f3b9dc1a257244a0079d84.png

为了最大化重用Image,加快运行速度,减少内存和磁盘footprint, Docker container运行时所构造的运行环境,实际上是由具有依赖关系的多个Layer组成的。例如一个apache的运行环境可能是在基础的rootfs image的基础上,叠加了包含例如Emacs等各种工具的image,再叠加包含apache及其相关依赖library的image,这些image由AUFS文件系统加载合并到统一路径中,以只读的方式存在,最后再叠加加载一层可写的空白的Layer用作记录对当前运行环境所作的修改。

有了层级化的Image做基础,理想中,不同的APP就可以既可能的共用底层文件系统,相关依赖工具等,同一个APP的不同实例也可以实现共用绝大多数数据,进而以copy on write的形式维护自己的那一份修改过的数据等

历史和生态环境

Docker项目从启动到现在不过一年多时间,发展势头还是很迅猛的

2013.01 做为dotcloud内部项目开始启动

2013.03.27 正式作为public项目发布

2014.1 被BLACK DUCK 评选为2013年10大开源新项目“TOP 10 OPEN SOURCE ROOKIE OF THE YEAR”

目前的状态 ( 2014.3 )

Docker 0.8.1

10000+ github stars(top 50)

350+ contributors

1500+ fork

2c2a9ee8a392705e6f355bafcddd2d34.png

具体应用方面,可以看到百度至少在2013年10月份就已经成功使用Docker支持其BAE平台的Paas服务

安装运行和使用

Docker虽然是号称build once, runeverywhere。但是实际上还是受其引擎依赖关系的限制的,目前的版本具体来说对系统要求:

Linux Kernel 3.8+

LXC support

64bit OS

AUFS

以上要求,以Ubuntu为例,需要12.04 配合 3.8kernel升级, 或者 ubuntu 13.04+

在ubuntu12.04上,基本安装步骤如下

sudoapt-get update sudo apt-get install linux-image-generic-lts-raringlinux-headers-generic-lts-raring

sudoapt-key adv --keyserver keyserver.ubuntu.com --recv-keys36A1D7869245C8950F966E92D8576A8BA88D21E9

sudosh -c "echo deb http://get.docker.io/ubuntudocker main\ > /etc/apt/sources.list.d/docker.list"

sudoapt-get update

sudoapt-get install lxc-docker

如果你在安装之前想要先体验一下docker的基本操作命令等的话, 可以尝试一下这个在线的live教程 https://www.docker.io/gettingstarted/#h_tutorial

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值