相关地址

什么是Docker

简单得来说,Docker是一个由GO语言写的程序运行的”容器”(Linux containers, LXCs)。
目前云服务的基石是操作系统级别的隔离,在同一台物理服务器上虚拟出多个主机。
Docker则实现了一种应用程序级别的隔离; 它改变我们基本的开发、操作单元,由直接操作虚拟主机(VM),转换到操作程序运行的“容器”上来。

Docker是为开发者和系统管理员设计的,用来发布和运行分布式应用程序的一个开放性平台。
由两部分组成:

  • Docker Engine: 一个便携式、轻量级的运行环境和包管理器。( 单OS vs 单线程,是不是跟NodeJS特别像?)
  • Docker Hub: 为创建自动化工作流和分享应用创建的云服务组成。( 云端镜像/包管理 vs npm包管理,是不是跟npm特别像?)

从2013年3月20日,第一个版本的Docker正式发布到 2014年6月Docker 1.0 正式发布,经历了15个月。 虽然发展历程很短,但Docker正在有越来越流行的趋势。

其实Container技术并非Docker的创新,HeroKu, NodeJitsu 等云服务商都采用了类似这种轻量级的虚拟化技术,但Docker是第一个将这这种Container技术大规模开源并被社区广泛接受的。

好的部分:Docker相对于VM虚拟机的优势十分明显,那就是轻量和高性能和便捷性, 以下部分摘自:KVM and Docker LXC Benchmarking with OpenStack

  • 快:运行时的性能可以获取极大提升(经典的案例是提升97%),管理操作(启动,停止,开始,重启等等) 都是以秒或毫秒为单位的。
  • 敏捷:像虚拟机一样敏捷,而且会更便宜,在bare metal(裸机)上布署像点个按钮一样简单。
  • 灵活:将应用和系统“容器化”,不添加额外的操作系统,
  • 轻量:你会拥有足够的“操作系统”,仅需添加或减小镜像即可。在一台服务器上可以布署100~1000个Containers容器。
  • 便宜:开源的,免费的,低成本的。由现代Linux内核支持并驱动。轻量的Container必定可以在一个物理机上开启更多“容器”,注定比VMs要便宜。
  • 生态系统 :正在越来越受欢迎,只需要看一看Google的趋势就知道了,docker or LXC. 还有不计其数的社区和第三方应用。
  • 云支持 :不计其数的云服务提供创建和管理Linux容器框架。
  • 有关Docker性能方面的优势,还可参考此IBM工程师对性能提升的评测,从各个方面比VMs(OS系统级别虚拟化)都有非常大的提升。

有争论的部分:任何项目都会有争论,就像Go,像NodeJS, 同样Docker也有一些。

  • 能否彻底隔离:在超复杂的业务系统中,单OS到底能不能实现彻底隔离,一个程序的崩溃/内存溢出/高CPU占用到底会不会影响到其他容器或者整个系统?很多人对Docker能否在实际的多主机的生产环境中支持关键任务系统还有所怀疑。就像有人质疑Node.JS单线程快而不稳,无法在复杂场景中应用一样。
  • 不过可喜的是,目前Linux内核已经针对Container做了很多改进,以支持更好的隔离。
  • GO语言还没有完全成熟:Docker由Go语言开发,但GO语言对大多数开发者来说比较陌生,而且还在不断改进,距离成熟还有一段时间。此半git、半包管理的方式让一些人产生不适。
  • 被私有公司控制:Docker是一家叫Dotcloud的私有公司设计的,公司都是以营利为目的,比如你没有办法使用源代码编绎Docker项目,只能使用黑匣子编出的Docker二进制发行包,未来可能不是完全免费的。目前Docker已经推出面向公司的企业级服务。

开发者可以使用Docker做什么?

Docker 如今赢得了许多关注,很多人觉得盛名之下其实难副,因为他们仍然搞不清 Docker 和普通开发者到底有什么关系。许多开发者觉得 Docker 离自己很远,Docker 是生产环境中的工具,和自己无关。我也是花了很长时间才想清楚作为普通开发人员如何在自己的开发中使用 Docker。

在介绍用例之前,我希望你能先记住这句话:“Docker 是一个便携的应用容器”。你可以不知道 Docker 所说的的“便携式容器”到底是什么意思,但是你必须清楚 Docker 在日常中能带来非常大的效率提升。

当你需要在容器内运行自己的应用(当然可以是任何应用),Docker 都提供了一个基础系统镜像作为运行应用时的基础系统。也就是说,只要是 Linux 系统上的应用都可以运行在 Docker 中。

  • 可以在 Docker 里面运行数据库吗?当然可以。
  • 可以在 Docker 里面运行 Node.js 网站服务器吗?当然可以。
  • 可以在 Docker 里面运行 API 服务器吗?当然可以。

Docker 并不在乎你的应用程序是什么、做什么,Docker 提供了一组应用打包、传输和部署的方法,以便你能更好地在容器内运行任何应用。