将容器升级到新版本的 Windows 操作系统

适用范围:Windows Server 2022、Windows Server 2019、Windows Server 2016

本主题介绍如何将 Windows 容器升级到新的 Windows 或 Windows Server 操作系统版本。 升级容器需要执行两个步骤:

  1. 将容器主机升级到新的操作系统版本。
  2. 使用新的操作系统版本创建新的容器实例。

注意

如果只需要更新(或修补)当前的 Windows 基础操作系统容器映像,请参阅更新容器以提取容器的最新修补映像。

升级容器主机

要将容器主机升级到更新的 Windows 或 Windows Server 版本,可以执行就地升级或全新安装。 由于容器主机和 Windows 容器共享一个内核,因此你应该确保容器的基础映像操作系统版本与主机的版本一致。 但是,你仍然可以使用具有含 Hyper-V 隔离旧基础映像的更新版本容器主机。 在 Windows Server 2022 中,可以通过进程隔离(预览版)实现此场景。

使用新的操作系统版本创建新的容器实例

要创建新的容器实例,需要:

  • 拉取容器基础映像
  • 编辑 Dockerfile 以指向新的基础映像
  • 生成并运行新的应用映像
  • 标记映像并将其推送到注册表

拉取容器基础映像

在容器主机上拉取新的 Windows 操作系统版本后,请按照以下步骤升级基础映像:

  1. 选择要升级到的容器基础映像

  2. 以管理员身份打开 PowerShell 会话,并根据选择的操作系统版本,运行 docker pull 命令以拉取映像:

    PS C:\> docker pull mcr.microsoft.com/windows/servercore:ltsc2022
    

    此示例拉取 Server Core 版本 20H2 基础映像。

  3. 映像下载完成后,可以通过运行 docker images 命令返回已提取映像的列表来验证新映像是否已提取:

    docker images
    

编辑 Dockerfile 以指向新的基础映像

接下来,你需要使用拉取的新基础映像创建并启动新的容器实例。 要自动执行此过程,请编辑 Dockerfile 以将其重定向到新映像。

注意

如果你想升级当前正在运行的任何容器的映像,需要使用 docker stop 停止容器,然后运行 docker rm 移除容器。

在文本编辑器中打开 Dockerfile 并进行更新。 在下面的示例中,Dockerfile 使用 IIS 应用程序更新到 Server Core 20H2。

FROM mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2022 AS build-env
WORKDIR /app

COPY *.csproj ./
RUN PowerShell Install-WindowsFeature NET-Framework-45-ASPNET

FROM mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2022
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["ServiceMonitor.exe", "w3svc"]

生成并运行新的应用映像

更新 Dockerfile 后,你需要生成并运行应用映像。

  1. 使用 docker build 生成映像,如下所示:

    docker build -t iss .
    
  2. 要运行新生成的容器,请运行 docker run 命令:

    docker run -d -p 8080:80 --name iss-app iss
    

标记映像并将其推送到注册表

要允许其他主机重用新映像,你应该标记容器映像,然后将其推送到注册表。

  1. 使用 docker tag 标记映像,如下所示:

    docker tag mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2022 <login-server>/iss
    
  2. 使用 docker push 将映像推送到容器注册表,如下所示:

    docker push <login-server> iss
    

使用业务流程协调程序升级容器

还可以使用业务流程协调程序重新部署 Windows 容器,例如 Azure Kubernetes 服务和 Azure Stack HCI 上的 AKS。 业务流程协调程序提供的强大的自动化功能允许大规模这样做。 有关详细信息,请参阅教程:更新 Azure Kubernetes 服务中的应用程序教程:更新 Azure Stack HCI 上的 Azure Kubernetes 服务中的应用程序