什么是容器?
为应用程序提供标准化、可移植的打包。
容器说明
就像运输行业使用物理容器来隔离不同的货物,以便通过轮船和火车运输,软件开发技术也越来越多地使用一种称为容器化的方法。
标准软件包(也称为容器)将应用程序的代码与相关配置文件、库以及运行应用所需的依赖项捆绑在一起。这使得开发人员和 IT 专业人员能够跨环境无缝部署应用程序。
为什么应关心容器
应用程序移动到其他环境就无法正确运行,这个问题从有软件开发就存在了。会出现这种问题,通常是由于各环境的配置基础库要求和其他依赖项存在差异。
容器为应用程序打包和部署提供轻量级、不可变的基础结构来解决此问题。应用程序或服务、其依赖项及其配置打包为容器映像。容器化应用程序可以作为一个单元进行测试,并作为容器映像实例部署到主机操作系统。
这样,开发人员和 IT 专业人员利用容器,只需进行少量修改,甚至不需要进行任何修改,即可跨环境部署应用程序。
详细了解容器的起源和优势。
容器与虚拟机
人们考虑虚拟化时,通常会想到虚拟机 (VM)。事实上,虚拟化可以采用多种形式,容器就是其中之一。那么,VM 和容器之间的区别是什么?
大体说来,VM 虚拟化基础硬件,让多个操作系统 (OS) 实例可以在相同的硬件上运行。每个 VM 运行一个 OS,并有权访问表示基础硬件的虚拟化资源。
VM 有许多好处。其中包括,能够在同一服务器上运行不同操作系统,还可以更高效、更经济地利用物理资源,更快完成服务器配置。另一方面,每个 VM 都包含 OS 映像、库、应用程序等,因此可能会变得相当大。
容器虚拟化基础 OS,并使容器化应用能够感知其本身具备 OS,包括 CPU、内存、文件存储和网络连接。由于对基础 OS 和基础结构的差异进行了抽象,因此只要基本映像一致,就可以在任何地方部署并运行容器。对于开发人员来说,这有很大的吸引力。
由于容器共享主机 OS,因此它们不需要启动 OS 或加载库。这使得容器更加高效和轻量。容器化应用程序可以在几秒钟内启动,与 VM 方案相比,应用程序的更多实例可以适应计算机。共享 OS 方法具有额外的好处,即减少维护(如修补和更新)开销。
尽管容器可移植,但它们限制在为其定义的操作系统。例如,适用于 Linux 的容器无法在 Windows 上运行,反之亦然。
为什么选择容器
灵活
开发人员生成应用程序并将其打包到容器中,将其提供给 IT 以在标准化平台上运行时,这将减少部署应用程序的总体工作量,并可以简化整个开发和测试周期。这还可以促进开发和运营团队协作,并提升其工作效率,以加快应用交付。
可移植性
容器提供打包和保存运行所需应用程序的所有必要组件的标准化格式。这解决了“它能否在我的计算机上正常工作”这一典型问题,实现 OS 平台和云之间的移植。在任何位置部署容器时,它都会在一致的环境中执行,该环境在多次部署中保持不变。现在,你拥有一致的格式,从开发框到生产。
可快速伸缩
由于容器没有 VM 的典型开销(包括单独的 OS 实例),因此同一基础结构上可以支持更多容器。容器的轻量特性意味着可以快速启动和停止它们,从而实现快速伸缩的方案。
用例
云原生应用程序
云原生应用程序依赖容器来实现跨环境(包括公有云、私有云和混合云)的通用操作模型。由于容器开销低、密度高,因此可以将许多容器托管在同一虚拟机内,使其成为交付云原生应用程序的理想选择。
直接迁移
组织可通过迁移到云获得显著的好处,但可能不希望重写现有应用程序。使用容器,你可以不更改任何代码就将应用程序迁移到云。
批处理
批处理是指无需人工干预即可完成的活动,或在资源可用的基础上可完成的活动。示例包括生成报告、调整图像大小以及转换文件格式。容器提供了一种无需管理环境和依赖项即可运行批处理作业的简单方法。可使用 Azure 容器实例 (ACI) 等动态计算选项,高效地引入和处理源数据,并将其放入持久存储空间(例如 Azure Blob 存储)。使用这种方法而不是静态预配的虚拟机,可以按秒计费,从而节省大量成本。
机器学习
机器学习将算法应用于数据,并根据数据中的模式进行预测。容器可以使机器学习应用程序自成一体,在任何环境中都易于缩放。
不仅仅是容器
DevOps
使用容器,开发人员能够轻松地跨 IT 和生产环境共享软件和依赖项。与 DevOps 做法相结合,可以有效地更快交付代码,缩短软件开发周期。