【Docker】进阶之路:(二)Docker简介
- 什么是 Docker
- Docker 由来与发展历程
- Docker的架构与组成
- Docker容器生态
- 容器核心技术
- 容器规范
- 容器平台技术
- 为什么使用Docker
- Docker的应用场景
什么是 Docker
简单地讲,Docker就是一个应用容器引擎,通过Docker,管理员可以非常方便地对容器进行管理。Docker基于Go语言开发,并且遵从Apache 2.0开源协议。
Docker提供了对容器镜像的打包封装功能。利用Docker,开发者可以将他们开发的应用系统以及依赖打包起来,放到一个轻量级的、可移植的容器中,然后发布到任何的Linux或者Windows上面。这样的话,Docker就统一了整个开发、测试和部署的环境和流程,极大地减少运维成本。
Docker完全使用沙箱机制,容器之间不会有任何的接口。
Docker 由来与发展历程
2010年,几个大胡子年轻人在美国旧金山成立了一家做PaaS(Platform-as-a-Service,平台即服务)平台的公司,并且起名为dotCloud。虽然dotCloud公司曾经获得过一些融资,但随着大厂商,包括微软、谷歌以及亚马逊等杀入云计算领域,dotCloud公司举步维艰。
幸运的是,上帝每关上一扇门,就会打开一扇窗。2013年初,dotCloud公司的工程师们决定将他们的核心技术Docker开源,这项技术能够将Linux容器中的应用代码打包,轻松地在服务器之间迁移。
令所有人意想不到的是,开源之后Docker技术风靡全球,于是,dotCloud公司决定改名为Docker,全身心投入到Docker的开发中。2014年8月,Docker公司宣布把PaaS业务dotCloud出售给位于德国柏林的PaaS服务提供商cloudControl,自此,dotCloud和Docker分道扬镳。
Docker的架构与组成
Docker采用C/S架构,即客户端/服务器架构。管理员通过Docker客户端与Docker服务器进行交互。Docker服务器端负责构建、运行和分发Docker镜像。用户可以把Docker的客户端和服务器部署在同一台机器上面,也可以分别部署在不同的机器上面,两者之间通过各种接口进行通信。
Docker的典型体系架构如图所示。
Docker容器生态
容器核心技术
容器核心技术是指能够让 container 在 host 上运行起来的那些技术。 这些技术包括容器规范、容器 runtime、容器管理工具、容器定义工具、Registry以及容器OS,下面分别介绍。
容器规范
容器不仅有 Docker,还有如 CoreOS 的 rkt等其他容器。为了保证容器生态的健康发展,保证不同容器之间能够兼容,包括Docker、CoreOS、Google等在内的若干公司共同成立了 Open Container Initiative(OCI) 的组织,其目是制定开放的容器规范。OCI已发布了两个规范:runtime spec 和 image format spec。 有了这两个规范,不同组织和厂商开发的容器能够在不同的 runtime 上运行,保证了容器的可移植性和互操作性。
容器平台技术
容器核心技术使得容器能够在单个 host 上运行,而容器平台技术能够让容器作为集群在分布式环境中运行。容器平台技术包括容器编排引擎、容器管理平台和基于容器的 PaaS。下面将介绍这几块内容。
容器编排引擎
基于容器的应用一般会采用微服务架构。在这种架构下,应用被划分为不同的组件,并以服务的形式运行在各自的容器中,通过 API 对外提供服务。为了保证应用的高可用,每个组件都可能会运行多个相同的容器。这些容器会组成集群,集群中的容器会根据业务需要被动态地创建、迁移和销毁。
这样一个基于微服务架构的应用系统实际上是一个动态的可伸缩的系统。这对我们的部署环境提出了新的要求,我们需要有一种高效的方法来管理容器集群,这就是容器编排引擎要负责的工作。
所谓编排(orchestration),通常包括容器管理、调度、集群定义和服务发现等。通过容器编排引擎,容器被有机地组合成微服务应用,以实现业务需求。
为什么使用Docker
Docker的应用场景
Docker提供轻量级的虚拟化服务。每个Docker容器都可以运行一个独立的应用。例如,用户可以将Java应用服务器Apache Tomcat运行在一个容器中,而MySQL数据库服务器运行在另外一个容器中。
目前,Docker的应用场景非常广泛,主要有以下几种。
- 简化配置
这是Docker的初始目的。Docker将应用程序代码、运行环境以及配置进行打包。用户在部署时,只要以该镜像为模板创建容器即可。实际上,这实现了应用环境和底层环境的解耦。 - 简化部署过程
Docker让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,即可实现虚拟化。
Docker改变了传统的虚拟化方式,使得开发者可以直接将自己开发的应用放入Docker中进行管理。方便快捷已经是Docker的最大优势,过去需要用数天乃至数周的任务,在Docker容器的处理下,只需要数分钟就能完成。 - 节省开支
另一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker改变了高性能必然高价格的思维定势。Docker与云计算机的结合,不仅解决了硬件管理的问题,也改变了虚拟化的方式。
Docker的广泛应用极大地降低了IT设施的运维成本。具体来说,主要体现在以下方面。
- 轻量级的虚拟化。与传统的服务器或者主机虚拟化相比,Docker实现了更加轻量级的虚拟化。这对于应用部署来说,可以减少部署的时间成本和人力成本。
- 标准化应用发布。Docker容器包含了运行环境和可执行程序,可以跨平台和主机使用。
- 节约启动时间。传统的虚拟主机的启动一般是分钟级,而Docker容器启动是秒级。
- 节约存储成本。以前一个虚拟机至少需要几个GB的磁盘空间,而Docker容器可以减少到MB级。