容器技术的发展简史概述和相关产品简介
Posted 架构设计模式
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了容器技术的发展简史概述和相关产品简介相关的知识,希望对你有一定的参考价值。
容器是轻量级的操作系统级虚拟化,容器技术可以实现在一个资源隔离的进程中运行应用及其依赖项。同时容器技术也可以把运行应用程序所必需的组件都将打包成一个镜像并可以复用。
1. 容器的发展史
容器技术最早可以追溯到1979年UNIX系统中的chroot,当初是为了方便切换root目录,为每个进程提供了文件系统资源的隔离,这也是OS虚拟化思想的起源。
2004年原SUN公司发布了Solaris Containers。Solaris Containers包含了系统资源控制和zones提供的二进制隔离,Zones 作为在操作系统实例内一个完全隔离的虚拟服务器存在。2005 年SWsoft公司发布了OpenVZ,OpenVZ通过Linux 内核来提供虚拟化、隔离、资源管理和检查点。2006 年Google 发布了 Process Containers,Process Container 记录和隔离每个进程的资源使用(包括CPU、内存、硬盘I/O、网络等),后改名为cgroups(Control Groups)。2008年出现了第一个比较完善的LXC容器技术,基于已经被加入内核的cgroups和Linux namespaces 实现。LXC能运行在任意vanila内核的Linux上。2011年,CloudFoundry发布了Warden。Warden可以工作在任何操作系统上,作为守护进程运行,还提供了管理容器的API。2013年Google公司建立了开源的容器技术栈lmctfy,Google开启这个项目是为了通过容器实现高性能,高资源利用率,同时接近零开销的虚拟化技术。2015年Google将lmctfy的核心技术贡献给了 libcontainer。
2013年Docker诞生,Docker最初也用了LXC,后来才用 libcontainer 替换了 LXC。和其它容器技术不同的是,Docker 围绕容器构建了一套完整的生态,包括容器镜像标准、容器Registry、REST API、CLI、容器集群管理工具Docker Swarm等。2014年CoreOS创建了rkt,为了改进Docker在安全方面的缺陷,重写的一个容器引擎,相关容器工具产品包括:服务发现工具etcd和网络工具flannel等。2016年微软公司发布基于Windows 的容器技术Hyper-V Container,Hyper-V Container原理和Linux下的容器技术类似,可以保证在某个容器里运行的进程与外界是隔离的,兼顾虚拟机的安全性和容器的轻量级。Docker是目前比较主流的开源的容器实现工具。
2. 容器技术概述
(1)容器技术定义
容器是轻量级的操作系统级虚拟化,实现应用程序及其依赖项运行在一个资源隔离的进程中。运行应用程序所必需的组件都将打包成一个镜像并可以复用。执行镜像时,容器运行在一个隔离环境中,并且不会共享宿主机的内存、CPU 以及磁盘,这就保证了容器内进程不能监控容器外的任何进程。
IBM对于容器技术的准确描述如下:容器有效地将单个操作系统管理的资源划分到孤立的组中,以便更好的在孤立的组之间平衡有冲突的资源使用需求。与虚拟化相比,这样既不需要指令级模拟,也不需要即时编译。容器可以在核心CPU本地运行指令,而不需要任何专门的解释机制。此外,也避免了准虚拟化(paravirtualization)和系统调用替换中的复杂性。
(2)容器解决的问题
容器解决的问题:
快速启动——容器技术只是对部分而非整个物理机资源进虚拟化,占有资源小,故基于容器技术的服务应用可以快速启动。
服务组合——采用容器的方式进行部署,由于不同服务封装在对应的容器中,可使用一些脚本使这些容器按照功能要求实现相互协作。故整个系统会变得易于组合。
易于迁移——由于容器技术在不同主机上运行服务提供一个轻便的、一致的格式。该容器格式的标准化加快交付体验,允许用户方便地对工作负载进行迁移,避免局限于单一的平台提供商。
(3)容器的优点和缺点
容器的优点
敏捷环境——容器技术最大的优点是创建容器实例比创建虚拟机示例快得多,容器轻量级的脚本可以从性能和大小方面减少开销。
提高生产力——容器通过移除跨服务依赖和冲突提高了开发者的生产力。每个容器都可以看作是一个不同的微服务,因此可以独立升级,而不用担心同步。
版本控制——每一个容器的镜像都有版本控制,这样就可以追踪不同版本的容器,监控版本之间的差异等等。
运行环境可移植——容器封装了所有运行应用程序所必需的相关的细节比如应用依赖以及操作系统。这就使得镜像从一个环境移植到另外一个环境更加灵活。比如,同一个镜像可以在 Windows 或 Linux 或者开发、测试或 stage 环境中运行。
标准化——大多数容器基于开放标准,可以运行在所有主流 Linux 发行版、Microsoft 平台等等。
安全——容器之间的进程是相互隔离的。这样其中一个容器的升级或者变化不会影响其他容器。
容器的缺点
复杂性增加——随着容器及应用数量的增加,同时也伴随着复杂性的增加。在生产环境中管理如此之多的容器是一个极具挑战性的任务,可以使用 Kubernetes 和 Mesos 等工具管理具有一定规模数量的容器。
原生 Linux 支持——大多数容器技术基于 Linux 容器(LXC),这样基于 Microsoft 环境中的运行容器略显笨拙,并且日常使用也会带来复杂性。
不成熟——容器技术在市场上是相对新的技术,需要时间来适应市场。
(4)容器的应用场景
容器技术应用场景,容器应用场景总结为持续集成持续交付、运维自动化、开发测试环境交付和微服务,这四个场景中容器的具体作用、实现和遴选指标,是客户最最关心的问题。
PaaS平台建设——容器技术可以解决PaaS平台对弹性、高可用、性能、监控、日志、版本更新等的实现方式的不同而架构不同的问题。容器是以应用为中心的虚拟化环境,与编程语言、技术栈无关,比传统PaaS灵活,对应用的支撑也比底层平台多,可以发挥微服务架构的优势。同时,容器是基于轻量级虚拟化的技术,天生具有高密度的特性,可以更加高效地使用资源。
软件定义数据中心——软件定义数据中心负责将存储、计算、网络资源依据策略进行自动化调度与统一管理、编排和监控,同时根据用户需求形成不同的服务并提供计费等功能。容器技术可充分利用底层的各项计算、存储和网络资源,灵活构建容器应用,实现具备应用轻量级的容器承载能力、应用集群的松耦合和资源动态弹性伸缩的能力、实现可视化运维和自动化管控的能力、实现平台自动化部署和升级的能力,从而解决了容器平台对基础设施资源调用的需求,容器平台将数据中心转化成为一个更加灵活高效的业务应用平台,其开放性和兼容性契合了数据中心对异构、大规模、可移植、互操作等方面的需求,容器技术为云计算的实施提供了强有力的支撑。
容器即服务——容器技术三个方面的优势可以有助于解决传统IaaS面临的问题。首先,容器的本质是一种操作系统级别的虚拟化,启动一个应用容器其实就是启动一个进程,因此使得容器占用空间小、资源利用率高、本身非常轻,执行起来效率较高。这些是容器技术与传统虚拟机技术的最大差别。其次,容器技术使用镜像方式能够将应用程序和它依赖的操作系统、类库以及运行时环境整体打包,统一交付,使得运维压力大大降低。最后,容器技术与底层所使用的平台无关,容器可以在Linux平台各发行版上兼容,这意味着应用架构一旦转换为容器化并且迁移部署之后,就可以在任何云平台之间无缝迁移。
持续集成和发布(CI/CD)——将容器技术引入到开发和运维环节具有以下几个方面的优势:一是提供了交付环境一致性。从开发到运维的工作流程中,由于基础环境的不一致造成了诸多问题,但通过使用容器技术在不同的物理设备、虚拟机、云平台上运行,将镜像作为标准的交付物,应用以容器为基础提供服务,实现多套环境交付的一致性;二是提供了快速部署。工具链的标准化将DevOps所需的多种工具或软件进行容器化,在任意环境实现快速部署。三是轻量和高效。与虚拟机相比,容器仅需要封装应用及相关依赖文件,更加轻量,提高资源利用率。因此企业通过容器技术进行DevOps的实践,可较好的缩短软件发布周期,提升产品交付迭代速度,提高生产效率。
3. Docker技术概述
Docker引擎的基础是Linux自带的容器(Linux Containers,LXC)技术。Docker是容器技术的一种实现,也是目前比较主流的开源的容器实现工具。
(1)Docker的优势:
启动非常快,秒级实现
资源利用率高,一台高配置服务器可以跑上千个docker容器。
更快的交付和部署,一次创建和配置后,可以在任意地方运行。
内核级别的虚拟化,不需要额外的hypevisor支持,会有更高的性能和效率
易迁移,平台依赖性不强
提供隔离性
实现高性能、超大规模的宿主机部署
(2)Docker 组件
组件包括:(1)客户端和服务端;(2)镜像;(3)Registry;(4)容器。如图3-28所示。
图3-28 Docker的构成部分
Docker的构成部分:
客户端和服务端——Docker是一个客户服务器架构的应用程序。Docker客户端只需向Docker服务器进程发出请求,服务器进程将完成所有的工作并返回结果。Docker服务器守护进程(Docker Daemon)有时也称为Docker引擎。
镜像——镜像是构建Docker世界的基石,也是Docker生命周期中的构建或者打包。镜像是基于联合文件系统的一种层式的结构,由于一系列指令一步一步构建出来,可以通过镜像来完成各种应用的部署。
容器——容器就是基于镜像启动起来的,容器中可以运行一个或者多个进程。容器就是在镜像的基础上,加入了可写层,进行执行环境。容器可以被启动、开始、停止、删除等操作,每个容器都是相互隔离的。
Registry——仓库,用于保存镜像。仓库分为两种:共有和私有。Docker公司运营的公共仓库叫做Docker Hub(hub.docker.com)。用户可以在Docker Hub注册账号,分享并保存自助机的镜像。用户也可以在Docker Hub上保存自己的私有镜像,也可以架设自己私有的仓库。
4. 其他容器产品
尽管Docker的大量应用让其成为了一个事实标准,但市场上的轻量级Linux虚拟化工具众多,Docker也只是众多竞争者中的一个。有很多选择,包括:
Commercially SupportedDocker Engine(CSDE)——Docker公司拥有扩展Docker的所有权。CSDE支持在Windows服务器上运行docker实例。
Rkt——rkt是“rocket”的简写,是由CoreOS开发的。rkt是Docker容器的主要竞争对手。
Solaris Containers——Solaris容器架构比Docker更早出现。
Microsoft容器——作为Linux的竞争对手,Microsoft Containers可以在非常特定的情况下支持Windows容器。
CRI-O 1.0 简介——Kubernetes 的轻量级容器运行时的容器。
Pouch——Pouch 是一款轻量级的容器技术,拥有快速高效、可移植性高、资源占用少等特性,主要帮助阿里更快的做到内部业务的交付,同时提高超大规模下数据中心的物理资源利用率。开源之后,Pouch 成为一项普惠技术。
以上是关于容器技术的发展简史概述和相关产品简介的主要内容,如果未能解决你的问题,请参考以下文章