Docker 容器、映像和注册表

小窍门

此内容摘自电子书《适用于容器化 .NET 应用程序的 .NET 微服务体系结构》,可以在 .NET Docs 上获取,也可以下载免费的 PDF 以供离线阅读。

适用于容器化 .NET 应用程序的 .NET 微服务体系结构电子书封面缩略图。

使用 Docker 时,开发人员会创建应用或服务并将其及其依赖项打包到容器映像中。 映像是应用或服务及其配置和依赖项的静态表示形式。

若要运行应用或服务,将实例化应用的映像以创建将在 Docker 主机上运行的容器。 容器最初在开发环境或电脑中进行测试。

开发人员应将镜像存储在镜像仓库中,该仓库充当这些镜像的库,在部署到生产编排器时需要使用这些镜像。 Docker 通过 Docker 中心维护公共注册表;其他供应商为不同的映像集合(包括 Azure 容器注册表)提供注册表。 或者,企业可以在本地为自己的 Docker 映像创建专用注册表。

图 2-4 显示了 Docker 中的映像和注册表与其他组件的关系。 它还展示供应商提供的多种注册表解决方案。

显示 Docker 中基本分类法的图表。

图 2-4. Docker 术语和概念的分类

注册表类似于一个书架,其中存储映像并可供提取,用于生成容器以运行服务或 Web 应用。 本地和公有云中存在专用 Docker 注册表。 Docker Hub 是由 Docker 维护的公共注册表,而 Docker 受信任的注册表是企业级解决方案。Azure 还提供了 Azure 容器注册表。 AWS、Google 和其他公司也有容器注册表。

将镜像放在镜像仓库中可以存储静态和不可变的应用程序组件,包括在框架级别存储它们的所有依赖项。 然后,可以在多个环境中对这些映像进行版本控制并部署,从而提供一致的部署单元。

建议在以下情况下使用本地或云托管的专用映像注册表:

  • 由于保密性,不得公开共享映像。

  • 你想要在映像与所选部署环境之间具有最低网络延迟。 例如,如果生产环境是 Azure 云,你可能想要将映像存储在 Azure 容器注册表 中,以便网络延迟将最小。 同样,如果生产环境在本地,则可能需要在同一本地网络中提供本地 Docker 受信任的注册表。