×

理解容器、镜像和镜像流

在创建和管理容器化软件时,理解容器、镜像和镜像流的概念非常重要。镜像包含一组可运行的软件,而容器是容器镜像的运行实例。镜像流提供了一种存储同一基本镜像的不同版本的方法。这些不同版本由同一镜像名称上的不同标签表示。

镜像

在 AWS 上的 Red Hat OpenShift 服务中的容器基于 OCI 或 Docker 格式的容器镜像。镜像是一个二进制文件,包含运行单个容器所需的所有要求,以及描述其需求和功能的元数据。

您可以将其视为一种打包技术。除非您在创建容器时为其提供其他访问权限,否则容器只能访问镜像中定义的资源。通过在多个主机上的多个容器中部署相同的镜像并在它们之间进行负载均衡,AWS 上的 Red Hat OpenShift 服务可以为打包到镜像中的服务提供冗余和水平扩展。

您可以直接使用podmandocker CLI来构建镜像,但AWS上的Red Hat OpenShift服务也提供构建器镜像,通过将您的代码或配置添加到现有镜像来帮助创建新镜像。

由于应用程序会随着时间的推移而发展,单个镜像名称实际上可以指代同一镜像的许多不同版本。每个不同的镜像都由其哈希值唯一标识,这是一个很长的十六进制数字,例如fd44297e2ddb050ec4f…​,通常缩短为 12 个字符,例如fd44297e2ddb

您可以创建管理容器镜像。

镜像仓库

镜像仓库是一个内容服务器,可以存储和提供容器镜像。例如

registry.redhat.io

一个仓库包含一个或多个镜像库的集合,这些库包含一个或多个带标签的镜像。Red Hat 为订阅者提供位于registry.redhat.io的仓库。AWS 上的 Red Hat OpenShift 服务也可以提供其自己的 OpenShift 镜像仓库来管理自定义容器镜像。

镜像库

镜像库是相关容器镜像和标识它们的标签的集合。例如,AWS 上的 Red Hat OpenShift 服务 Jenkins 镜像位于库中

docker.io/openshift/jenkins-2-centos7

镜像标签

镜像标签是应用于库中容器镜像的标签,用于区分镜像流中特定镜像与其他镜像。通常,标签表示某种版本号。例如,这里的:v3.11.59-2是标签

registry.access.redhat.com/openshift3/jenkins-2-rhel7:v3.11.59-2

您可以向镜像添加其他标签。例如,一个镜像可能被分配标签:v3.11.59-2:latest

AWS 上的 Red Hat OpenShift 服务提供oc tag命令,它类似于docker tag命令,但操作的是镜像流而不是直接操作镜像。

镜像ID

镜像 ID 是一个 SHA(安全哈希算法)代码,可用于拉取镜像。SHA 镜像 ID 不可更改。特定的 SHA 标识符始终引用完全相同的容器镜像内容。例如

docker.io/openshift/jenkins-2-centos7@sha256:ab312bda324

容器

AWS 上的 Red Hat OpenShift 服务应用程序的基本单元称为容器。Linux 容器技术是隔离运行进程的轻量级机制,以便它们仅限于与其指定的资源交互。容器一词被定义为容器镜像的特定运行或暂停实例。

许多应用程序实例可以在单个主机上的容器中运行,而无需查看彼此的进程、文件、网络等。通常,每个容器提供一项服务,通常称为微服务,例如 Web 服务器或数据库,尽管容器可用于任意工作负载。

多年来,Linux 内核一直在集成容器技术的功能。Docker 项目开发了一个方便的管理界面,用于在主机上管理 Linux 容器。最近,开放容器倡议已经为容器格式和容器运行时制定了开放标准。AWS 上的 Red Hat OpenShift 服务和 Kubernetes 增加了在多主机安装中编排 OCI 和 Docker 格式容器的能力。

虽然在使用 AWS 上的 Red Hat OpenShift 服务时您不会直接与容器运行时交互,但了解其功能和术语对于理解其在 AWS 上的 Red Hat OpenShift 服务中的作用以及您的应用程序如何在容器内运行非常重要。

诸如podman之类的工具可以用来替换docker命令行工具,以便直接运行和管理容器。使用podman,您可以单独试验与 AWS 上的 Red Hat OpenShift 服务分开的容器。

为什么要使用镜像流

镜像流及其关联的标签提供了一种从 AWS 上的 Red Hat OpenShift 服务内部引用容器镜像的抽象方式。镜像流及其标签使您可以查看可用的镜像,并确保即使存储库中的镜像发生更改,您仍在使用所需的特定镜像。

镜像流不包含实际的镜像数据,而是呈现相关镜像的单个虚拟视图,类似于镜像仓库。

您可以配置构建和部署以监视镜像流,并在添加新镜像时接收通知,并分别通过执行构建或部署来做出反应。

例如,如果部署使用某个镜像,并且创建了该镜像的新版本,则可以自动执行部署以获取该镜像的新版本。

但是,如果部署或构建使用的镜像流标签未更新,那么即使容器镜像注册表中的容器镜像已更新,构建或部署也会继续使用之前的(大概已知良好的)镜像。

源镜像可以存储在以下任何位置:

  • AWS 上的 Red Hat OpenShift 服务集成的注册表。

  • 外部注册表,例如 registry.redhat.io 或 quay.io。

  • AWS 上的 Red Hat OpenShift 服务集群中的其他镜像流。

当您定义引用镜像流标签的对象(例如构建或部署配置)时,您指向的是镜像流标签,而不是存储库。当您构建或部署应用程序时,AWS 上的 Red Hat OpenShift 服务会使用镜像流标签查询存储库以找到镜像的关联 ID,并使用该确切的镜像。

镜像流元数据与其他集群信息一起存储在 etcd 实例中。

使用镜像流具有以下几个显著优势:

  • 您可以标记、回滚标签并快速处理镜像,无需使用命令行重新推送。

  • 当将新镜像推送到注册表时,您可以触发构建和部署。此外,AWS 上的 Red Hat OpenShift 服务还提供针对其他资源(例如 Kubernetes 对象)的通用触发器。

  • 您可以为定期重新导入标记标签。如果源镜像已更改,则会拾取该更改并将其反映在镜像流中,这将根据构建或部署配置触发构建或部署流程。

  • 您可以使用细粒度的访问控制共享镜像,并快速在团队之间分发镜像。

  • 如果源镜像发生更改,镜像流标签仍然指向已知良好版本的镜像,确保您的应用程序不会意外中断。

  • 您可以通过镜像流对象的权限配置围绕谁可以查看和使用镜像的安全策略。

  • 缺少集群级别读取或列出镜像权限的用户仍然可以使用镜像流检索项目中标记的镜像。

镜像流标签

镜像流标签是指向镜像流中镜像的命名指针。镜像流标签类似于容器镜像标签。

镜像流镜像

镜像流镜像允许您从标记特定镜像流的特定镜像流中检索特定的容器镜像。镜像流镜像是一个 API 资源对象,它汇集了有关特定镜像 SHA 标识符的一些元数据。

镜像流触发器

当镜像流标签发生更改时,镜像流触发器会触发特定操作。例如,导入会导致标签的值发生更改,这会在有部署、构建或其他侦听这些更改的资源时触发触发器。

如何使用集群样本操作符

在初始启动期间,操作符会创建默认样本资源以启动镜像流和模板的创建。您可以使用集群样本操作符来管理存储在 `openshift` 命名空间中的样本镜像流和模板。

作为集群管理员,您可以使用集群样本操作符来:

关于模板

模板是要复制的对象的定义。您可以使用模板来构建和部署配置。

如何使用 Ruby on Rails

作为开发人员,您可以使用Ruby on Rails来:

  • 编写您的应用程序

    • 设置数据库。

    • 创建一个欢迎页面。

    • 为 AWS 上的 Red Hat OpenShift 服务配置您的应用程序。

    • 将您的应用程序存储在 Git 中。

  • 在 AWS 上的 Red Hat OpenShift 服务中部署您的应用程序

    • 创建数据库服务。

    • 创建前端服务。

    • 为您的应用程序创建一个路由。