Docker学习(容器)

容器

容器简介:
  • 容器是镜像的运行时实例。 正如从虚拟机模板上启动VM一样, 用户也同样可以从单个镜像上启动一个或多个容器。 虚拟机和容器最大的区别是容器更快并且更轻量级——与虚拟机运行在完整的操作系统之上相比, 容器会共享其所在主机的操作系统/内核。
    Docker学习(容器)
  • 容器和虚拟机
    容器和虚拟机都依赖于宿主机才能运行。 宿主机可以是笔记本, 是数据中心的物理服务器, 也可以是公有云的某个实例。 在下面的示例中, 假设宿主机是一台需要运行4个业务应用的物理服务器。在虚拟机模型中, 首先要开启物理机并启动Hypervisor引导程序 。 一旦Hypervisor启动, 就会占有机器上的全部物理资源, 如CPU、 RAM、 存储和NIC。 Hypervisor接下来就会将这些物理资源划分为虚拟资源, 并且看起来与真实物理资源完全一致。 然后Hypervisor会将这些资源打包进一个叫作虚拟机(VM) 的软件结构当中。 这样用户就可以使用这些虚拟机, 并在其中安装操作系统和应用。 前面提到需要在物理机上运行4个应用, 所以在Hypervisor之上需要创建4个虚拟机并安装4个操作系统, 然后安装4个应用。 当操作完成后, 结构如图7.2所示。
    Docker学习(容器)
    而容器模型则略有不同,服务器启动之后, 所选择的操作系统会启动。 在Docker世界中可以选择Linux, 或者内核支持内核中的容器原语的新版本Windows。 与虚拟机模型相同, OS也占用了全部硬件资源。 在OS层之上, 需要安装容器引擎(如Docker) 。 容器引擎可以获取系统资源 , 比如进程树、 文件系统以及网络栈, 接着将资源分割为安全的互相隔离的资源结构, 称之为容器。 每个容器看起来就像一个真实的操作系统, 在其内部可以运行应用。 按照前面的假设, 需要在物理机上运行4个应用。 因此, 需要划分出4个容器并在每个容器中运行一个应用, 如图7.3所示。
    Docker学习(容器)
    从更高层面上来讲, Hypervisor是硬件虚拟化(Hardware Virtualization) ——Hypervisor将硬件物理资源划分为虚拟资源; 另外, 容器是操作系统虚拟化(OS Virtualization) ——容器将系统资源划分为虚拟资源。
  • 损耗对比:
    虚拟机模型将底层硬件资源 划分到虚拟机当中。 每个虚拟机都是包含了虚拟CPU、 虚拟RAM、 虚拟磁盘等资源的一种软件结构。 因此, 每个虚拟机都需要有自己的操作系统来声明、 初始化并管理这些虚拟资源。 但不幸的是, 操作系统本身是有其额外开销的。 例如, 每个操作系统都消耗一点CPU、 一点RAM、 一点存储空间等。 每个操作系统都需要独立的许可证, 并且都需要打补丁升级, 每个操作系统也都面临被攻击的风险。 通常将这种现象称作OS Tax 或者VM Tax , 每个操作系统都占用一定的资源。容器模型具有在宿主机操作系统中运行的单个内核。 在一台主机上运行数十个甚至数百个容器都是可能的——容器共享一个操作系统/内核。 这意味着只有一个操作系统消耗CPU、 RAM和存储资源, 只有一个操作系统需要授权, 只有一个操作系统需要升级和打补丁。 同时, 只有一个操作系统面临被攻击的风险。 简言之, 就是只有一份OS损耗!
  • 启动时间对比
    因为容器并不是完整的操作系统, 所以其启动要远比虚拟机快。 切记, 在容器内部并不需要内核, 也就没有定位、 解压以及初始化的过程——更不用提在内核启动过程中对硬件的遍历和初始化了。 这些在容器启动的过程中统统都不需要! 唯一需要的是位于下层操作系统的共享内核是启动了的! 最终结果就是, 容器可以在1s内启动。 唯一对容器启动时间有影响的就是容器内应用启动所花费的时间。这就是容器模型要比虚拟机模型简洁并且高效的原因了。 使用容器可以在更少的资源上运行更多的应用, 启动更快, 并且支付更少的授权和管理费用, 同时面对未知攻击的风险也更小。 还有什么理由不喜欢容器呢!