一.虚拟技术的发展
传统方式上,想要部署一个APP,首先需要一台物理服务器,然后在物理服务器上安装一个操作系统,最后才可以在操作系统上部署需要的APP. 这样的方式存在着许多缺点,比如,部署时可能要配置各种环境,部署慢;成本高;硬件的资源浪费;难于迁移和扩展;可能会被限定硬件厂商.
APP |
操作系统 |
物理服务器 |
为了解决行业痛点,虚拟化技术出现了.虚拟化技术实际上就是在传统的物理服务器和操作系统上增加了一个Hypervisor, Hypervisor通过对物理资源(如CPU, 内存, 硬盘等)的虚拟化实现了上层APP与底层物理资源的隔离.在Hypervisor之上可以装一些虚拟机(VM), Hypervisor可以实现不同虚拟机之间物理资源的限定和调度,从而使物理资源利用率最大化.虚拟技术的出现,可以一个物理机上部署多个APP,每个APP都运行在一个独立的VM里.
APP | APP |
Guest Operating system | Guest Operating system |
VM | VM |
Hypervisor | |
主操作系统 | |
物理服务器 |
虚拟技术的优点:
1.资源池:一个物理机的资源分配到了不同的虚拟机里;
2.容易扩展:加物理机或加虚拟机
3.容易云化:亚马逊AMS, 阿里云等
虚拟技术的局限:
每一个VM都是一个完整的操作系统,需要给其分配资源,当VM数量增多时,操作系统本身消耗的资源势必增多.
二.容器技术的出现
促使容器技术出现的最重要的一个原因是,在完成一个APP时,开发人员所使用开发环境(开发语言,数据库类型等)与测试及运维人员的测试运维环境的统一性.容器技术出现之前,测试或运维一个APP前,首先需要进行环境的搭建和配置,这通常是一件繁琐浪费时间的事情.而容器技术的出现,可以很好的解决这个问题.容器(container)的英文翻译是"集装箱",容器技术实际上是一种标准化技术,即将不同的APP打包集装到一个标准的集装箱里,使得标准化的APP可以在任何机器上运行,从而解决环境配置的痛点.
容器技术解决的问题:
1.解决了开发和运维之间的矛盾
2.在开发 (Developer) 和运维 (Operator) 之间搭建了一个桥梁,是实现 DevOps 的最佳解决方案
容器技术的特点:
1.对软件及其依赖进行标准化打包
2.实现了应用之间的隔离,这个隔离可能没有虚拟技术中的隔离好
3.多个容器共享一个 OS Kernel (操作系统内核)
4.可以运行在许多主流操作系统上
Tomkat+Java+Debian | QL Server+.net+Ubuntu |
Container | Container |
OS Kernel |
容器和虚拟化的区别:
容器是APP层面的隔离,而虚拟化是物理资源层面的隔离.
APP | APP |
Container | Container |
Docker | |
Host OS | |
Infrastructure |
APP | APP |
Guest OS | Guest OS |
VM | VM |
Hypervisor | |
Host OS | |
Infrastructure |
虚拟化+容器:
Container | Container | Container | Container |
Docker | Docker | ||
Guest OS | Guest OS | ||
VM | VM | ||
Hypervisor | |||
Host OS | |||
Infrastrcture |
Docker是容器技术的一种实现, Docker的用途有:
- 简化配置
- 整合服务器
- 代码流水线管理
- 调试能力
- 提高开发效率
- 多租户
- 隔离应用
- 快速部署