将容器升级到新版本的 Windows 操作系统
适用于:Windows Server 2025、Windows Server 2022、Windows Server 2019、Windows Server 2016
本主题介绍如何将 Windows 容器升级到新的 Windows 或 Windows Server 操作系统版本。 升级容器有两个步骤:
- 将容器主机升级到新的操作系统版本。
- 使用新的操作系统版本创建新的容器实例。
注意
如果只需“更新”(或修补)当前的 Windows 基础操作系统容器映像,请参阅更新容器以拉取容器的最新修补映像。
升级容器主机
若要将容器主机升级到较新的 Windows 或 Windows Server 版本,可以执行就地升级或全新安装。 由于容器主机和 Windows 容器共享单个内核,因此应确保容器的基础映像 OS 版本 与主机的版本匹配。 不过,仍然可以让较新版本的容器主机使用带有 Hyper-V 隔离的较旧基础映像。 在 Windows Server 2022 中,可以使用进程隔离(预览版)实现此方案。
使用新的 OS 版本创建新的容器实例
若要创建新的容器实例,需要:
- 拉取容器基础映像
- 编辑 Dockerfile 以指向新的基础映像
- 生成并运行新的应用映像
- 标记映像并将其推送到注册表
拉取容器基础映像
在容器主机上拉取新的 Windows OS 版本后,请按照以下步骤升级基本映像:
选择要升级到的容器基础映像。
以管理员身份打开 PowerShell 会话,并根据所选的 OS 版本运行 docker pull 命令来拉取映像:
PS C:\> docker pull mcr.microsoft.com/windows/servercore:ltsc2022
此示例拉取了 Server Core 版本 20H2 基础映像。
下载完映像后,可以通过运行 docker 映像 命令来验证是否已拉取新映像,以返回拉取映像列表:
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 后,需要生成并运行应用映像。
使用 docker build 来构建你的镜像,如下所示:
docker build -t iss .
若要运行新生成的容器,请运行 docker run 命令:
docker run -d -p 8080:80 --name iss-app iss
标记映像并将其推送到注册表
若要允许其他主机重复使用新映像,应标记容器映像,然后将容器映像推送到注册表。
使用 docker 标签 对镜像进行标记,如下所示:
docker tag mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2022 <login-server>/iss
使用 docker 推送 将映像推送到容器注册表,如下所示:
docker push <login-server> iss
使用业务流程协调程序升级容器
还可以使用业务流程协调程序(例如 Azure Stack HCI 上的 Azure Kubernetes 服务和 AKS)重新部署 Windows 容器。 业务流程协调程序提供强大的自动化功能,用于大规模执行此操作。 有关详细信息,请参阅 教程:更新 Azure Kubernetes 服务中的应用程序 或 教程:在 Azure Stack HCI 上的 Azure Kubernetes 服务中更新应用程序。