虚拟化

虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。

虚拟化技术种类很多,例如:软件虚拟化、硬件虚拟化、内存虚拟化、网络虚拟化(vip)、桌面虚拟化、服务虚拟化、虚拟机等等。

了解 Docker

Docker 是一个开源的应用容器引擎,基于 Go 语言开发。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 ios 系统中的 app),更重要的是容器性能开销极低。

Docker 的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的 APP(可以是一个 WEB 应用或数据库应用等等)及其运行环境能够做到”一次封装,到处运行”。

为什么选择 Docker?

  • Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性
  • 可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间
  • 避免公用的服务器,资源会容易受到其他用户的影响。——隔离性
  • 善于处理集中爆发的服务器使用压力;——弹性伸缩,快速扩展
  • 可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况
  • 使用 Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署

Docker 应用场景

  • Web 应用的自动化打包和发布
  • 自动化测试和持续集成、发布
  • 在服务型环境中部署和调整数据库或其他的后台应用

使用 Docker 可以实现开发人员的开发环境、测试人员的测试环境、运维人员的生产环境的一致性。

Docker 与虚拟机

传统虚拟机

infrastructure:基础设施,如个人电脑,数据中心服务器

Hypervisor:又称虚拟机监视器(英语:virtual machine monitor,缩写为 VMM),检点理解为虚拟机管理系统,如 VMWare

Guest Operating System:客户操作系统,这里指的就是虚拟出来的系统,如 CentOS

传统虚拟机技术基于安装在主操作系统上的虚拟机管理系统(如:VirtualBox 和 VMWare 等),创建虚拟机(虚拟出各种硬件),在虚拟机上安装从操作系统,在从操作系统中安装部署各种应用。

Docker

Host Operating System:主操作系统,如电脑上运行的 Windows

Containerized Applications:应用容器化

Docker 容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统虚拟机则是在硬件层面实现虚拟化。与传统的虚拟机相比,Docker 优势体现为启动速度快、占用体积小。

简单来说: 容器和虚拟机具有相似的资源隔离和分配优势,但功能有所不同,因为容器虚拟化的是操作系统,而不是硬件,因此容器更容易移植,效率也更高。

Docker 组件

Docker 组成部分

Docker 是一个客户端-服务器(C/S)架构程序。

Docker 客户端只需要向 Docker 服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。Docker 提供了一个命令行工具 Docker 以及一整套 RESTful API。你可以在同一台宿主机上运行 Docker 守护进程和客户端,也可以从本地的 Docker 客户端连接到运行在另一台宿主机上的远程 Docker 守护进程。

名称说明
Docker 镜像(Image)Docker 镜像是用来创建 Docke 容器的模板。镜像是基于联合文件系统的一种层次结构,由一系列指令一步一步构建出来。
Docker 容器(Container)容器时独立运行的一个或一组应用。镜像相当于类,容器相当于类的实例。
Docker 客户端(Client)Docker 客户端通过命令行或者其它工具使用 Docker API 与 Docker 的守护进程通信。
Docker 主机(Host)一个物理或者虚拟的机器,用于执行 Docker 守护进程和容器。
Docker 守护进程是 Docker 服务器进程,负责支撑 Docker 容器的运行以及镜像的管理。
Docker 仓库 Docker Hub
(Registry)
Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub 提供了庞大的镜像集合供使用。用户也可以将自己本地的镜像推送到 Docker 仓库供其他人下载。

Docker 镜像与容器

镜像

镜像:类似虚拟机镜像 , 是一个特殊的文件系统

操作系统分为内核和用户空间。对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持。而 Docker 镜像(Image),就相当于是一个 root 文件系统。

Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。 镜像不包含任何动态数据,其内容在构建之后也不会被改变。

容器

容器:类似 linux 系统环境,运行和隔离应用。是镜像运行时的实体

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等 。

Docker 仓库

Docker 用 Registry 来保存用户构建的镜像。Registry 分为公共和私有两种。

Docker 公司运营公共的 Registry 叫做Docker Hub。用户可以在 Docker Hub 注册账号,分享并保存自己的镜像。