9个Q&A让你快速知道Docker到底是什么

jopen 5年前

  不论是 Google、Amazon、Microsoft、VMware 都纷纷拥戴,加入 Docker 和 Container 所掀起的新时代云端虚拟化行列,这两项技术成为了 IT 界的新趋势。Docker 和 Container 到底是什么?以下 9 个Q&A告诉你。

  以下为原文:

  Q1Container技术和服务器虚拟化是一样的技术吗?

  A:不是。两者虽然都属于虚拟化的技术,目标都是为了将一套应用程序所需的执行环境打包起来,建立一个孤立环境,方便在不同的硬件中移动,但两 者的运作思维截然不同。简单来说,常见的传统虚拟化技术如 vSphere 或 Hyper-V 是以操作系统为中心,而 Container 技术则是一种以应用程序为中心的虚拟化技术。

  传统虚拟化技术从操作系统层下手,目标是建立一个可以用来执行整套操作系统的沙盒独立执行环境,习惯以虚拟机(Virtual Machine)来称呼。而 Container 技术则是直接将一个应用程序所需的相关程序代码、函式库、环境配置文件都打包起来建立沙盒执行环境,为了和传统虚拟化技术产生的虚拟机区 分,Container 技术产生的环境就称为 Container。

  Q2:一般常见的虚拟机和Container有何不同?

  A:最明显的差别是,虚拟机需要安装操作系统(安装 Guest OS)才能执行应用程序,而 Container 内不需要安装操作系统就能执行应用程序。Container 技术不是在 OS 外来建立虚拟环境,而是在 OS 内的核心系统层来打造虚拟执行环境,透过共享 Host OS 的作法,取代一个一个 Guest OS 的功用。Container 也因此被称为是 OS 层的虚拟化技术。

  Q3:为何Container是轻量级虚拟化技术?

  A:因为 Container 技术采取共享 Host OS 的作法,而不需在每一个 Container 内执行 Guest OS,因此建立 Container 不需要等待操作系统开机时间,不用 1 分钟或几秒钟就可以启用,远比需要数分钟甚至数十分钟才能开启的传统虚拟机来的快。

  Q4Container技术是全新的技术吗?

  A:不是,早在 1982 年,Unix 系统内建的 chroot 机制也是一种 Container 技术。其他如 1998 年的 FreeBSD jails、2005 年出现的 Solaris Zones 和 OpenVZ,或像是 Windows 系统 2004 年就有的 Sandboxie 机制都属于在操作系统内建立孤立虚拟执行环境的作法,都可称为是 Container 的技术。

  直到 2013 年,dotCloud 这家 PaaS 服务公司开源释出了一套将 Container 标准化的平台 Docker,大受欢迎,所以,dotCloud 决定以 Docker 为名成立新公司力推。

  Q5Docker如何实现Container标准化?

  A:Docker 采用了 aufs 文件系统来设计一个可以层层堆栈的 Container 映象文件,将 Container 内的所有程序(包括应用程序、相关函式库、配置文件),都打包进 Docker 映象档,并且提供了一个 Dockerfile 配置文件来记录建立 Container 过程的每一个步骤包括参数。只要在任何支持 Docker 平台的环境中,就可以从这个映象档来建立出一个一模一样的 Container 来执行同一个应用程序。如此一来,应用程序等于是可以透过 Docker 映象檔,或甚至只需要 Dockerfile,就能将程序执行环境带着走,移动到任何支持 Docker 的环境中。Docker 公司也释出 API,可以用来控制所有的 Container 相关指令,任何人只要使用同一套 Docker,就等于有了同一套管理和建立 Container 的方法,也就等同于将 Container 运用标准化了。

  Q6:一个Container映象档内可以安装多少应用程序?

  A:一个 Container 的映象档内可以安装多支程序,例如同时安装 Ubuntu、Apache、MySQL、Node.js、Ruby 等。不过,Docker 官方建议,一只程序安装在一个 Container 内,再把这些 Container 迭起来提供一个完整的服务。

  Docker 称这是一种 Microservices(微服务)的新软件架构,将组成一个应用系统的每一个 Stack,拆解成许多小型服务,例如 Apache 服务、MySQL 服务、Node.js 服务、Ruby 服务,每一个服务都是包在 Container 里的一只程序,例如 MySQL 服务就是部署在 Container 内的 MySQL。

  这么做的好处是可以建立一个松散耦合的弹性应用程序架构,也能轻易地抽换其中一个 Container,例如要升级 MySQL,只需要重载新版 MySQL 的 Container 映象文件,就可以完成数据库升级,不用将整套应用系统停机。

  Q7Container内不是不需要OS,为何需要OS的基础映象档?

  A:OS 基础映象档的用途是让 Container 拥有这 OS 的文件系统,例如使用 ubuntu 基础映象档就可以让 Container 建立 ubuntu 的根目录架构,而不是用来执行一个 OS 执行实例。

  Q8DockerDevops有何帮助?

  A:因为 Docker 透过 Dockerfile 来记录建立 Container 映象文件的每一个步骤,可以将建立应用程序执行环境的过程和配置参数,完整地记录下来。开发人员和维运人员之间可以利用 Dockerfile 来沟通对执行环境的讨论。甚至结合版本控制服务如 GitHub,可以让 Dockerfile 具备版本控制功能,能将基础架构程序化(Infrastructure as code)来管理。

  Q9:可以在Windows Server环境中执行Docker吗?

  A:还不行。目前 Docker 只能在 Linux 平台上执行,但是微软 10 月中刚宣布要在下一波 Windows Server 改版时内建 Docker 引擎,未来同一份 Docker 映象档能否跨 Linux 和 Windows OS,还需待微软揭露更多细节才能得知。