Docker在2013年一炮而红,自那以后持续引起IT界的兴奋。
Docker提供的应用程序容器技术承诺将像几年前的虚拟化技术一样改变IT运营的方式。
以下是与该技术相关的13个最常见问题的答案。
什么是容器以及你为什么需要它们?
当从一个计算环境转移到另一个计算环境时,容器是如何使软件可靠运行的问题的解决方案。这可能是从开发者的笔记本电脑到测试环境,从预发布环境到产品,以及可能从数据中心的物理机到私有云或公共云中的虚拟机。
Docker的创始人Solomon Hykes说:“当支持软件的环境不相同时,会出现问题。你将使用Python 2.7进行测试,然后在生产中运行Python 3,然后会发生奇怪的事情。或者你将依赖某个SSL库的版本的行为,而后另一个版本将被安装。你会在Debian中运行测试,而在Red Hat上进行生产,然后各种怪异的事情发生了。”
他补充说:“不仅仅是不同的软件可能会导致问题。网络拓扑也可能不同,或者安全策略和存储可能不同,但软件必须在它上面运行。”
容器如何解决这个问题?
简单地说,一个容器由整个运行时环境构成:一个应用程序,加上它所有的依赖关系,库和其它二进制文件,以及运行它所需的配置文件,统统捆绑在一个包中。通过对应用程序平台及其依赖关系容器化,OS(操作系统)分布和底层架构的差异被抽象了出来。
容器和虚拟化有什么区别?
有了虚拟化技术,可传递的包可以是一个虚拟机,它包含一个完整的操作系统以及应用程序。运行三个虚拟机的物理服务器将有一个管理程序并且在它上面运行着三个独立的操作系统。
相比之下,一个用Docker运行三个容器化应用程序的服务器运行单个操作系统,并且每个容器与其他容器共享操作系统内核。操作系统的共享部分是只读的,而每个容器都有自己的挂载方式(即访问容器的方式)进行写入。这意味着容器更轻量级并且使用的资源远远少于虚拟机。
容器还有什么其它好处?
容器的大小可能只有几十兆字节,而具有自己的整个操作系统的虚拟机的大小可能是几千兆字节。因此,单个服务器可以托管的容器数量远超虚拟机。
另一个主要好处是,虚拟机可能需要几分钟才能启动其操作系统,并开始运行它们托管的应用程序,而容器化的应用程序几乎可以立即启动。这意味着容器可以在需要时以“即时”的方式实例化,并且在不再需要时可以消失,从而释放其主机上的资源。
第三个好处是容器化兼顾了更大的模块化。应用程序可以拆分为模块(如数据库、应用程序前端等等),而不是在单个容器内运行整个复杂的应用程序。这就是所谓的微服务方法。以这种方式构建的应用程序更易于管理,因为每个模块都相对简单,并且可以对模块进行更改而无需重新构建整个应用程序。因为容器非常轻便,所以只有在需要时单个模块(或微服务)才会被模块化,并可立即使用。
Dockers和容器有什么区别?
Docker已经成为容器技术的代名词,因为它在普及上最成功。但容器技术并不新鲜; 它已经以LXC的形式被集成到Linux超过10年了,并且FreeBSD监狱(FreeBSD jail),AIX工作负载分区(AIX Workload Partitions)和Solaris容器也提供了类似的操作系统级虚拟化。
有标准的容器格式吗?
早在2015年,一家叫做CoreOS的公司就制定了与Docker容器规范不同的App Container Image(ACI)规范,当时有这样一个风险,就是新流行的容器运动会与对手的Linux容器格式产生碎片化。
但同年晚些时候宣布了一项名为“开放容器项目(Open Container Project,OCP)”,后来更名为“开放容器计划(OCI)”。在Linux基金会的支持下运作,OCI的目的是为所有的平台开发容器格式并制定容器运行时软件的行业标准。OCP标准的起点是Docker技术,Docker向该项目贡献出其代码库约5%的代码,使项目可以顺利展开。
该项目的赞助商包括AWS、谷歌、IBM、惠普、微软、VMware、Red Hat、甲骨文、推特和HP以及Docker和CoreOS
为什么这些公司都要参与开放式容器计划?
OCI的想法是确保容器技术(如容器格式)的基本构成要素被标准化,以便每个人都可以利用它们。
这意味着组织可以专注于开发支持在企业或云环境中使用标准化容器所需的附加软件,而不是耗费资源开发竞争性容器技术。所需的软件类型包括容器编排和管理系统以及容器安全系统。
有没有免费的开源容器管理系统?
有,最有名和使用最广泛的免费且开源的容器管理系统可能是Kubernetes,它是一个起源于谷歌的软件项目。Kubernetes提供了部署、维护和扩展容器化应用程序的机制。
现存的有哪些商业容器管理解决方案?
Docker企业版也许是最有名的商业容器管理解决方案。它为在企业Linux或Windows操作系统和云提供商上运行的应用程序提供了一个集成的,经过测试和认证的平台。
但还有很多其它的,有几个值得注意的是以Kubernetes为核心的专有软件层。这类管理软件产品的例子有:
·CoreOS的Tectonic预封装了构建谷歌风格的基础设施所需的所有开源组件,并增加了其它商业功能,例如管理控制台,企业SSO集成以及企业就绪的容器注册服务(registry)Quay。
·Red Hat的OpenShift容器平台(Open Shift Container Platform)是一种内部部署的私有的平台即服务产品,建立在由Docker支持的应用程序容器核心,由Kubernetes在Red Hat Enterprise Linux的基础上提供编排和管理。
·Rancher Labs的Rancher是一种商业开源解决方案,可以在任何基础架构上轻松部署和管理生产中的容器。
容器有多安全?
很多人认为,容器比虚拟机安全性更低,因为如果容器主机内核存在漏洞,那么它可以提供一种进入共享它的容器的方法。管理程序也是如此,但由于管理程序提供远远少于Linux内核(通常实现文件系统,网络,应用程序进程控制等)的功能,因此它的攻击面更小。
但是在过去的几年里,为了增强容器的安全性开发了大量的软件。
例如,Docker(和其它容器系统)现在包括一个签名的基础架构,允许管理员签署容器镜像,以防止不可信的容器被部署。
然而,可信任的签名容器不一定可以安全运行,因为在签名后容器中的一些软件可能会被发现漏洞。因此,Docker和其它容器提供容器安全扫描方案,可以就容器镜像是否有任何可被利用的漏洞而通知管理员。
更专业的容器安全软件也被开发出来了。比如Twistlock,它提供的软件可以配置容器的预期行为和“白名单”进程,网络活动(如源和目标IP地址和端口),甚至是某些存储实践,以便可以标记任何恶意的或意外的行为。
另一家专业的容器安全公司Polyverse采用了不同的方法。它利用了这样一个事实,容器可以在几分之一秒内启动,以便每隔几秒在已知的良好状态中重新启动容器化应用程序,将黑客必须利用在容器中运行的应用程序的时间最小化。
哪一个Linux发行版适合用作容器主机?
如果Linux发行版的预期用途只是充当容器主机来运行容器,那么它们大多数都是功能上臃肿的。因此,很多Linux发行版本被设计为专门用于运行容器。
一些例子包括:
·Container Linux(以前的CoreOS Linux)—为容器而构建的第一个轻量级容器操作系统之一。
·RancherOS –由容器构建的简化的Linux发行版,专门用于运行容器。
·Photon OS - 最小的Linux容器主机,被优化在VMware平台上运行。
·Project Atomic Host - Red Hat的轻量级容器操作系统拥有基于CentOS和Fedora的版本,Red Hat Enterprise Linux中还有一个下游企业版本。
·Ubuntu Core - 最小的Ubuntu版本,Ubuntu Core被设计为用于物联网设备和大规模云端容器部署的主机操作系统
如果是Windows环境会怎么样?
除了在任何运行3.10(或更高版本)的Linux内核的Linux发行版上运行,Docker还可以在Windows上运行。
这是因为在2016年,微软在Windows Server 2016和Windows 10中引入了运行Windows容器的能力。这些是为Windows设计的Docker容器,并且它们可以在任何Docker客户端或微软的PowerShell中进行管理。
(微软还引入了Hyper-V容器,这些容器是运行在Hyper-V虚拟机中的Windows容器,用于增加隔离度。)
Windows容器可以部署在Windows Server 2016的标准安装中,精简的Server Core安装或Nano Server安装选项,专门用于在容器或虚拟机中运行应用程序。
除了Linux和Windows之外,Docker还在流行的云平台上运行,包括亚马逊的EC2,谷歌的 Compute Engine,微软的Azure和Rackspace。
容器最终会取代全面的服务器虚拟化吗?
由于一些重要的原因,这在可预见的未来不太可能。
首先,仍然有广泛的意见认为虚拟机比容器提供了更高的安全性,因为它们提供了增强的隔离级别。
其次,可用于编排大量容器的管理工具还不如管理虚拟化基础架构的软件(如VMware的 vCenter或微软的System Center)全面。对这类软件进行了大量投资的公司在没有充分理由的情况下不太可能放弃他们的虚拟化基础架构。
也许更重要的是,虚拟化和容器也开始被视为互补技术而不是敌对技术。这是因为容器可以在轻量级虚拟机中运行,以增加隔离度,进而提高安全性,并且因为硬件虚拟化可以更轻松地管理支持容器所需的硬件基础架构(网络、服务器和存储)。
VMware鼓励投资虚拟机管理基础架构的客户在其轻量级虚拟机上的Photon OS容器Linux发行版上运行容器,而这些轻量级的虚拟机可以在vCenter进行管理。这是VMware的“VM中的容器”策略。
但是,VMware还引入了所谓的vSphere集成容器(vSphere Integrated Containers ,VIC)。这些容器可以被直接部署到独立的ESXi主机,也可以像虚拟机一样被部署到vCenter Server。这是VMware的“容器作为虚拟机”策略。
这两种方法都有其优点,但重要的是,能够在虚拟化基础架构中使用容器而不是替换虚拟机,这往往是很有用的。