1.什么是Docker?
简单地讲,可以将
Docker
容器理解为一种轻量级的沙盒( sandbox )。
每个容器内运行着一个应用,不同的容器相互隔离,容器之间也可以通过网络互相通信。容器的创建和停止十分快速,几乎跟创建和终止原生应用一致;另外,容器自身对系统资源的额外需求也十分有限,远远低于传统虚拟机。 很多时候,甚至直接把容器当作应用本身也没有任何问题。
2.为什么使用Docker?
1. Docker 窑器虚拟化的好处
常见的 LAMP (Linux Apache MySQL PHP )组合来构建网站 。 按照传统的做法,首先需要安装 Apache 、MySQL 和 PHP以及它们各自运行所依赖的环境;之后分别对它们进行配置(包括创建合适的用户、配置参数等);经过大量的操作后,还需要进行功能测试,看是否工作正常;如果不正常,则进行调试追踪,意味着更多的时间代价和不可控的风险。可以想象,如果应用数目变多,事情会变得更加难以处理。
如果一旦需要服务器迁移,往往需要对每个应用都进行重新部署和调试。 这些琐碎而无趣的“体力活”,极大地降低了用户的工作效率。 究其根源,是这些应用直接运行在底层操作系统上,无法保证同一份应用在不同的环境中行为一致。 而 Docker 提供了一种更为聪明的方式,通过容器来打包应用、解藕应用和运行平台 。这意味着迁移的时候,只需要在新的服务器上启动需要的容器就可以了,无论新旧服务器是否是同一类型的平台 。 这无疑将帮助我们节约大量的宝贵时间,并降低部署过程出现问 的风险。
2 . Docker在开发和运维中的优势
- 更快速的交付和部署:使用 Docker,开发人员可以使用镜像来快速构建一套标准的开发环境;开发完成之后,测试和运维人员可以直接使用完全相同的环境来部署代码。只要是开发测试过的代码,就可以确保在生产环境无缝运行。
- 更高效的资源利用:运行 Docker 容器不需要额外的虚拟化管理程序(
Virtual Machine Manager,VMM
,以及Hypervisor
)的支持, Docker 是内核级的虚拟化,可以实现更高的性能,同时对资源的额外需求很低 。 - 更轻松的迁移和扩展:Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等,同时支持主流的操作系统发行版本。
- 更简单的更新管理。使用
Dockerfile
,只需要小小的配置修改,就可以替代以往大量的更新工作。所有修改都以增量的方式被分发和更新,从而实现自动化并且高效的容器管理。
3. Docker 与虚拟机比较
- Docker 容器很快,启动和停止可以在秒级实现,这相比传统的虚拟机方式(数分钟)要快得多;
- Docker 容器对系统资源需求很少,一台主机上可以同时运行数千个 Docker 容器(在IBM 服务器上已经实现了同时运行! OK 量级的容器实例);
- Docker 通过类似 Git 设计理念的操作来方便用户获取、分发和更新应用镜像,存储复用,增量更新;
- Docker 通过 Dockerfile 支持灵活的自动化创建和部署机制,以提高工作效率,并标准化流程 。
3.Docker与虚拟化
虚拟化的核心是对资源的抽象,目标往往是为了在同一个主机上同时运行多个系统或应用,从而提高系统资源的利用率,并且带来降低成本、方便管理和容错容灾等好处。
基于软件的虚拟化从对象所在的层次,又可以分为应用虚拟化和平台虚拟化(通常说的虚拟机技术即属于这个范畴) 。 前者一般指的是一些模拟设备或诸如 Wine 这样的软件,后者又可以细分为几个子类:
- 完全虚拟化 。 虚拟机模拟完整的底层硬件环境和特权指令的执行过程,客户操作系统无须进行修改。
- 硬件辅助虚拟化。利用硬件 (主要是 CPU )辅助支持(目前 x86 体系结构上可用的硬件辅助虚拟化技术包括 Intel-VT 和 AMD-V)处理敏感指令来实现完全虚拟化的功能,客户操作系统无须修改 ,例如
VMware Workstation , Xen, KVM
; - 部分虚拟化。只针对部分硬件资源进行虚拟化,客户操作系统需要进行修改。现在有些虚拟化技术的早期版本仅支持部分虚拟化;
- 虚拟化(
paravirtualization
)。部分硬件接口以软件的形式提供给客户机操作系统,客户操作系统需要进行修改。 - 操作系统级虚拟化。内核通过创建多个虚拟的操作系统实例(内核和库)来隔离不同的进程。
传统方式是在硬件层面实现虚拟化,需要有额外的虚拟机管理应用和虚拟机操作系统层 。 Docker 容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,因此更加轻量级 。