容器为何物,为什么它对OpenStack很重要?

本文讲的是容器为何物,为什么它对OpenStack很重要,【编者的话】本文主要介绍了容器的发展、容器技术、容器类型、Docker、Open Container Initiative、微服务以及OpenStack中容器的应用。

容器现在正经历着一次重生,部分原因是由于云计算的发展。

容器化不是一个革命性想法——容器技术已经存在很多年并且被大量应用程序所使用,但现在,容器几乎不考虑系统体结构。

今天,相信很多人都听说过Docker。一年多以来,很多公司都在评估Docker,也有很多公司想要使用Docker,但是很少公司真正把Docker应用在生产环境中。那这一年发生了什么变化呢?

Docker让容器化变得更加简单。

在Docker出现之前,运行容器需要成群的骇客,需要对整个系统有深入的理解,还需要一定的勇气。进程隔离或者网络堆栈是存在已久的一些技术,想想FreeBSD中的Jails或者其他类似的工具。但现在有了Docker,只需要使用(docker)命令就能在几秒钟内让一些东西运行起来。

即时满足感不是Docker成功的唯一原因。大量免费应用程序的镜像能够吸引很多想要快速部署微服务以达到更大体系架构的人,但这些人不希望每次都重新部署虚拟化堆栈。

事实上,避免了虚拟化堆栈,相对于虚拟机几分钟的启动时间,容器能够在数秒之内启动,这加快了整个基础设施的部署。

当然,容器也不是完全没有问题,例如安全性和其他一些不够成熟技术带来的问题。在关键系统上运行容器之前这些问题都需要被解决,但容器化对于所有人来说都是一种期待。

容器是什么,容器的结构是什么,它们和虚拟机的关系是什么

很多人将容器比作虚拟化,但是容器并不能运行所有的东西。例如,你不能在一个容器中设置iptables的防火墙规则;因为容器共享了宿主机的内核,它们不像虚拟机一样抽象化了硬件层。由于缺乏经验,在你开始使用容器之前,将容器看成一种“简单虚拟化”工具会给你的业务层埋下潜在的危险。

显然我们需要花时间更好地理解容器,那他们是什么?

容器是一种技术,这种技术让开发者下载一些基础镜像,载入他们的应用程序,拆分成几个组件,在持续集成系统上一一部署和测试,然后将这些组件注册到仓库中,让系统工程师在现存的基础设施上进行部署,然后发布给外界使用。

一个容器是操作系统层虚拟化特征的一种抽象。通过开拓这些特征,容器系统能够将进程和网络隔离成类似于系统沙盒的东西,因此将一个应用程序载入一个容器就好像把它从操作系统上隔离出来一样:在容器中的进程是独立的;它们看到的是自己的文件系统,也能够与外界进行通信等等。很多能够跑在虚拟机里的应用程序也能够跑在容器里面。

容器和虚拟机的不同在于解耦了虚拟化堆栈;虚拟机将内核到用户空间二进制文件与库文件再到应用程序本身的一切都压入了堆栈中进行隔离和独立存放。而容器管理程序则让容器使用相同的内核,共享相同的用户空间二进制文件,共享其他的库文件,然后让应用程序直接运行在这些层上。

一个镜像可以作为其他镜像的Base。在Docker中,在一个镜像之上构建新镜像来获得功能结果非常正常。你也许会在一个Ubuntu镜像上添加Apache 2.4 web服务器来构建一个基于Web的微服务,然后生成新的镜像。

镜像是容器运行的基础,你需要在镜像(building block)上启动一个容器(runtime)。镜像中包括了容器的应用程序,类似于一个快照但是还具备两个额外的特征。首先,它们在用户空间文件系统之上进行构建,能够进行堆叠和共享一些内容。其次,它们可移植。这就允许用户在不同的系统上使用相同的镜像,重新利用这些镜像或者通过公共仓库提供给其他用户使用,并且能够轻松地更新这些镜像,然后存放到任何地方。

容器类型

最开始的时候是chroot。Chroot()是*NIX操作系统内核的一个系统调用,用来改变当前运行进程的root目录。进程运行在chroot jail(环境名称)上并不知道真实文件系统的root目录,但知道user choice的表层root目录。

这个函数能够让你隔离应用程序,让进程将其他目录视为根目录,例如将 /mnt/root 视为 / 。这就意味着应用程序只能看到 /mnt/root 上的文件,因此构建一个完整的环境来运行这个应用程序需要 /mnt/root 目录下构建软件完整目录树的操作权。包括存放二进制文件的 /bin 目录,存放用户空间程序与库文件的 /usr 目录,存放配置的 /etc 目录等等。这些操作没那么容易,特别是对于更加复杂的应用程序来说,就更难了。

LXC是历史上第一个试图普及容器化技术的工具。和Linux容器生态系统的其他工具一起,LXC成为了容器化系统中被广泛采用的工具。它完成了一套系统API让Linux内核的容器特征能够被用户层使用:在不脱离Linux标准下通过共享内核,LXC在chroots和虚拟机之间构建了一个体系结构。

Docker

Docker是最具有吸引力的一种容器技术,它易于理解,可快速启动,运行方式简单,同时带来了容器编排工具的一个巨大生态系统。

从工程角度,Docker通过API实现,它有自己的服务端(daemon),命令行客户端以及从注册中心到精美UI界面等大量可以使用的工具。

Docker的强大在于之前提到的chroot、进程分组、进程隔离等功能都可以通过它的一些命令来实现。在其他容器化技术中开发人员或者管理人员需要频繁手动操作的一些事情,例如拉取补丁、工具与部署等,在Docker中已经不在需要,因为所有的操作都封装在了命令行客户端工具 docker 中。

客户端和REST API都是与Docker服务端进行交互,它是可以远程访问的一个标准可接入守护进程,用来接收和处理所有的请求。这个守护进程负责在Docker宿主机之上操控镜像和容器,并已经通过IANA官方确认,将端口绑定到tcp/2375和tcp/2376。

Docker最初基于LXC,但现在放弃了LXC,而使用Libcontainer。Libcontainer通过GO完全重写了用来抽象Linux内核虚拟化机制的基础库和API。

Open Container Initiative的细节

随着Docker的成功,引发了更多类似产品的出现:CoreOS的Rkt、亚马逊的容器服务(Amazon Container Service)、Apcera的Kurma等等。这种分化发展不由让人担心容器技术领域的分裂,好在通过今年在旧金山举办的DockerCon15,这些组织已经开始共同努力,期望为容器创建统一的格式。这就是Open Container Initiative的由来,它基于Linux基金会,致力于为容器镜像和容器的运行制定标准化。通过Open Container规定格式创建的容器可以在不同的生态环境中共存。Open Container Initiative的成员包括了所有的容器参与者,例如亚马逊(Amazon)、CoreOS、谷歌、Oracle等等,当然也包括Docker。

Open Container的规格说明书(github地址为:https://github.com/opencontainers/specs)还在制定过程中,鼓励所有的组织或者个人都可以参与其中。到目前为止依据不同平台和内容、工业级别交付流程以及自动化最小需求,规格说明书已经定义了一些容器的统一接口和标准。支持Open Container的所有企业将完全依赖这些规格说明书来制作容器。

同时,开发RunC运行库(github地址为:https://github.com/opencontainers/runc)也是为了给各种容器提供统一运行库命令行工具的顶级封装器(而不是使用专有的命令,例如Docker的 docker 或者Rocket的 rkt)。

微服务

随着云计算的不断发展该利用容器做什么?在云计算中我们能看到的的微服务的不断发展。

在云上,整体的应用程序开发已经是过去的事情了,新的范例称为微服务体系结构。利用微服务,庞大的应用程序可以根据其诸多的功能进行解耦,分成多个微小且只有单一目的的服务,这些服务之间通过规定的接口进行通信,例如API。微服务被称为云计算中的乐高积木玩具。

在许多方面,容器都是实现微服务的一种杰出的技术:每一个容器化的微服务具有唯一的角色(数据库、队列、web服务器),然后使用容器编排工具(在许多容器开发生态系统中是非常有用的)使所有的容器相互通信来组装成整个应用程序。

上述方式有很多好处:可组合性、更快的工作流、功能的分离、可维护性和可升级性。进一步来讲,对微服务框架进行扩容变得更加容易。在不影响系统其他功能的前提下,微服务能够更加快速、更加容易地置换到更加高效的对等服务上,或者是当遇到问题时进行回滚处理。多种不同的技术都可以用来分离微服务,不同的团队可以根据自身手头上的任务来选择更加合适的技术。

一些大公司,像Amazon或者Netflix,在生产环境中已经有了一些基于微服务的应用程序。

因此,我们所具备的是借助容器技术能够在云环境上实现一种完美的程序设计范式,即微服务。

总结

对于软件程序和依赖关系来说,容器是一种轻量的可移植的工具。这么说看起来有些繁琐,但是容器真的改变了我们开发、部署和运行软件程序的方式。

Docker的发展是令人惊讶的,容器与云基础架构的结合也受到越来越多的关注。事实上,OpenStack有三个工程的核心组件都和容器有着密切关系:Kolla使用容器化服务来部署OpenStack、Murano使用Kubernetes提供一种简单的方式来部署容器化应用程序以及Magnum为容器或者“容器即服务”提供了完整的编排系统。

在随后的文章中,我们将会着重讲述如何通过使用OpenStack或者其他一些环境来构建你自己的容器化应用程序。最后问一句,你在使用容器吗?你想要学习容器中的什么呢?

原文链接:What are containers, and why do they matter to OpenStack?(翻译:肖远昊)

原文发布时间为:2015-10-18 

本文作者:xiaoyh

本文来自合作伙伴DockerOne,了解相关信息可以关注DockerOne。

原文标题:容器为何物,为什么它对OpenStack很重要?

时间: 2024-10-29 10:22:26

容器为何物,为什么它对OpenStack很重要?的相关文章

DockOne微信分享(一二八):容器化部署OpenStack的正确姿势

本文讲的是DockOne微信分享(一二八):容器化部署OpenStack的正确姿势[编者的话]当前,以OpenStack为代表的IaaS开源技术和以Docker为代表的PaaS/CaaS容器技术日益成熟,二者如何强强联合,一直是业界颇为关心的焦点领域.本次分享主要是和大家交流基于Docker容器运行和部署OpenStack.那么,安装OpenStack都有哪些方法呢?对于很多刚接触OpenStack的新人而言,安装无疑是一大挑战,同时也直接提高了学习OpenStack云计算的技术门槛. [3 天

红帽谈基于OpenStack和Kubernetes的容器管理的未来

本文讲的是红帽谈基于OpenStack和Kubernetes的容器管理的未来,[编者的话]OpenStack是搭建私有云平台的事实标准:而Kubernetes作为谷歌集群管理系统Borg的开源版本,在容器集群管理方面前景光明.本文重点介绍了红帽在深度整合OpenStack和Kubernetes的尝试. 这个星期,在波特兰召开的OSCON 2015会议上,我们同谷歌以及其他成员一起庆祝了Kubernetes 1.0的发布以及CNCF(Cloud Native Computing Foundatio

在私有云和混合云中使用OpenStack容器服务

基于容器的虚拟化会影响IT的所有部分,包括云软件堆栈. 因此,OpenStack社区开发了一系列服务模块,使得在基于OpenStack的私有云或混合云上打开运行密集打包的容器实例成为可能. Magnum是OpenStack容器箱项目,已经存在两年了.它被认为是运行容器软件(例如Docker Swarm.Kubernetes和Apache Mesos)的一种方式,并允许机构在OpenStack上编排容器.Magnum是一个灵活的工具,例如,允许使用Swarm的OS镜像在裸机或虚拟机上运行. Ope

从威胁到整合,容器将改变openstack的未来?

分享嘉宾简介:九州云99Cloud副总裁陈沙克,多年深耕于开源云计算平台Openstack技术,目前主要负责九州云99Cloud的产品.社区和研发. 从2010年发布到现在,就IaaS层面在目前的开源领域,Openstack已然成为一个代名词.在这期间,Openstack也曾因为种种原因发生过一些调整和改变,而容器的出现,也对Openstack造成了革命性的影响. 一.OpenStack 重要发展历程 在2013年基金会成立的时候, Rackspace将OpenStack的控制权交给基金会负责,

基于OpenStack和Kubernetes的容器管理未来

[原文编者的话] OpenStack是搭建私有云平台的事实标准;而Kubernetes作为谷歌集群管理系统Borg的开源版本,在容器集群管理方面前景光明.本文重点介绍了红帽在深度整合OpenStack和Kubernetes的尝试. 这个星期,在波特兰召开的OSCON 2015会议上,我们同谷歌以及其他成员一起庆祝了Kubernetes 1.0的发布以及CNCF(Cloud Native Computing Foundation)基金会的建立.其中,红帽.谷歌和其他一些公司都是CNCF基金会的创始

不看不知道,容器化OpenStack的10个好处

1.升级 这个其实大家都可以想到,容器最大的特点,就是升级.企业使用OpenStack,最大的一个顾虑,就是升级.尤其在OpenStack 1年两个版本下,不断的有新的功能的需求的情况下,如果不能升级,其实是很痛苦.尤其在企业的迅速发展的过程中. 容器化的OpenStack,升级有多么简单呢?其实就是删掉容器,换上新的容器,用户基本是无感知的状态下完成. 升级子所以很困难,有一个很现实的原因,线上环境,很难模拟,升级验证测试很难进行.当采用容器化以后,我们很容易模拟出一个线上环境,进行升级测试,

不看不知道,容器化 OpenStack 的10个好处

1.升级 这个其实大家都可以想到,容器最大的特点,就是升级.企业使用OpenStack,最大的一个顾虑,就是升级.尤其在OpenStack 1年两个版本下,不断的有新的功能的需求的情况下,如果不能升级,其实是很痛苦.尤其在企业的迅速发展的过程中. 容器化的OpenStack,升级有多么简单呢?其实就是删掉容器,换上新的容器,用户基本是无感知的状态下完成. 升级子所以很困难,有一个很现实的原因,线上环境,很难模拟,升级验证测试很难进行.当采用容器化以后,我们很容易模拟出一个线上环境,进行升级测试,

OpenStack 基金会发布白皮书,推进容器技术

最近的一项调查显示,69% 的公司将会在下一年在生产环境中使用容器.为了更好地说明容器现下如此广受关注的原因,OpenStack 基金会近期发布了一篇名为<探索机遇:容器与 OpenStack>的白皮书. 来自 Mirantis.Rackspace 还有思科公司的研究者,在 18 页的白皮书中详细介绍了在 OpenStack 基础设施中容器的使用价值,简要概述了如何使用 OpenStack Nova 搭建容器托管环境.白皮书还介绍了 OpenStack Compute 项目.此外,白皮书还给出

OpenStack支持哪些容器编排引擎?

组织通常会使用容器编排工具,有时称为编排引擎,来部署.扩展和连接不同的容器技术组件.这些编排工具还帮助企业监控容器实例,从而缓解容器蔓延到整个企业. OpenStack Magnum模型--用于容器的OpenStack API,它支持三种主要容器编排引擎:Docker.谷歌Kubernetes和Apache Mesos. Docker是其中一个最具管理性.和流行的容器编排引擎,允许软件开发人员在一个镜像中打包并部署整个应用和他们的依赖,且可运行于Linux系统上.Docker还提供了如Docke