什么是容器映像?

2024 年 8 月 9 日

作者

Phill Powell

Staff Writer

Ian Smalley

Senior Editorial Strategist

什么是容器映像?

容器映像是不变的静态文件,包含可执行代码并在 IT 基础架构上隔离运行。

容器映像汇集了在操作系统上创建容器所需的所有组件,它由堆叠在一起的不同映像层组成。容器映像是不可变的,与模板具有相同的功能。

容器映像存储在容器映像注册表(或容器注册表)中,该注册表作为一种文件系统。容器注册表是数据存储库(或多个存储库),用于存放容器映像以便存储和/或访问。

容器注册表的一个显著优势是它们能够顺畅地连接到 Kubernetes 和 Docker 等容器编排系统/平台。此外,在基于容器的应用程序开发过程中,容器注册表可用于 DevOps 开发运维容量,从而实现优化的工作流集成。

高速公路鸟瞰图

在云端保持清醒头脑 


获取每周 Think 时事通讯,了解有关在 AI 时代优化多云设置的专家指导。

如何创建容器映像?

容器图像是各层的集合堆积,其中包括以下内容:

  • 基础映像
  • 二进制文件
  • 依赖项
  • 配置文件

在从头开始构建的新映像中,一切都从底层(基础映像)开始。基础映像是大多数基于容器的开发工作流程的起点。许多基础映像包含基本或最小的 Linux® 发行版(如 Debian、Ubuntu、Red Hat® Enterprise Linux (RHEL)、Rocky Linux 或 Alpine)。基础映像是容器文件系统文件的存储位置。创建基础映像(称为“构建”)的过程使开发人员能够构建一个标准化的环境,该环境支持自定义容器映像。

然后,将添加一系列文件系统层并将其堆叠在基础映像之上,包括以下内容:

  • 必需的库,这是算法和类模板的标准集合,程序员可使用它们创建常见数据结构(例如列表、堆栈和队列)
  • 必要的二进制文件,即执行不同程序和命令所需的可执行文件。二进制文件夹的设计是为了让用户可以快速访问所需的可执行文件。
  • 各种依赖项,控制容器的创建和操作。
  • 运行相关容器所需的配置文件 (configs)。

对于包含现有映像的容器映像,现有映像的基础映像称为父映像。如果一幅映像完全是原始的,那么它就没有父映像。

AI 学院

利用混合云实现 AI 就绪

本课程由 IBM 资深思想领袖带领,旨在帮助企业领导者获得所需的知识,以便划分可以推动增长的 AI 投资的优先级。

容器映像如何工作?

容器映像存储在容器注册表中,其中映像可以上传到容器注册表(“推送”)或下载到不同的系统(“拉取”)。

对象存储器

容器注册表使用对象存储来展现有关容器映像的元数据。这提供了一种成功传输此类元数据的方法,但存在局限性。例如,对于涉及多个映像的数据,可用清单标签的可能数量存在限制。

依赖项容器

依赖项容器提供了另一种存储方式。这些容器可以管理、注册和解决应用程序中的依赖项。依赖项描述了一个对象或过程必须先发生,另一个对象才能按顺序运行的情况。

身份验证

考虑到在线安全的迫切需求,对获得存储库访问权限的个人进行身份验证至关重要。身份验证使用一系列特定于容器注册表的权限。权限定义谁有权使用来自容器注册表的计算机资源。

容器运行时

运行时的概念至关重要。容器运行时是允许容器在主机系统中运行的软件。容器运行时使用一系列步骤来执行容器的创建。这些步骤涵盖了形成容器并初始化其环境的整个过程,由包含应用程序及其依赖项的容器映像引导。

Docker 和 Kubernetes

有两个容器编排提供程序,它们是使用容器和容器映像的核心:

Docker

Docker 是一种容器编排系统,可降低创建、部署和运行应用程序的复杂性。Docker 被视为一种构建轻量级、自包含容器的简单方法,它可以在任何平台上运行,而无需考虑特定的基础设施。由于可以从一台机器移动到另一台机器,Docker 容器还提供了极高的可移植性。此外,Docker 还提供了一种部署微服务的标准方法,即让用户将微服务打包为容器映像。

Docker 的映像资源是 DockerHub,可免费访问由 Docker 用户、软件供应商和开源项目共享的 100,000 多个映像和其他 Docker 文件。还有付费的 Docker 容器注册表服务供私人使用。Docker 映像使用 Docker 命令行界面 (Docker CLI),可进行登录、推送和拉动等关键操作。用户使用 Docker 引擎的 Docker Build 功能创建 Docker 映像,该功能可实现源代码的打包和捆绑。可以使用 JavaScript Object Notation (JSON) 配置文件对 Docker 进行配置。JSON 是首选格式,因为它将所有配置保存在一个地方。

Kubernetes

Kubernetes开源的容器编排平台。Kubernetes 用于自动化许多软件流程,例如管理、部署和扩展。在 Kubernetes 服务中,一台或多台计算机(虚拟机裸机服务器)连接在 Kubernetes 集群中,可以在其中运行不同大小和类型的容器工作负载。Kubernetes 应用程序编程接口 (API) 服务器为 API 对象(如 pod、服务、复制控制器等)配置数据。API 允许不同的软件应用程序相互通信和分享数据,彼此充分合作。

虽然 Docker 和 Kubernetes 提供类似的服务,但它们在各自的规模方面有所不同。Docker 是一个容器运行时,但 Kubernetes 是一个完整的平台,可容纳来自多个容器运行时的容器。Docker 只是 Kubernetes 支持的容器运行时之一。

容器映像的益处

容器映像是容器注册表使用的关键组件。

快速部署

容器映像旨在容纳运行容器所需的一切。创建容器映像后,只需计算机系统适当提示,即可运行容器。这使得容器映像非常适合快速实施。

持续准备

业务优先事项经常会在一夜之间发生变化。通过提前创建容器映像,组织可以预测其所有潜在的容器需求,然后选择最适合该时间和目的的容器。容器映像使组织能够根据情况进行调整。

安全使用

容器映像的安全性通过容器注册表强制执行的访问控制来维护。这些包括身份验证协议,以确保未经授权的人员无法访问容器映像。图像加密现在通常用于对图像进行编码并保护它们免受漏洞的影响。

容器映像用例

以下活动广泛使用容器映像:

云原生应用程序

基于容器的部署(由容器映像的使用提供支持)支持云原生架构,并为其提供所需的隔离和灵活性。容器和容器映像允许用户构建和优化可扩展的云原生应用程序。

微服务

许多容器注册表(及其中的容器映像)通过阐明在容器集群中定位和连接特定微服务的过程来帮助微服务用户。

虚拟机

虚拟机 (VM) 是利用一台计算机上的软件模拟另一台计算机功能的计算机系统。VIM 与容器映像有着独特的关系。用户通常会将 VM 作为容器的主机操作系统,而不是直接在硬件上运行容器,尤其是当容器需要在云中运行时。

领先的容器映像提供商

容器映像提供商市场瞬息万变且充满活力,市场活动丰富,不断有大量行业参与者进入和退出。但是,以下提供商已经在这个市场上建立了持久的声誉:

  • Amazon:Amazon Web Services (AWS) 运营 Amazon Elastic Container Registry (ECR),同时使用 Amazon Inspector 管理容器映像的漏洞扫描。ECR 还支持跨帐户和跨区域复制,可更轻松地访问映像。
  • Apache:Apache 是一款免费的开源 Web 服务器软件,由 Apache 软件基金会提供。该基金会估计,大约 30% 的 Web 服务器上运行着 Apache 软件。
  • GitHub:GitHub 平台(现归 Microsoft 所有)赢得了开发人员的广泛支持,他们非常欣赏这一专有软件实现代码共享、代码管理和协作的方式。
  • IBM:IBM® Cloud Container Registry 让用户可以轻松启动自己的注册表,并开始将私有映像推送到注册表,以便与 IBM® Cloud Kubernetes Service 一起使用。用户可享受拥有完全托管的自有注册表的隐私优势。该服务可以无成本地进行测试驱动,采用即用即付的定价方式,因此用户只需为其消费付费。
  • Microsoft:Microsoft 的 Azure 平台使用 Azure Container Registry (ACR),该注册中心保存 Docker 映像和开放容器计划 (OCI) 映像,并支持 OCI 构件。ACR 的连接注册表功能(该计划高级服务层的一部分)可构建一个本地或远程副本,将容器映像和 OCI 构件与基于云的 ACR 同步,ACR 可同时容纳 Windows® 和 Linux 映像。一种与计算机程序交互的方法涉及编写和输入文本行,也称为命令行。使用这种交互方法的操作系统包含命令行接口 (CLI)。尽管作为自动化工作的一部分,编写脚本的人仍然青睐 CLI,但大多数计算机用户现在都依赖图形用户界面 (GUI)。Azure 为用户提供了使用 Docker CLI 运行关键容器映像操作的灵活性。
  • Python:Python 是一种解释型、面向对象的高级编程语言,由 Python 软件基金会提供。其内置的数据结构使 Python 非常适合需要快速应用程序开发的工作负载。对于软件程序员来说,Python 的主要优势在于易用性,这主要是因为它缺少编译步骤。这使程序员能够缩短调试周期,从而节省时间。
  • Red Hat:自 1993 年建立以来,Red Hat 一直倡导基于 Linux 的编程。借助 Red Hat 提供的容器注册表 OpenShift Container Platform (OCP),用户可以按需自动访问映像存储库,并自动获得一个标准位置来推送应用程序构建所生成的映像。
相关解决方案
IBM Red Hat OpenShift

Red Hat OpenShift on IBM Cloud 是一个完全托管的 OpenShift 容器平台 (OCP)。

探索 Red Hat OpenShift
容器解决方案

容器解决方案能够运行和扩展容器化工作负载,并实现安全性、开源创新和快速部署。

深入了解容器
云咨询服务

利用 IBM 的云咨询服务发掘新功能并提升业务敏捷性。了解如何通过混合云战略和专家合作共同制定解决方案、加快数字化转型并优化性能。

云服务
采取后续步骤

使用 IBM 的容器解决方案实现基础架构现代化。通过使用 IBM 的综合容器平台,跨环境灵活、安全、高效地运行、扩展和管理容器化工作负载。

深入了解容器解决方案 创建免费 IBM Cloud 帐户