如何利用Linux容器实现可移植的应用部署
我们决定在单独的虚拟机上运行独立的应用,例如Amazon的EC2,大部分问题这时会迎刃而解: 隔离性:在一个VM上安装一个应用,应用是完全独立的,除非它们攻入了对方的防火墙。 重复性:用你喜欢的方式准备系统,然后创建一个AMI。你可以随意实例化多个AMI实例。完全是可重现的 。 安全性:由于我们完全隔离,如果Wordpress遭到攻击,其余的基础设施并不会受到影响——除 非你没有保管好SSH密钥或者在哪里都使用同一个密码,但你应该不会这么做吧? 资源限制:VM会分配特定的CPU周期、可用内存和磁盘空间,没有加价的话就不能超额。 易于安装:越来越多的应用能够在EC2上运行,只要在AWS marketplace上点击一个按钮就能实例化应用。 启动只需要几分钟,就是这样。 易于移除:不需要某个应用了?销毁VM。干净又方便。 升级、降级:Netflix如何部署代码里提到,只需要在新VM上部署新版本,然后让负载均衡器指向部署了新 版本的VM。不过应用如果需要在本地保存状态,这种方法就不是很好用了。 快照、备份:点击一个按钮(或者调用一下API)就能获得EBS磁盘的快照,快照会备份到S3中。 完美! 不过……我们有个新问题:虚拟机在两个方面比较昂贵: 金钱:你真的有那么多钱为每个应用启动一个EC2实例?另外你能预测到需要多少个实例么?如果你以后需 要更多的资源,你需要停止VM进行升级——否则就要为闲置资源白白付钱,直到真正用起来(除非 你用能动态调整大小的Solaris Zones,比如Joyent上的)。 时间:虚拟机相关的操作大多都很慢:启动要几分钟,捕捉快照要几分钟,创建镜像也需要几分钟。世界 不停转动,我们可没有这种时间! 我们能做得更好吗? 进入Docker的世界吧。 Docker是由公共PaaS提供商dotCloud的人发起的开源项目,于去年初发起。从技术角度来说,Docker(主 要用Go语言编写)试图简化两种已有技术的使用: LXC:Linux容器,允许独立进程在比普通Unix进程更高的隔离级别上运行。使用的技术术语是集装箱化: 一个容器里运行一个进程。容器支持的隔离级别有: 文件系统:容器只能访问自己的沙箱文件系统(类似于chroot),否则要专门挂载到容器的文件系统中才 能访问。 用户名字空间:容器有自己的用户数据库(也就是容器的root不等于主机的root账户)。 进程名字空间:只有容器里的进程才是可见的(ps aux的输出会非常简洁)。 网络名字空间:每个容器都有自己的虚拟网络设备和虚拟IP(因此它可以绑定任意端口,不用占用主机端 口)。 AUFS:高级多层的统一文件系统,可用来创建联合、写时拷贝的文件系统。 (编辑:应用网_丽江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |