【技术专栏】大话Docker系列:我们为什么需要Docker

轻量级虚拟化容器Docker1.0正式版自发布半年以来,已经受到开源界的极大追捧和企业界的密切关注。在国外CloudOpen大会上投票显示Docker是仅次于OpenStack的开源项目。为什么Docker近来如此之火?

回答这个问题,得聊下当前火热的云计算。现如今的IT发展,无论其规模还是复杂度都远远超过以前,互联网的兴起,大数据的运用,以及云计算背景下的各种“云”。其中IaaS领域以OpenStack为代表,但是IaaS的落地,资金人员投入大,技术实现复杂,稳定周期长,一般适合BAT级别的大公司才能玩的转。而Docker几乎属于PaaS领域的准标准,未来将大有发展。OpenStack与Docker间的关系是“和而不同”。那么相对传统的计算虚拟化KVM和Xen技术,Docker都有哪些功能和优势呢?

Docker 扩展了 Linux 容器,利用了 LXC、cgroups 和 Linux 自己的内核,通过一个高层次的 API 为进程单独提供了一个轻量级的虚拟环境。和传统的虚拟机不同的是,一个Docker容器并不包含一个单独的操作系统,而是基于已有的基础设施中操作系统提供的功能来运行的。Docker会像一个可移植的容器引擎那样工作。它把应用程序及所有程序的依赖环境打包到一个虚拟容器中。

下图比较了Docker和传统虚拟化方式的不同之处,可见容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现。

Docker 容器相对于 VM 有以下几个优势:启动速度快,容器通常在一秒内可以启动;资源利用率高,一台普通 PC 可以跑上千个容器,性能开销小。

当前IaaS平台里,大多采用KVM和Xen实现计算存储虚拟化,它们需要通过中间层使虚拟机运行于硬件之上的Hypervisor虚拟化技术,但是在Docker看来都很浪费资源。因为绝大多数情况下,客户要求的是高效的运行环境空间而不是臃肿的操作系统,其浪费资源不说,且难于管理,我们需要的是更加敏捷的、轻量级的技术,运行于操作系统内核之上的用户空间中Docker!

作为开发人员,应该经历过代码在开发环境中明明能够正常运行,但在发布部署后却问题多多。Docker的出现大大地降低了环境配置管理的复杂度,提高了产品的应用部署效率,真正做到“一次配置,到处运行”。我们可以通过Docker的容器技术构建起属于自己的开发、测试的标准流程。

总结,运用Docker的容器虚拟化技术,提高了资源服务利用率,提升了云计算的标准化进程,服务构建标准化(Dockerfile),产品交付标准化(Container),服务运行环境标准化(Docker引擎)。为什么强调标准化?因为云计算的本质不是虚拟化而是服务。SDN也是一样道理,其终极目标是提供“自动化,智能化”的网络服务。Docker对于SDN而言,可为其提供SDN实验组件的容器化运行,比如我们在进行SDN网络实验时,可以把Open vSwitch、Mininet及OpenDaylight、RYU控制器等分别部署到容器中,降低环境部署的复杂度和资源利用效率;SDN对于Docker而言,可以运行SDN的思想和技术实现大量容器间的互联互通,增强Docker在网络方面的软肋。

那么从技术上层面上,Docker是如何实现它所承诺的服务的?