1. 虚拟化技术发展史
      1. 在虚拟化技术出现之前,如果我们想搭建一台服务器,我们需要做如下的工作

    -> 购买一台硬件服务器
    -> 在硬件服务器上安装配置操作系统
    -> 在操作系统之上配置应用运行环境
    -> 部署并运行应用

    1. 这种方式的缺点就是:

    -> 部署应用非常慢
    -> 需要花费的成本非常高(时间成本,服务器成本)
    -> 应用迁移码放,要将应用迁移,又得重复部署应用的过程;
    -购买服务器-安装操作系统-配置运行环境-部署应用

    1. 所以,为了解决这个问题,后续出现了虚拟化技术
    2. 虚拟化技术是什么?
      1. 虚拟化(Virtualization)是一种计算机资源管理技术,是将计算机的各种硬件资源,比如服务器,网络,CPU,内存及存储等,予以抽象和转换后呈现出一套新的硬件资源环境,在这一套新的硬件环境下可以安装我们的操作系统,部署我们的应用运行环境等,它打破计算机硬件资源不可切割的障碍,使我们可以比原本的计算机硬件资源结构更好的方式来组合应用这些资源。
    3. 虚拟化技术的分类
      1. 虚拟化一般分为:
        1. 硬件级虚拟化(hardware-level-virtualization)
        2. 操作系统级虚拟化(os-level-virtualization)
      2. 硬件级虚拟化是运行在硬件之上的虚拟化技术,它的核心技术是 Hypervisor,Hypervisor 是一种运行在基础物理服务器硬件之上的软件层,可以虚拟化硬件资源,例如:cpu,硬盘,内存资源等,然后我们可以通过在虚拟化出来的资源之上安装操作系统,这也就是所谓的虚拟机,像 VNWare,VirtualBox 等都是使用该技术

    image.png
    通过Hypervisor 层,我们可以创建不同的虚拟机,并且每个虚拟机都是分离,独立的,这样一来,我们就可以在一台硬件服务器和
    本地操作系统之上虚拟化出多个服务器,用来部署我们的应用;

    1. 虚拟化技术的优缺点

      1. 虚拟化技术的优点:
        一台物理服务器可以虚拟化出多个虚拟的服务器,让计算机资源得以充分利用;
      2. 虚拟化技术的缺点:
        1. 每创建一个虚拟机的时候,都会创建一个操作系统,这个操作系统会占用很多资源,这样无疑大大的增加了资源的消耗,当安装的虚拟机越多,资源消耗就越多。
        2. 环境兼容问题,开发时环境运行正常,部署到虚拟机环境测试则有可能发生错误。
    2. 容器技术的发展

      1. 基于硬件级虚拟化技术的缺点和不足,后续又发展出来了另一种虚拟化技术,即操作系统级虚拟化技术;
      2. 操作系统级虚拟化
        1. 是运行在操作系统之上的虚拟化技术,它模拟的是运行在一个操作系统上的多个不同进程,并将其封装在一个密闭的容器里面。该技术也称为容器化技术。
        2. 在容器化技术领域,Docker 是目前最流行的一种实现。Docker 发布于2013年,Docker 基于LXC 技术,LXC 是 linux 平台上的容器化技术实现。

    注:LXC 是 Linux Container 的简写,它是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,它与宿主机使用同一个内核,性能损耗小,这种技术是linux 提供的,但是知道 Docker 出世,该技术才被发挥出来。

    1. Docker的发展历史
      1. 2010年,几个年轻人在旧金山成立了一家做 Paas(Platform as a Service 平台及服务) 平台的创业公司,起名为 dotCloud ,并且还获的了创业孵化器 Y Combinayor 的支持,虽然 dotCloud 期间获得过一些融资,但随着it 巨头(微软,谷歌,亚马逊等)也杀入 PaaS平台,dotCloud 举步维艰
      2. 2013年,dotCloud 的创始人,28岁的 Solomon Hykes 做了一个艰难的决定;将dotCloud 的核心引擎开源,这项核心引擎技术能够将Linux 容器中的应用代码打包,轻松的在服务器之间迁移。
      3. 然而这个基于 LXC(Linux Container) 技术的核心管理引擎开源后,让全世界的技术人员感到惊艳,感叹这一切太方便了,也正是 dotCloud 的创始人这个决定让所有 it 巨头们也为之一颤。
    2. Docker是什么
      1. Docker 是一个开源的应用容器引擎,它基于 Google 公司推出的Go语言实现,项目代码托管在 GitHub 上进行维护;

    https://github.com/docker/docker-ce

    1. Docker 技术让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,打包好的容器可以发布到任何流行的LInux,服务器上运行,这样就可以解决开发环境与运行环境不一致的问题了,所以容器技术解决了开发和运维之间的矛盾,让开发专注于开发,运维专注于运维,不要被环境问题所打扰
    2. Docker 彻底释放了虚拟化的为例,极大降低了计算机资源供应的成本,Docker重新定义了程序开发测试,交付和部署过程,Docker 提出了“构建一次,到处运行”的理念,让应用的开发,测试,数据和分发都变得前所未有的高效和轻松。
    3. Docker是一种轻量级的操作系统虚拟化解决方案,Docker的基础是Linux 容器(LXC)技术,在LXC 基础上Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便, 用户操作Docker 的容器就像操作一个快速轻量级的虚拟机一样简单;Docker 自开源后受到广泛的关注,Docker 最早是基于Ubuntu开发的,但后续 CentOS, Debian ,Fedora 等主流的Linux 操作系统都支持 Docker;

    总结:简单的说,Docker 是对软件和其依赖环境的标准化打包,应用之间相互隔离,共享一个 OS Kernel (解决了资源浪费的问题),可以运行在很多主流操作系统上;但是也需要澄清一下,Docker 本身不是容器,Docker 只是管理容器的引擎

    1. 容器和虚拟机的区别
      1. 容器是将代码和环境的关系打包在一起的一个集合,而虚拟机是在物理层面上,分出来的一个操作系统;
      2. 多个容器可以运行在同一台物理服务器上,并共享一个操作系统的内核资源,多个虚拟机也可以运行在同一台机器上,但每个虚拟机都需要一个完整的操作系统

    Docker 和传统虚拟化方式的不同之处:
    image.png

    可见容器是在本地操作系统层面上实现虚拟化,直接复用本地主机的操作系统,不需要单独安装操作系统,而传统的虚拟化技术方式则需要单独安装每个虚拟机的操作系统
    image.png