Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。
2.2.1 Docker基础与应用场景
Docker是近些年来最火热,甚至最具颠覆性的技术之一,它提出了“Build once,Run anywhere,Configure once,Run anything”, 为了更好的认识Docker,我们先来了解几个必备词汇:镜像,容器和仓库:
1、镜像(image):Docker镜像就是一个只读的模板,镜像可以用来创建Docker容器。Docker提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。镜像是一种文件结构。Dockerfile中的每条命令都会在文件系统中创建一个新的层次结构,文件系统在这些层次上构建起来,镜像就构建于这些联合的文件系统之上。Docker官方网站专门有一个页面来存储所有可用的镜像,网址是:index.docker.io。
2、容器( Container):容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的Linux环境,Docker利用容器来运行应用。
3、仓库:仓库是集中存放镜像文件的场所,仓库注册服务器(Registry)上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。目前,最大的公开仓库是Docker Hub,存放了数量庞大的镜像供用户下载。Docker仓库用来保存我们的images,当我们创建了自己的image之后我们就可以使用push命令将它上传到公有或者私有仓库,这样下次要在另外一台机器上使用这个image时候,只需要从仓库上pull下来就可以了。
Docker的运行离不开这几位的支持,Docker的成功也是拜几位所赐。也有人会误以为,Docker就是容器。其实Docker并非是容器,而是管理容器的引擎,Docker为应用打包、部署的平台,而非单纯的虚拟化技术。
目前来说,Docker的主要应用场景为:
面向开发人员:快速开发、交付应用程序。开发环境的机器通常内存比较小,之前使用虚拟的时候,经常需要为开发环境的机器加内存,而现在Docker可以轻易的让几十个服务在Docker中跑起来。
面向运维人员:降低运维成本。正如通过虚拟机来整合多个应用,Docker隔离应用的能力使得Docker可以整合多个服务器以降低成本。Docker通过镜像机制,将你的代码和运行环境直接打包成镜像,扔到容器启动即可。
面向企业:Docker本身就发家于PaaS,在Docker面向企业,是可以提供Paas层的实现;比如,扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
2.2.2 docker与虚拟化
说起虚拟化,大家首先想到的必然是VM一类的虚机。这类虚拟机完美的运行了另一套系统,能够使应用程序,操作系统和硬件三者之间的逻辑不变。这类虚机也面临着一定的问题,比如:启动时间太长,还有虚拟镜像体积太大等。相比之下,Docker的镜像一般只有二三百兆。并且启动速度超快,Docker的启动时间为毫秒级,下图可以更明显的说明这一点:
再从架构上说明下docker和虚拟化的区别:
从这两张图来看,似乎docker取代虚拟化已经是必然趋势,虚机在docker的对比下似乎显得笨重而不灵活,但是,传统的虚拟技术暂时还不会被取代,很多企业仍在使用虚拟机技术,原因很简单,他们需要一个高效,安全且高可用的构架。而且,年轻的Docker还没有经历足够的沙场考验,无论是应用管理还是运行维护方面,Docker都还处于发展与完善阶段。至少在目前Docker或者说容器技术和虚拟机并非简单的取舍关系,而是可以互相依赖,互相补充。