Skip to content

什么是 docker? 简单的来讲 docker 是 docker 公司基于 Go 语言开发实现的开源容器项目。那么什么又是 docker 容器呢?简单的来理解可以将 docker 容器理解为一个轻量级的沙盒(当然这么讲不是很准确,docker 实际的实现是内核级的虚拟化),每个容器中运行着一个应用,不同的容器之间彼此相互隔离,彼此并不知道自己的存在,容器之间可以通过网络进行通信。由于 docker 的特殊实现机制决定了 docker 自身占用的资源十分有限,且 docker 的启停都非常的迅速。

为什么是 docker

使用 docker 的好处

前边提到了 docker 对系统资源的占用非常的有限,除此之外强大的跨平台和应用分发能力使得基于 docker 构建的应用可以快速的传播为其发展奠定了基础。 docker 解耦应用和运行平台的关系使得基于其构建的应用具有很好的跨平台能力,其通过 docker 容器应用的打包使得应用可以很方便的进行传播、分发和部署。

docker 在开发运维中的优势

使用 docker 跨平台和应用打包分发能力使得 docker 只需要一次的创建或者修改就可以在其他任何的地方进行使用。

更快速的交付和部署

使用 docker 的打包技术开发、测试、运维可以使用相同的镜像进行开发测试和部署,通过这种方式消除了环境的差异,使得开发、测试和生产环境不一致的情况,从而大大的减少了开发、测试和部署的时间。

更高效的资源利用

因为 docker 的运行不需要额外的虚拟化管理程序的支持同时自身消耗的资源非常的小,使得 docker 可以实现更高效的性能。

快速的迁移和扩展

docker 的跨平台的支持使得其可以在主流的操作系统平台上可以进行无缝的迁移。

更简单的更新

通过使用 Dockerfile 更新容器时只需要更改文件的配置即可,极大的减少了应用的修改成本,同时由于 docker 的修改都是增量更新,也使得修改可以快速的进行分发和部署。

docker 相比较虚拟机优势在哪

  1. docker 容器的启动和停止可以在秒级实现,传统的虚拟机则需要分钟级才可以完成。
  2. docker 是内核级别的虚拟化,使得其占用的资源很小,在保证应用性能的同时,尽量减少系统的开销,使得同一台服务器可以启动很多的实例。
  3. docker 的存储复制、增量更新使得用户可以很方便的获得、分发和更新应用镜像。
  4. Dockerfile 灵活的自动化创建和部署机制,使得流程可以标准化,提高了工作效率。
  5. 传统的虚拟化是在硬件之上的虚拟化,需要有额外的虚拟机管理应用个虚拟机操作系统层,docker 则是直接复用本地主机的操作系统,更加的轻量级。

Docker 和虚拟化

什么是虚拟化

虚拟化是一种资源的管理技术,他可以将计算的各种实体资源,如内存、网络和存储等予以抽象转换,从而打破实体不可切割的限制使得用户可以以更高效的方式来组合利用这些资源。

虚拟化的类型

虚拟化分为软件虚拟化和平台虚拟化两种,其中前者指的是一些模拟设备或者诸如 wine 这样的软件,后者又分为完全虚拟化、硬件辅助虚拟化、部分虚拟化、准虚拟化和操作系统级的虚拟化。

  1. 完全虚拟化,这种虚拟化的特征是虚拟机模拟完整的底层硬件和特权指令的执行过程,客户操作系统不需要做额外的更改,其中以 virtualbox 等软件为代表。
  2. 硬件辅助虚拟化,这种虚拟化的特征是需要利用硬件 cpu 的支持,如 intel-vt 和 amd-v 处理器内置命令来实现完全的虚拟化。
  3. 部分虚拟化,这种虚拟化的特征是只针对部分的硬件资源进行虚拟化,客户操作系统要进行修改。
  4. 准虚拟化,这种虚拟化的特征是部分硬件接口以软件的形式提供给客户操作系统,客户的操作系统需要进行修改,代表为早期的 xen。
  5. 操作系统级虚拟化,这种虚拟化的特征是内核通过创建多个虚拟的操作系统实例来隔离不同的进程,代表为容器的相关技术,docker 即在这个范畴之中。不难发现 docker 的虚拟化之所以有这么大的优势是与操作系统自身的设计实现是分不开的。

为什么要虚拟化

虚拟化的核心是对资源的抽象,目标是在同一台主机上可以运行多个系统或者应用,从而提高系统的资源利用率,降低成本以及容错备灾等。而这正好符合了人们更好的利用资源的诉求。