定义容器

已完成

在 Contoso 迁移和虚拟化各种工作负载时,可能会出现容器化某些工作负载的选项。 Windows Server 管理员将评估容器,了解它们的工作原理以及使用它们的可能好处。 好处包括移动性、敏捷性、效率提高和服务器密度。 所有这些好处都有助于实现更为优化的服务器工作负载和一致的开发环境。

什么是容器?

容器用于打包应用程序及其所有依赖项,并从运行该应用程序的主机操作系统 (OS) 中提取该应用程序。 容器提供了一个轻型开发和运行时环境,在开发过程中可以轻松地运行和共享应用程序。 容器不仅独立于主机 OS,它也独立于其他容器。 独立容器提供虚拟运行时,这也可提高在其中运行的应用的安全性和可靠性。

传统上,软件应用程序被开发用于在受支持的处理器、硬件和 OS 平台上运行。 软件应用程序通常需要进行额外编码,以便为不同的运行时平台提供支持。 由于有许多不同的计算系统,因此需要更高效的软件开发和管理平台,以支持多个计算环境之间的可移植性。 容器有助于提供此类可移植性。

使用容器的好处

使用容器的好处包括:

  • 容器可在任何位置运行。 容器可以在各种平台上运行,如 Linux、Windows 和 Mac 操作系统。 它们可以托管在本地工作站上、本地数据中心的服务器上,也可以在云中预配。

  • 隔离。 对于应用程序,容器类似于一个完整的 OS。 CPU、内存、存储和网络资源在容器中进行虚拟化,并独立于主机平台和其他应用程序。

  • 效率提高。 可以快速部署、更新和缩放容器,以支持更敏捷的开发、测试和生产生命周期。 由于它们可提高资源使用效率,因此资源占用减少,从而提高服务器密度。

  • 一致的开发环境。 开发人员使用容器作为支持各种开发语言(如 Java、.NET、Python 和 Node.js)的一致且可预测的开发环境。 开发人员知道,无论在什么位置部署应用程序,容器都将确保应用程序按预期运行。

容器工作原理

标准 Windows 计算机中的处理器具有两种不同的模式:内核模式和用户模式。 核心 OS 组件和大多数设备驱动程序在内核模式下运行,而应用程序则在用户模式下运行。

在计算机上安装容器技术时,每个容器都会创建一个独立的轻型接收器,用于在主机 OS 上运行应用。 容器基于大多数主机操作系统内核构建并共享这些内核,以获取访问文件系统和注册表的权限。

每个容器都有自己的用户模式系统文件副本,这些副本独立于其他容器以及主机自己的用户模式环境。 隔离用户模式的功能由容器基础映像提供,其中包含支持打包的应用所需的用户模式系统文件。 容器基础映像模板提供容器化应用使用的属于基础层的 OS 服务,主机的内核模式层中不提供(或限制)这些服务。

在其中进行应用程序和代码更改的层基于这些预生成的容器基础 OS 映像层。 这些基础 OS 层独立于用于应用程序或代码更改的容器层进行开发和更新。 无需更新基础层即可将其下拉至本地工作环境,然后可在基于基础层运行的容器层中开始工作。 这样即可实现更小、更轻质且更易移植的开发环境。

此图显示了一个示例容器层,这些层在堆栈中按从下往上的顺序依次为:基础 OS 层、IIS 层、ASP.NET 层以及你的网站层。

当你生成自己的容器映像来托管应用程序时,首先需要使用容器基础 OS 映像或具有所需依赖项的预生成容器映像。 基于这些层,你可以为要在容器中运行的应用程序构建你自己的层。 创建容器映像的每个操作都基于上一个操作。 这会增加映像大小,但你可以方便地分离 OS、框架、依赖项和应用程序层。

容器和微服务

微服务应用程序被定义为一种云原生体系结构方法,其中单个应用程序由许多松散耦合且可独立部署的小型组件或服务组成。 其中每个小型组件或服务都可以由容器表示。 但是,容器不一定会实现微服务体系结构。

容器可以托管整体式应用程序,但它们并不是为了实现该目的而设计的。 默认情况下,Docker(或其他容器运行时)和容器业务流程协调程序将假定始终可以安全地删除/移除某个容器,并可根据需要使用其他容器轻松取代它。 在 VM 上,如果将应用程序配置为写入 VM 磁盘,则可以安全地停止并启动 VM,并且数据将保存到磁盘中,就像 VM 将安全地启动并继续其操作一样。 使用容器时,如果移除某个容器并在其位置上放置另一个容器,则只显示该容器映像的现有层。 在微服务环境中,如果状态和数据具有持久性,这应该不会成为一个问题。

虽然可以像处理 VM 一样运行和管理容器,但建议采用将状态和数据分离的做法,并确保容器能够被删除。 这将使你能够利用其他做法,例如 DevOps。

实际上,不应将任何数据或状态存储在容器映像及其层中。 应使用允许任何容器实例访问的外部永久性存储。