Docker学习历程

Docker 基本概念

1. 什么是容器?

  1. 一种虚拟化的方案。
  2. 操作系统级别的虚拟化。
  3. 只能运行相同或者相似的内核的操作系统。
  4. 依赖于Linux内核的特性:Namespace和 Cgroups(Control Group),即docker只能运行在linux系统之上。

2. 虚拟机与Linux容器技术对比:

  1. 传统虚拟机通过中间层是将一台或多台独立的机器虚拟运行在硬件之上,比如VM。
  2. 容器直接运行在操作系统内核之上的用户空间,容器虚拟化也被称为操作系统虚拟化。
  3. 传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

3. 什么是Docker?

  1. Docker是一个开源的容器引擎,它基于LXC容器技术,使用Go语言开发,基于 Linux 内核的cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 LXC,从 0.7 以后开始去除 LXC,转而使用自行开发的 libcontainer,从 1.11 开始,则进一步演进为使用 runC 和containerd。
  2. 源代码托管在Github上,并遵从Apache2.0协议。
  3. Docker 最初是在 Ubuntu 12.04 上开发实现的;Red Hat 则从 RHEL 6.5 开始对 Docker 进行支持;Google 也在其 PaaS 产品中广泛应用Docker。
  4. Docker采用C/S架构,其可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。
  5. 简单来说:Docker是将应用程序自动部署到容器的开源引擎,是一种快速解决生产问题的一种技术手段。

4. Docker 特点:

  1. 提供简单轻量的建模方式
  2. 职责的逻辑分离
  3. 快速高效的开发生命周期
  4. 鼓励使用面向服务的架构(高内聚,低耦合,单一性)

5. Docker 的使用场景:

  1. 使用Docker容器开发、测试、部署服务
  2. 创建隔离的运行环境
  3. 搭建测试环境
  4. 构建多用户的平台即服务(PaaS)基础设施
  5. 提供软件及服务(PaaS)停用程序
  6. 高性能,超大规模的宿主机部署

6 Docker优势:

  1. 简化配置
    这是Docker公司宣传的Docker的主要使用场景。虚拟机的最大好处是能在你的硬件设施上运行各种配置不一样的平台(软件、系统),Docker在降低额外开销的情况下提供了同样的功能。它能让你将运行环境和配置放在代码中然后部署,同一个Docker的配置可以在不同的环境中使用,这样就降低了硬件要求和应用环境之间耦合度。
  2. 代码流水线(Code Pipeline)管理
    前一个场景对于管理代码的流水线起到了很大的帮助。代码从开发者的机器到最终在生产环境上的部署,需要经过很多的中间环境。而每一个中间环境都有自己微小的差别,Docker给应用提供了一个从开发到上线均一致的环境,让代码的流水线变得简单不少。
  3. 提高开发效率
    这就带来了一些额外的好处:Docker能提升开发者的开发效率。如果你想看一个详细一点的例子,可以参考Aater在DevOpsDays Austin 2014 大会或者是DockerCon上的演讲。
    不同的开发环境中,我们都想把两件事做好。一是我们想让开发环境尽量贴近生产环境,二是我们想快速搭建开发环境。
    理想状态中,要达到第一个目标,我们需要将每一个服务都跑在独立的虚拟机中以便监控生产环境中服务的运行状态。然而,我们却不想每次都需要网络连接,每次重新编译的时候远程连接上去特别麻烦。这就是Docker做的特别好的地方,开发环境的机器通常内存比较小,之前使用虚拟的时候,我们经常需要为开发环境的机器加内存,而现在Docker可以轻易的让几十个服务在Docker中跑起来。
  4. 隔离应用
    有很多种原因会让你选择在一个机器上运行不同的应用,比如之前提到的提高开发效率的场景等。
    我们经常需要考虑两点,一是因为要降低成本而进行服务器整合,二是将一个整体式的应用拆分成松耦合的单个服务(译者注:微服务架构)。如果你想了解为什么松耦合的应用这么重要,请参考Steve Yege的这篇论文,文中将Google和亚马逊做了比较。
  5. 整合服务器
    正如通过虚拟机来整合多个应用,Docker隔离应用的能力使得Docker可以整合多个服务器以降低成本。由于没有多个操作系统的内存占用,以及能在多个实例之间共享没有使用的内存,Docker可以比虚拟机提供更好的服务器整合解决方案。
  6. 调试能力
    Docker提供了很多的工具,这些工具不一定只是针对容器,但是却适用于容器。它们提供了很多的功能,包括可以为容器设置检查点、设置版本和查看两个容器之间的差别,这些特性可以帮助调试Bug。你可以在《Docker拯救世界》的文章中找到这一点的例证。
  7. 多租户环境
    另外一个Docker有意思的使用场景是在多租户的应用中,它可以避免关键应用的重写。我们一个特别的关于这个场景的例子是为IoT(译者注:物联网)的应用开发一个快速、易用的多租户环境。这种多租户的基本代码非常复杂,很难处理,重新规划这样一个应用不但消耗时间,也浪费金钱。
    使用Docker,可以为每一个租户的应用层的多个实例创建隔离的环境,这不仅简单而且成本低廉,当然这一切得益于Docker环境的启动速度和其高效的diff命令。
    你可以在这里了解关于此场景的更多信息。
  8. 快速部署
    在虚拟机之前,引入新的硬件资源需要消耗几天的时间。虚拟化技术(Virtualization)将这个时间缩短到了分钟级别。而Docker通过为进程仅仅创建一个容器而无需启动一个操作系统,再次将这个过程缩短到了秒级。这正是Google和Facebook都看重的特性。
    你可以在数据中心创建销毁资源而无需担心重新启动带来的开销。通常数据中心的资源利用率只有30%,通过使用Docker并进行有效的资源分配可以提高资源的利用率。

7. docker 历程:

自2013年开始出现以来,发展势头很猛,赶上了好时候。
docker 从1.13x开始,版本分为了社区版ce和企业版ee,并且基于年月的时间线行驶

官方资料:
Docker 官网:http://www.docker.com Github Docker 源码:https://github.com/docker/docker