容器是软件的可执行单元,其中以常见方式打包应用程序代码及其库和依赖项,以便代码可以在任何地方运行,无论是在桌面、传统 IT 还是云上。
容器利用某种形式的操作系统 (OS) 虚拟化,其中可以使用操作系统内核功能(例如,Linux 命名空间和 cgroup、Windows 孤岛和作业对象)隔离进程,并控制这些进程可以访问的 CPU、内存和磁盘数量。
容器较小、快速且可移植,因为与虚拟机不同,容器不需要在每个实例中包含访客操作系统,而是可以直接使用主机操作系统的功能和资源。
容器最早出现在几十年前,如 FreeBSD Jails 和 AIX Workload Partitions 等版本,但大多数现代开发人员认为现代容器时代始于 2013 年,因为在那一年引入了 Docker。
战略应用程序现代化是转型成功的关键之一,可以提高年收入并降低维护和运行成本。
注册以获取有关 DaaS 的指南
一种更好地理解容器的方法是,了解它与传统虚拟机 (VM) 的区别。在传统的虚拟化中,无论是在本地还是在云中,都使用虚拟机管理程序虚拟化物理硬件。每个虚拟机包含访客操作系统、操作系统运行所需的硬件的虚拟副本以及应用程序及其相关的库和依赖项。
容器虚拟化操作系统(通常是 Linux),而不是虚拟化底层硬件,因此,每个单独的容器仅 包含应用程序及其库和依赖项。由于没有访客操作系统,容器非常轻便,因此快速且可移植。
要更深入地了解这种比较,请查看“容器与虚拟机:有什么区别?”。
容器的主要优点(尤其是与虚拟机相比)在于,它们提供一定程度的抽象,以使其轻便且可移植。它们的主要优点包括:
轻便:容器共享机器操作系统内核,而无需为每个应用程序实施完整操作系统实例,并使容器文件更小,资源消耗更少。容器较小(尤其是与虚拟机相比)意味着,容器可以快速启动,并更好地支持水平扩展的云原生应用程序。
可移植且独立于平台:容器附带所有依赖项,这意味着只需编写一次软件即可运行,而无需在笔记本电脑、云和本地计算环境中重新配置。
支持现代开发和架构:由于容器具有跨平台的部署可移植性/一致性并且较小,因此,非常适合现代开发和应用程序模式,例如 DevOps、无服务器和微服务,这些模式是使用常规代码部署以小幅增量构建的。
提高利用率:与之前的虚拟机一样,开发人员和操作员可以通过容器提高物理机的 CPU 和内存利用率。此外,由于容器还支持微服务架构,因此,可以更精细地部署和扩展应用程序组件。与由于单个组件难以承受其负载而必须扩展整个单体应用程序相比,这是一个有吸引力的替代选择。
在最近的 IBM 调查中,开发人员和 IT 高管提到了使用容器的很多其他好处。
下载完整报告:企业中的容器
容器正在变得越来越重要,尤其是在云环境中。很多组织甚至考虑将容器作为虚拟机的替代品,以作为其应用程序和工作负载的通用计算平台。但在这个广泛的范围内,一些关键的用例特别适合使用容器。
需要以不同方式设计和打包软件才能利用容器,该过程通常称为容器化。
对应用程序进行容器化时,该过程包括打包应用程序及其相关环境变量、配置文件、库和软件依赖项。打包结果是一个可以在容器平台上运行的容器映像。
使用 Kubernetes 进行容器编排
随着公司开始采用容器(通常作为现代云原生架构的一部分),单个容器的简单性开始与在分布式系统中管理数百个(甚至数千个)容器的复杂性发生冲突。
为了应对这一挑战,容器编排应运而生,以作为一种在整个生命周期中管理大量容器的方法,其中包括:
尽管创建了很多容器编排平台(例如 Apache Mesos、Nomad 和 Docker Swarm),但 Google 在 2014 年推出的开源项目 Kubernetes 迅速成为最受欢迎的容器编排平台,并且行业中的大多数企业将其作为标准化基础。
Kubernetes 允许开发人员和操作员通过 YAML 文件声明其整体容器环境的所需状态,然后 Kubernetes 完成建立和保持该状态的所有处理工作,其中包括部署指定数量的给定应用程序或工作负载实例、在应用程序发生故障时重新引导、负载均衡、自动扩展、零停机部署等活动。
Kubernetes 现在由云原生计算基金会 (CNCF) 运营,该基金会是与供应商无关的行业组织,并在 Linux 基金会的支持下运营。
随着容器作为常见的应用程序打包和运行方法不断发展,旨在适应和扩展生产用例的工具和项目生态系统也在不断增长。除了 Kubernetes 以外,容器生态系统中的两个最受欢迎的项目是 Istio 和 Knative。
istio
在开发人员使用容器构建和运行微服务架构时,管理问题不再局限于各个容器的生命周期注意事项,还涉及大量小型服务(通常被称为“服务网格”)如何连接和相互关联。创建 Istio 是为了让开发人员更轻松地应对与发现、流量、监控、安全等相关的挑战。
knative
无服务器架构也越来越受欢迎,尤其是在云原生社区中。例如,Knative 在将容器化服务部署为无服务器函数方面具有非常重要的价值。
无服务器函数可以“缩减到零”,而不是一直运行并在需要时做出响应(就像服务器一样),这意味着除非调用无服务器函数。否则,它根本不会运行。在将这种模式应用于数以万计的容器时,可以节省大量的计算能力。
Red Hat OpenShift on IBM Cloud 在公有和混合环境中使用 OpenShift,以提高速度、市场响应能力、可扩展性和可靠性。
无论是部署、构建新的云原生应用程序、重构现有应用程序或重塑平台,CP4Apps 都能满足您的需求。
借助 IBM Cloud Satellite,企业可随时随地在本地、边缘和公共云环境中启动协调一致的云服务功能。
将容器映像、批处理作业或源代码作为无服务器工作负载运行,无需调整大小、部署、联网或扩展。
IBM Cloud Container Registry 为您提供一个私有注册表,以使您可以管理映像并监控它们是否存在安全问题。
自动确定合适的资源分配操作(以及何时执行这些操作),以帮助确保您的 Kubernetes 环境和任务关键型应用程序精准获得满足服务级别目标 (SLO) 所需的资源。