Photo by Elaine Casap on Unsplash
本文核心内容整理自 Brian Holt 的 workshop 《Complete-Intro-Containers》 。
与 Docker 类似的容器技术并不是操作系统与生俱来的能力,而是通过组合一些 Linux 特性,实现进程组隔离的一种技术。
本篇文章将从介绍容器技术的发展开始,进而说明哪些 Linux 特性组成了容器技术的核心部分。希望您能够借由阅读本篇文章,对 Docker 等容器技术有更深刻的认识。
1. 为什么我们需要容器
容器技术并不是凭空出现的,它来源自时代发展中人们对于如何更高效地利用计算机资源的思考和工程实践,在本章中,我将遍历容器技术出现之前的各时代,帮助您理解容器技术究竟解决了什么样的问题。
1.1 裸机时代
互联网服务早期,想要架设 Web 服务器,就需要租用某个地方的服务器设备,运行程序代码。只要有充足且称职的人员维护,就能最大限度的发挥服务器性能。
裸机时代的问题在于扩展服务极度缺乏灵活性:如果想要添加设备,就需要找服务器供应商(Dell 或 IBM)购买新的物理设备,并指派专业人员进行安装,调试,启动,这大概需要一两个月的时间。
并且,当部署好一个服务器集群,操作系统与驱动的升级,硬件的替换与维修,网络问题的修复,线材的整理,机房管理权限的设置,数据中心温度的控制以及电费与 IPS 费用的支付…等等这些都需要专业的团队去处理。
1.2 虚拟机时代
于是我们进入了虚拟机时代,虚拟机是介于用户与硬件设备之间的一层抽象。一开始,相较于裸机时代,一台计算机服务于单一的用户主体,现在一台计算机允许多个用户主体登录,使用计算资源运行彼此的服务。只要设备性能充足,用户便可以在需要时快速添加新服务。这使得我们获得了一些服务扩展的灵活性。
但在这种模式下存在着一些问题:
- 任何用户都有权限获取其他用户服务存储的数据;
- 用户可以通过投放
Fork Bomb
(见下方说明) 的方式,掠夺服务器资源; - 一台物理设备上的任何租户都可能无意间使整个服务器崩溃;
为了解决这一问题,出现了虚拟机技术:即