什么是容器化?

对于企业开发者来说,一个常见的挑战是确保应用在不同环境中(从本地笔记本电脑到临时服务器和生产基础设施)可靠且连贯地运行。容器化是一种操作系统虚拟化形式,可直接解决此问题。它是一种将应用及其所有依赖项(例如库和配置文件)打包到单个隔离的且可执行的单元(称为容器)中的方法。这种方法提供了一致的环境,有助于确保在开发环境中正常运行的内容在生产环境中也能正常运行。

使用 GKE 对应用进行容器化和编排

容器化的定义

容器化是一种软件部署流程,将应用的代码与运行所需的所有文件和库捆绑在一起。

这种独立的软件包(即“容器”)是轻量级的,并且可移植,因为它不需要自己的客机操作系统。不过,它会共用主机操作系统的内核,同时在自己的隔离用户空间中运行。这种隔离意味着您可以在单个主机上运行多个容器,每个容器都有自己的一组依赖项,而无需担心它们之间会发生冲突。

容器化架构

容器化环境具有分层架构,从底层硬件开始,一直到应用本身。

  • 基础设施:这是基础层,由提供 CPU、内存、存储和网络资源的物理服务器或虚拟机组成。
  • 主机操作系统:在基础设施上的便是主机操作系统(例如 Linux)。此操作系统的内核是关键组件,主机上运行的所有容器都将共用该内核。
  • 容器引擎:这是支持容器化的软件,例如 Google Kubernetes Engine (GKE)。该引擎负责按照指示创建、运行和管理容器。
  • 应用层(容器):最顶层是容器本身。每个容器都包含应用的二进制文件和库,但共用主机操作系统内核。这使得它们比传统的虚拟机更加轻量化和高效。

容器化的工作原理是什么?

容器化开发遵循一个分步逻辑流程,将应用从源代码转化为运行中的隔离实例。

第 1 步:定义环境

首先,开发者会创建一个文件(通常是 Dockerfile)。此文件充当构建应用环境的 recipe 或一组说明。它指定了所需的一切条件,包括:

  • 一个起始基础映像(例如,特定版本的 Debian 或特定于语言的运行时,如 Python 3.9)
  • 用于将应用的源代码复制到映像中的命令
  • 必要软件包、库和其他依赖项的安装说明
  • 容器启动时要执行的命令
  • 一个起始基础映像(例如,特定版本的 Debian 或特定于语言的运行时,如 Python 3.9)
  • 用于将应用的源代码复制到映像中的命令
  • 必要软件包、库和其他依赖项的安装说明
  • 容器启动时要执行的命令

第 2 步:构建容器映像

开发者按照文件中的说明,使用命令创建容器映像。此映像是一个静态、不可变且可移植的文件,充当应用的独立蓝图。它将应用代码及其所有依赖项封装到一个分层软件包中。可以将映像视为面向对象编程中的类,它是用于创建运行实例的模板。

第 3 步:在注册表中存储和分发映像

构建完成后,容器映像会被推送到容器注册表。注册表是用于存储和管理映像的集中式存储库。像 Google 的 Artifact Registry 这样的私有安全注册表对于企业用途必不可少。将映像存储在注册表中,可方便团队共享、进行版本控制,并从生产环境中的任何服务器进行访问。

第 4 步:运行容器

最后一步是创建映像的运行实例,即容器本身。系统会向容器引擎发送一条命令,以运行注册表中的特定映像。然后,该引擎使用主机操作系统的内核来执行以下操作:

  • 使用命名空间等内核功能为容器创建隔离环境。这为容器提供了专用的网络栈、进程树和文件系统视图,让容器认为它在自己的操作系统上运行。
  • 使用 cgroup 分配和限制 CPU 和内存等资源,确保一个容器无法独占主机的资源。
  • 执行原始文件中定义的启动命令,在隔离的沙盒中运行应用。
  • 使用命名空间等内核功能为容器创建隔离环境。这为容器提供了专用的网络栈、进程树和文件系统视图,让容器认为它在自己的操作系统上运行。
  • 使用 cgroup 分配和限制 CPU 和内存等资源,确保一个容器无法独占主机的资源。
  • 执行原始文件中定义的启动命令,在隔离的沙盒中运行应用。

云计算中的容器化

容器化是现代云计算的基础技术,可实现各种架构模式。

概念

容器化的说明和作用

容器化是微服务架构的理想部署模型。每个容器封装一个独立的服务,让团队能够自主开发、部署和扩缩服务。

容器可以简化将旧版应用迁移到云的过程。通过将应用“直接原样迁移”到容器中,您可以使其具有可移植性,可以随时在任何云提供商的基础设施上运行。

容器可移植有助于确保应用在本地数据中心和公有云环境中的运行始终如一,为无缝混合云策略提供关键支持。

这是一种像 Google Kubernetes Engine (GKE) 这样的云服务模型,可自动编排和管理容器。它剥离出了底层基础设施,让开发者可以专注于应用。

容器可提供对操作系统环境和语言运行时的更多控制,而无服务器架构则以零服务器管理提供更高级别的抽象。这两种模式都是有效的,并且可以结合使用。(例如,容器通常用于运行无服务器工作负载。)例如,Cloud Run 结合使用容器化与无服务器架构。您可以在无服务器环境中部署容器映像。

虚拟化通过创建拥有自身客机操作系统的完整虚拟机来实现硬件虚拟化。容器化通过对操作系统本身进行虚拟化,并共享主机操作系统内核,使容器更轻量、启动更迅速。

容器映像的一致性使企业能够跨多个地理区域高保真地部署完全相同的应用制品。这有助于确保应用行为一致,并简化面向全球用户群的管理工作。

概念

容器化的说明和作用

容器化是微服务架构的理想部署模型。每个容器封装一个独立的服务,让团队能够自主开发、部署和扩缩服务。

容器可以简化将旧版应用迁移到云的过程。通过将应用“直接原样迁移”到容器中,您可以使其具有可移植性,可以随时在任何云提供商的基础设施上运行。

容器可移植有助于确保应用在本地数据中心和公有云环境中的运行始终如一,为无缝混合云策略提供关键支持。

这是一种像 Google Kubernetes Engine (GKE) 这样的云服务模型,可自动编排和管理容器。它剥离出了底层基础设施,让开发者可以专注于应用。

容器可提供对操作系统环境和语言运行时的更多控制,而无服务器架构则以零服务器管理提供更高级别的抽象。这两种模式都是有效的,并且可以结合使用。(例如,容器通常用于运行无服务器工作负载。)例如,Cloud Run 结合使用容器化与无服务器架构。您可以在无服务器环境中部署容器映像。

虚拟化通过创建拥有自身客机操作系统的完整虚拟机来实现硬件虚拟化。容器化通过对操作系统本身进行虚拟化,并共享主机操作系统内核,使容器更轻量、启动更迅速。

容器映像的一致性使企业能够跨多个地理区域高保真地部署完全相同的应用制品。这有助于确保应用行为一致,并简化面向全球用户群的管理工作。

容器化的优势

可移植性和一致性

容器化的一大优势在于其“一次构建,随处运行”的能力。由于容器将应用及其依赖项一并打包,因此可创建一个可预测且一致的环境。这种一致性有助于消除常见的“在我的机器上能运行”的问题,确保应用在开发、测试和生产环境中的运行行为一致,无需依赖底层基础设施。

提高了速度和敏捷性

容器比传统虚拟机轻量得多,因为它们无需运行自己的客机操作系统。这使得容器可以在几秒钟内启动和停止,而非几分钟,从而显著加快开发周期,并推动实现更敏捷的 CI/CD 流水线。更快的构建和部署让团队能够更迅速地迭代应用。

资源利用效率提升

由于开销较低,容器可实现更高的资源利用率。您可以在单个主机操作系统上运行多个容器,从而实现比虚拟机更高的部署密度。这种高效的“装箱”方式可将应用更密集地部署在服务器上,使企业有望减少服务器占用空间及相关基础设施成本。

进程和依赖项隔离

每个容器都在其独立的用户空间中运行,并拥有独立的进程树和网络接口。这种隔离意味着,一个容器化应用的库和依赖项不会与同一主机上运行的其他应用发生冲突。这简化了依赖管理,还可通过限制受入侵应用的潜在影响来增强安全性。

简化运维管理

容器化将部署单元标准化。运维团队可以管理容器,而无需管理整台机器或专有的应用堆栈。这种统一的方法简化了部署、扩缩和监控任务,并为通过 Kubernetes 等编排平台实现强大的自动化能力奠定了基础。

快速扩缩

容器轻量且启动迅速,非常适合需要快速扩缩的应用。当应用需求激增时,可几乎瞬时预配新容器实例以应对负载。这种弹性可扩缩性有助于确保应用持续响应和可用,无需大量人工干预。

利用 Google Cloud 解决业务难题

新客户可获得 $300 赠金,用于抵扣 Google Cloud 的费用。

有哪些容器化类型的工具?

容器生态系统由多种协同运行的工具组成。

  • 容器引擎:运行和管理容器的核心软件。
  • 容器映像构建器:根据定义文件创建容器映像的工具。
  • 容器注册表:容器映像的存储系统。Artifact Registry 是一项托管式服务,可为您的容器映像提供安全、私密的存储空间。
  • 容器编排平台:要实现大规模容器管理,Kubernetes 等编排平台不可或缺。它可自动执行部署、扩缩和网络配置。Google Kubernetes Engine (GKE) 等托管式服务可提供适用于生产环境的编排平台。
您想解决什么问题?
What you'll get:
分步指南
参考架构
可用的预构建解决方案
此服务是使用 Vertex AI 构建的。您必须年满 18 周岁才能使用。请勿输入敏感信息、机密信息或个人信息。

详细了解容器化

更进一步

获享 $300 赠金以及 20 多种提供“始终免费”用量的产品,开始在 Google Cloud 上构建项目。