1. 虚拟化技术发展史
在虚拟化技术出现之前,如果要搭建一台服务器,需要做如下工作:
- 购买一台硬件服务器
- 在硬件服务器上安装配置操作系统
- 在操作系统之上配置应用运行环境
- 部署并运行应用
这种方式的缺点就是:
- 部署应用非常慢
- 需要花费的成本非常高(时间成本,服务器成本)
- 应用迁移麻烦,要将应用迁移,又得重复部署应用的过程:购买服务器 -> 安装操作系统 OS -> 配置运行环境 -> 部署应用
所有,为了解决这个问题,后续出现了虚拟化技术。
2. 虚拟化技术是什么?
虚拟化(Virtualization)是一种计算机资源管理技术,是将计算机的各种硬件资源,比如服务器、网络、CPU、内存及存储等,予以抽象和转换后呈现出一套新的硬件资源环境,在这一套新的硬件环境下可以安装我们的操作系统,部署我们的应用运行环境等,它打破计算机硬件资源不可切割的障碍,使我们可以比原本的计算机硬件资源结构更好的方式来组合应用这些资源。
3. 虚拟化技术的分类
虚拟化一般分为:
- 硬件级虚拟化(hardware-level-virtualization)
- 操作系统级虚拟化(os-level-virtualization)
硬件虚拟化 是运行在硬件之上的虚拟化技术,它的核心技术是 Hypervisor,Hypervisor 是一种运行在基础物理服务器硬件之上的软件层,可以虚拟化硬件资源,例如 CPU、硬盘、内存资源等。然后可以通过在虚拟化出来的资源之上安装操作系统,也就是所谓的虚拟机。像 VMWare,VirtualBox 等都是使用该技术,我们经常使用的桌面级的虚拟机 VMWare 就是采用这章虚拟化技术。如下图所示:

通过Hypervisor层,我们可以创建不同的虚拟机,并且每个虚拟机都是分离、独立的,这样一来,我们就可以在一台硬件服务器和本地操作系统之上虚拟化出多个服务器,用来部署应用。
4. 虚拟化技术的优缺点
虚拟化技术的优点:
一台物理服务器可以虚拟化出多个虚拟的服务器,让计算机资源得以充分利用
虚拟化技术的缺点:
- 每创建一台虚拟机的时候,都会创建一个操作系统,这个操作系统会占用很多资源,这样无疑大大的增加了资源的消耗,当安装的虚拟机越多,资源消耗就越多。
- 环境兼容性问题,开发的运行环境正常,部署到虚拟机环境测试则有可能发生错误。
5. 容器技术的发展
基于硬件级虚拟化技术的缺点和不足,后续又发展出来了另一种虚拟化技术,及操作系统级虚拟化技术。
操作系统级虚拟化是运行在操作系统之上的虚拟化技术,它模拟的是运行在一个操作系统上的多个不同进程,并将其封装在一个密闭的容器里面,该技术也成为容器化技术。
在容器化技术领域,Docker 是目前最流行的一种实现。Docker 发布 2013年,Docker 基于 LXC 技术,LXC 是 Linux 平台上的容器化技术实现。
注:LXC 是 Linux Container 的缩写,它是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,它与宿主机使用同一个内核,性能损耗小,这种技术是 Linux 提供的,但是直到 Docker 出世,该技术才被发挥出来。
6. Docker 的发展历史
2010年,几个年轻人在旧金山成立了一家叫做 PasS(Platform as a Service,平台即服务)平台的创业公司,起名为dotCloud,并且还获得了创业孵化器 YCombinator 的支持,虽然 dotCloud 期间获得过一些融资,但随着 IT 巨头(微软,谷歌,亚马逊等)也杀入PaaS平添,dotCloud 举步维艰。
2013年,dotCloud 创始人,28岁的 Solomon Hykes 做了一个艰难的决定:将 dotCloud 的核心引擎开源,这项核心引擎技术能够将 Linux 容器中的应用代码打包,轻松的在服务器之间迁移。
然而这个基于 LXC 技术的核心管理引擎开源后,让全世界的技术人员感到惊艳,感叹这一切太方便了。也正是 dotCloud 的创始人这个艰难的孤注一掷的决定让所有的IT巨头们也为之一颤。
从 2013年Docker开源开始,Docker技术风靡全球,于是dotCloud公司决定将Docker作为主要业务进行发展,并把公司改名为 Docker Inc,全身心投入到 Docker 的开发中,并于 2014年 8 月,Docker宣布把Paas 业务doctCould 出售给位于德国柏林的同样专注于PaaS的提供商 cloudControl,从此 Docker 可以轻装上阵,专注于 Docker 的研发。
从 2013年 2 月决定开源,到2013年3月20日发布Docker 0.1 只用了一个月时间。当前 Docker 的最新版本是 18.03。
Docker 迅速成长,在2014年6月9日,Docker团部宣布发布Docker 1.0,1.0版本标着着 Docker 平台已经足够成熟,并可以被应用到生产产品中(还提供了一些需要付费的支持选项)
一年的时间,使一个围绕着 Docker 的小型初创企业生态体系逐渐形成。Docker 先后赢得了 Google,微软,亚马逊,VMWare等IT巨头的青睐,他们纷纷表示将保证自己平台与Docker容器技术的兼容性。
2016年2月20日,cloudControl 公司在其官方博客中宣布即将破产,隶属于cloudControl公司的dotCloud也宣布于2月29日关闭服务。作为Docker的前身,dotCloud目睹Docker的成长,成为云平台的一颗新星,而自己却力不从心,Docker的繁荣间接地导致Docker的前身dotCloud在 PaaS 平台的衰败,兴衰成败,令人唏嘘不已,这也许是颠覆创新的经典案例。
6. Docker 是什么
- Docker 是一个开源的应用容器引擎,它基于 Google 公司退出的Go语言实现,项目代码托管在 Github 上进行维护:http://github.com/docker/docker-ce
- Docker 技术让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,打包好的容器可以发布到任何流行的 Linux 服务器上运行,这样就可以解决开发环境与运维环境不一致的问题了,所以容器技术解决了开发与运维之间的矛盾,让开发专注于开发,运维专注于运维,不要被环境所打扰。
- Docker 彻底释放了虚拟化的威力,极大降低了计算机资源供应的成本,Dokcer重新定义了程序开发测试、交付和部署过程,Docker提出了“构建一次,到处运行”的理念,让应用的开发、测试、部署和分发都变得前所未有的高效和轻松!
- Docker 是一种轻量级的操作系统虚拟化解决方案,Docker的基础是 Linux 容器(LXC)技术,在LXC的基础上Docker进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作Docker容器就像操作一个快速轻量级的虚拟机一样简单。
Docker 自开源后受到广泛的关注,Docker最早是基于 Ubuntu 开发的,但后续CentOS、Debian、Fedora等主流的 Linux 操作系统都支持Docker。
总结:简单地说,Docker是对软件和其依赖环境的标准化打包,应用之间相互隔离,共享一个 OS Kernel(解决了资源浪费的问题),可以运行在很多主流操作系统之上。但也需要澄清一下,Docker本身不是容器,Docker 只是管理容器的引擎。
8. 容器和虚拟机的区别
容器是将代码和环境的关系打包在一起的一个集合,而虚拟机是在物理层面上,分出来的一个操作系统。
多个容器可以运行在同一台物理服务器上,并共享一个操作系统的内核资源。多个虚拟机也可以运行在同一台机器上,每个虚拟机都需要一个完整的操作系统。
下图比较了Docker 和传统虚拟化方式的不同之处:

可见容器是在本地操作系统层面上实现虚拟化,直接复用本地主机的操作系统,不需要单独安装操作系统,而传统的虚拟化技术方式则需要单独安装每个虚拟机的操作系统。
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟级 |
硬盘空间 | 一般为几十个 MB | 一般为 10GB |
性能 | 接近原生 | 弱于原生 |
系统支持量 | 单机支持上千个容器 | 一般几十个 |
操作系统 | 与宿主机共享 OS | 宿主机OS上运行虚拟机OS |
9. 为什么使用 Docker
作为一种新型的虚拟化技术,Docker跟传统的虚拟化方式相比具有众多的优势。
- Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多
- Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器
- 容器除了运行其中的应用外,基本不消耗额外的系统资源,使得应用的性能很高。传统虚拟机方式运行 10个完全不同的应用可能我们会起10个虚拟机来部署,而Docker只需要启动 10个隔离的应用即可。
- Docker 可以更快速的交付和部署,大量地节约开发、测试、部署的时间,对开发和运维人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。
- 更高效的虚拟化,Docker容器的运行不需要额外的 hypervisor 支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。
- 更轻松的迁移和扩展,Docker容器几乎可以在任意的平台上运行,包括物理机,虚拟机,公有云,私有云,个人电脑,服务器等,这种兼容性可以让用户轻松地把一个应用程序从一个平台直接迁移到另一个平台。