本文禁止转载!
3/8号参加了Docker Beijing Meetup,这是一份迟来的总结。
不过这里我倒不想多说Docker的东西,那天我的话题参见这里(http://glide.so/liubin0329/746ff18f318ba1baaf77)。
本文主要想说的是“Immutable Infrastructure”,即“不可变基础设施”这个概念。
这个词汇最初应该是由Chad Fowler提出的,关于Chad Fowler,熟悉Ruby的人都应该知道,是一个热情的Ruby/Rails信者,活跃于各种conferences上,现在也是比较有名的TODO软件公司6Wunderkinder的CTO。
什么是 Immutable Infrastructure?
Immutable Infrastructure,直译过来就是不可变基础设施,所谓基础设施,可以认为是我们平常运维中涉及到的所有硬件、软件等的组合。而所谓的不可变,即安装一次,不做修改,用过即扔。有点像一次性产品,或者可以称为即抛型。
按照“The Codeship Workflow: Immutable Infrastructure”给出的定义,不可变基础设施可以定义为如下:
- Automate the setup and deployment for every part and every layer of your infrastructure.
- Never change any part of your system once it is deployed. If you need to change it, deploy a new system.
翻译过来就是:
- 基础设施中的每层的每个组件都可以自动安装、部署。
- 每个组件在完成后将不会发生变更,如果要变更,则丢弃老的组件并部署一个新的组件。
这里所说的每一层,指的是从OS(虚拟机、云主机)到集群、节点管理、直到单个节点上运行的软件的安装配置等。
Immutable Infrastructure产生背景
当然在很多年以前这个概念是得不到技术支持的,我们很难在不同的物理机上实现软件的不可变。不过随着虚拟化技术以及云计算的发展,现在这已经变得可能了。我们更多的时候,面对的不是一台台的物理主机,更多的是云主机实例。安装一个操作系统也不需要几小时,而只需要鼠标点几下,等上两三分钟即可。重装系统这个概念已经不存在,删掉一个主机实例我们也不会心疼。
Amazon的CTO Werner Vogels曾经说过:
“An EC2 instance is not a server—it’s a building block.”
在云计算时代,我们不能再以传统的眼光看云主机了。
Immutable Infrastructure带来的好处
- 解决环境间差异问题
- 快速回滚到老版本
- 更好的进行CI
- 更好的自动化
- 更容易进行大规模运维
Docker带来的新发展
Docker不是完全全新的技术,它基本上是利用了之前存在的各种技术,比如LXC、cgroups、AUFS等。不过最近一年Docker发展真是太迅猛了。
有了Docker之后,部署、开发、测试都将变得更简单、更高效,而且几乎可以在三者之间使用相同的运行环境(Docker镜像/容器)。有新版本的代码后,只需要创建个新的Docker镜像即可,开发测试和线上生产环境都可以使用相同的Docker镜像,估计你以后再也不会说“在我的机器上明明运行的挺好的啊”这样的话了。
更多Docker相关信息请参考上面最开始的那个链接。