PaaS项目中的打包系统实际是应用打包,因本地环境与云端环境不一致,用户须为每种语言、框架乃至每个版本的应用维护一个打好的包。而打包过程中,需要进行大量修改、配置、试错才能使本地应用运行环境和云端环境匹配。
还有另一个痛点,传统业务系统部署在虚拟机内,每个虚拟机都有一个完整的操作系统,仅仅为了运行一个应用,需要加载完整的镜像;应用增多时,操作系统自身消耗的资源会增加
一句话说就是:应用上云的过程很痛苦,传统虚拟化技术中操作系统的资源消耗大。容器正是解决该痛点应运而生的技术。它是一个轻量级的虚拟化技术,可以降低资源消耗,并且容器镜像可打包应用及其依赖,实现本地环境和云端环境的高度一致,打通应用从开发到测试之间的环境差异。
三、容器
1、容器与Docker的关系
说到容器,大家肯定会想到Docker,那么两者之间是什么关系呢?Docker 属于容器服务的一种,是一个开源的应用容器引擎。Docker 是 PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上,基于go语言并遵从 Apache2.0 协议开源。
简单说,Docker和openstack一样,是一个开发项目,只不过被广泛使用以至于人们提到云平台操作系统就想到openstack,提到容器就想到Docker一样。
2、Docker概念
Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。
3、容器VS虚拟机
容器在Linux上本地运行,并与其他容器共享主机的内核。它运行一个离散进程,不占用任何其他可执行文件更多的内存,从而使其轻巧。
对比之下,虚拟机(VM)运行的guest操作系统,并通过虚拟机监视器与虚拟资源管理软件对主机资源进行分配。通常,VM会产生大量开销,超出了应用程序实际上所消耗的开销。
简单总结容器与虚拟机之间的区别:
4、Docker Engineer介绍
我们平时谈论的Docker主要指容器引擎,即Docker engine。它是一个Client/Server架构的应用程序。Docker engine主要组件有3部分:服务端、客户端、API。
服务端是一个长期运行的程序,称为daemon进程。Docker daemon用于创建个管理docker对象,如容器镜像、容器、网络、卷。
客户端(docker CLI):我们可以通过CLI,使用D脚本或直接的CLI命令与Docker daemon交互。
一个REST API:Client可以用它来与daemon进程通信交互,两者之间通信的桥梁。
5、Docker的架构
前面提到,Docker使用客户端-服务器架构。Docker 客户端与Docker 服务端进程进行对话。Docker客户端和守护程序可以在同一系统上运行,两者使用REST API进行通信。
a)Docker Client:Docker Client一般通过Docker command来发起请求。在用户界面,支持用户与Docker Daemon之间通信。
b)Docker daemon:功能就是接收客户端发来的请求,并实现请求所要求的功能,同时针对请求返回相应的结果。Docker daemon是驱动整个Docker功能的核心引擎。在功能的实现上,Docker daemon涉及了容器、镜像、存储等多方面的内容,涉及多个模块的实现和交互。
c)Containers:
容器以镜像为基础,同时又为镜像提供了一个标准和隔离的运行环境。
Docker的容器就是“软件界的集装箱”,可以安装任意的软件和库文件,做任意的运行环境配置。开发及运维人员在转移和部署应用的时候,不需关心容器里装了什么软件,也不需了解它们是如何配置的。
d)Docker Image:与容器相对应,如果说容器提供了一个完整的、隔离的运行环境,那么镜像则是这个运行环境的静态体现。
e)Registry:一个存放镜像的仓库。Registry本身也是一个单独的开源项目,企业可使用Registry镜像搭建私有仓库。