关于容器,你应该提的13个问题及应该知道的答案

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介:
 
  当从一个计算环境转移到另一个计算环境时,容器是如何使软件可靠运行的问题的解决方案。以下是关于这个你需要了解的流行技术。

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的“容器作为虚拟机”策略。

这两种方法都有其优点,但重要的是,能够在虚拟化基础架构中使用容器而不是替换虚拟机,这往往是很有用的。

 
 
作者:佚名
来源:51CTO
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
Kubernetes 调度 Docker
Docker 是什么? 和 Kubernetes(k8s) 之间是什么关系?
Docker是将程序和环境打包运行的工具,提供统一的运行环境,解决跨平台部署问题。它基于基础镜像(包含操作系统和语言环境)构建,通过Dockerfile描述构建过程,并生成容器镜像。镜像存储在Registry中,通过pull/push操作分发。容器是从镜像解压出的独立运行实例,类似轻量级虚拟机,但共享宿主机内核。Docker与Kubernetes(k8s)关系:Docker解决单容器部署,Docker Compose管理多容器服务,Docker Swarm实现集群部署,而k8s是容器编排引擎,管理Docker等容器的调度和扩展。
1697 7
Docker 是什么? 和 Kubernetes(k8s) 之间是什么关系?
|
缓存 Linux 开发工具
CentOS 7- 配置阿里镜像源
阿里镜像官方地址http://mirrors.aliyun.com/ 1、点击官方提供的相应系统的帮助 :2、查看不同版本的系统操作: 下载源1、安装wget yum install -y wget2、下载CentOS 7的repo文件wget -O /etc/yum.
254877 0
|
11月前
|
运维 Kubernetes 负载均衡
Kubernetes有哪些优势
【10月更文挑战第18天】Kubernetes有哪些优势
350 1
|
监控 Cloud Native 持续交付
云原生架构:从理念到实践的全面解析
云原生架构已经成为现代软件开发和部署的核心理念。它不仅改变了传统的软件开发模式,还为企业提供了更高的灵活性、可扩展性和可靠性。本篇文章将深入探讨云原生架构的基本概念、关键组件以及实际应用案例,帮助读者更好地理解和应用这一先进的技术框架。
535 3
|
存储 边缘计算 人工智能
边缘计算系统逻辑架构:云、边、端协同,定义及关系
边缘计算系统逻辑架构:云、边、端协同,定义及关系
14296 1
边缘计算系统逻辑架构:云、边、端协同,定义及关系
|
存储 缓存 监控
快速掌握Redis优化要点,告别性能瓶颈!
# Redis优化指南 了解如何提升Redis性能,从读写方式(整体与部分)、KV size、Key数量、读写峰值、命中率、过期策略、平均穿透加载时间、可运维性、安全性等方面着手。选择合适的读写策略,如只整体读写或部分读写变更,优化KV size避免过大或差异过大,合理管理Key数量,应对不同读写峰值,监控命中率并持续优化,设置智能过期策略,减少平均穿透加载时间,确保高可运维性并强化安全性。一起探索Redis的性能潜力!
2681 5
java编写枚举校验类
java编写枚举校验类
212 0
|
存储 缓存 运维
带你读《云原生架构白皮书2022新版》——主要架构模式(上)
带你读《云原生架构白皮书2022新版》——主要架构模式(上)
1253 87
|
机器学习/深度学习 Java 网络架构
YOLOv8改进 | TripletAttention三重注意力机制(附代码+机制原理+添加教程)
YOLOv8改进 | TripletAttention三重注意力机制(附代码+机制原理+添加教程)
2028 0
|
存储 文件存储 对象存储
一文读懂温冷数据存储的技术选型
在温存储或者冷存储领域,通常都是追求低成本和高密度。在满足这两个条件的情况下,性能越高越好。但不管怎么说,冷存储或者温存储,都应是绿色节能的。
1144 1