从 20 世纪 60 年代 IBM 推出的大型主机虚拟化,到后来以 Xen、KVM 为代表的虚拟机虚拟化,再到现在以 Docker 为代表的容器技术。
什么是 Docker
Docker 开源项目背景
Docker 是基于 Go 语言
实现的开源容器项目。
通过对应用的封装(Packaging)、分发(Distribution)、部署(Deployment)、运行(Runtime)生命周期进行管理,达到应用组件级别的一次封装,到处运行。
Linux 容器技术(Linux Containers,LXC)
最早的容器技术可以追溯到 1982 年 Unix 系列操作系统上的 chroot 工具。
容器技术有效的将由单个操作系统管理的资源划分到孤立的组中,以更好的在孤立的组之间平衡有冲突的资源使用需求。
从 Linux 容器到 Docker
可以将 Docker 容器理解为一种轻量级的沙盒(sandbox),每个容器内运行着一个应用,不同的容器相互隔离,容器之间也可以通过网络相互通信。
直接把容器当作应用本身也没有任何问题。
为什么要使用 Docker
Docker 容器虚拟化的好处
假设用户试图基于最常见的 LAMP(Linux+Apache+MySQL+PHP)组合来构建网站。首先需要安装
各自运行所依赖的环境;之后分别对他们进行参数配置
;经过大量的操作后,还需要进行功能测试
,看是否工作正常;如果不正常,则进行调试
追踪,意味着更多的时间代价和不可控的风险。
根源:应用直接运行在底层操作系统上,无法保证同一份应用在不同的环境中行为一致。
Docker 在开发和运维中的优势
- 更快速的交付和部署:开发人员可以使用镜像来快速构建一套标准的开发环境;开发完成之后,测试和运维人员可以直接使用完全相同的环境来部署代码。
- 更高效的资源利用:运行 Docker 容器不需要额外的虚拟化管理程序(VMM、Hypervisor)的支持。
- 更轻松的迁移和扩展:Docker 容器几乎可以在任意的平台上运行。
- 更简单的更新管理:使用 Dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作。
Docker 与虚拟机比较
- Docker 容器很快,启动和停止可以在秒级实现,这相比传统的虚拟机方式要快的多。
- Docker 容器对系统资源需求很少,一台主机上可以同时运行数千个 Docker 容器。
- Docker 通过类似 Git 设计理念的操作来方便用户获取、分发和更新应用镜像,存储复用,增量更新。
- Docker 通过 Dockerfile 支持灵活的自动化创建和部署机制,以提高工作效率,并标准化流程。
Docker 与虚拟化
虚拟化的核心是对资源的抽象。
可分为基于硬件的虚拟化(不多见)和基于软件的虚拟化。其中,基于软件的虚拟化又可细分为:
- 完全虚拟化(full virtualization):虚拟机模拟完整的底层硬件环境和特权指令的过程。
- 准虚拟化(para virtualization):部分硬件接口以软件的形式提供给客户机操作系统。
- 操作系统级虚拟化:内核通过创建多个虚拟的操作系统实例(内核和库),来隔离不同的进程。
传统方式需要有额外的虚拟机管理应用和虚拟机操作系统层,Docker 直接复用本地主机的操作系统,更加轻量级。