简述Docker容器技术
本文最后更新于 2024-12-18,文章内容可能已经过时。
什么叫做Docker
Docker开源项目
Docker是一个基于Go语言编写的开源容器项目,最初由dotCloud公司于2013年发起,自开源后广泛受到业界关注并持续发展,到如今Docker已经具备了极度完整的开源生态。dotCloud在2013年更改公司名为Docker Inc,目前已经成为了世界上最大的Docker容器服务供应商,其官网地址为docker.com,官网界面如下图所示。
Linux容器技术
大家都在说,Docker是一款站在巨人肩膀上的产品,那么这个巨人的肩膀到底指的是什么?
其实,这个巨人的肩膀指的是Linux容器技术(Linux Containers,LXC)。IBM的DeveloperWorks网站上对容器技术的描述十分的准确:容器有效的将单个操作系统管理的资源划分到孤立的组内,以更好的在孤立的组之间平衡有冲突的资源使用需求。与虚拟化相比,这样既不需要指令集级模拟,也不需要实时编译。容器可以在核心CPU本地运行指令,而不需要任何专门的解释机制。此外,也避免了准虚拟化(para-virtualization)和系统调用替换中的复杂性。
当然LXC技术也不是从石头缝里蹦出来的,他也经历很长时间的发展。最早的容器技术可以追溯到1982年的chroot工具,至今主流的Linux发行版本仍然带着或者支持这个工具;后期发展过程中也有很多类似技术的积累,比如说Sun Solaris操作系统上的Solaris Containers(发布与2004年),FreeBSD操作系统上的FreeBSD jail(2000年左右发布),还有OpenVZ等等。
但是在LXC之前,虽然有了很多年的技术发展,这些技术已经十分成熟稳定,但是由于多种原因,这些功能并未能够集成到Linux内核之中,使用起来极不方便。例如,用户需要使用到OpenVZ技术,需要去给系统内核打上特定的内核补丁,不同的版本、不同架构之间的内核补丁都并不一致。同时这些技术也存在较大的学习难度,种种类似的困难导致在很长一段时间内,这种优秀的技术仅仅在技术人员的小圈子中被探讨。
LXC项目借鉴了前人早已成熟的容器设计理念,基于一系列新引入的内核特性,实现了更具备扩展性的虚拟化容器方案。最为重要的是,LXC终于集成到了主流的Linux内核之中,进而成为了Linux系统轻量级容器的事实标准。
从Linux容器到Docker
在LXC的基础之上,Docker进一步去优化了容器的使用。Docker提供了各种容器的管理工具,使用户不需要再关注底层的一些操作;同时,Docker通过引入分层文件系统构建和高效的镜像机制,降低了迁移的难度。实现了使用Docker容器就像操作应用自身一样简单。
在早期的Docker确实是直接基于LXC实现的,但是从0.9版本开始,Docker实现了libcon-tainer项目作为更加广泛的容器驱动实现,从而替换掉了LXC的实现。目前Docker也积极推动runC标准项目并贡献给了开放容器联盟,试图让容器的支持不在局限于Linux操作系统,而是更加安全、开放、且具备拓展性。如今,我们已经可以在多个平台上使用到Docker,比如说Windows平台的容器技术,Mac系统中也可以直接对Docker进行安装。