你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
如果在 Azure 应用服务中运行 Docker Compose 应用,则应将其迁移到 sidecars。 将 Docker Compose 应用迁移到 sidecars 有两个主要策略。
- 基于脚本的迁移 - 建议用于简单设置。
- 手动迁移
先决条件
- PowerShell
- Azure CLI
- Docker (用于生成和推送映像)
使用脚本进行迁移
如果 Docker Compose 文件非常简单,则可以使用官方迁移脚本自动执行该过程。
重要
在运行迁移脚本之前,请始终从 Azure 门户备份应用。
在 PowerShell 中运行脚本,提供订阅 ID、Web 应用名称、资源组、注册表 URL、base64 编码的 Docker Compose 文件、主服务名称和目标端口。
./update-webapp.ps1 ` -subscriptionId "<subscriptionId>" ` -webAppName "<webAppName>" ` -resourceGroup "<resourceGroup>" ` -registryUrl "<registryUrl>" ` -base64DockerCompose "<base64DockerCompose>" ` -mainServiceName "<mainServiceName>" ` -targetPort "<targetPort>"如果注册表需要身份验证,脚本会提示你以交互方式提供
dockerRegistryServerUsername和dockerRegistryServerPassword。
手动迁移
登录到 Azure 并设置订阅。
az login az account set --subscription <your-subscription-id>收集所需的详细信息。
az account show --query id --output tsv az webapp list --query "[].{name:name}" --output tsv az group list --query "[].{name:name}" --output tsv az acr list --query "[].{name:name}" --output tsv它们将帮助你标识订阅 ID、应用名称、资源组和 Azure 容器注册表。
创建部署槽位。 在将槽切换到生产环境之前,将验证迁移的挎斗。
az webapp deployment slot create --name <webapp-name> --resource-group <resource-group> --slot <slot-name>从生产应用解码现有的 Docker Compose 配置。
az webapp config show --name <webapp-name> --resource-group <resource-group> --query linuxFxVersion从输出复制 base64 部件,并在 PowerShell 中解码它:
[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String("<base64value>"))对于 Compose 文件中的每个服务,请在
sitecontainersURL 路径下的部署槽中创建相应的container资源:az rest --method PUT \ --url https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Web/sites/<webapp-name>/slots/<slot-name>/sitecontainers/<container-name>?api-version=2023-12-01 \ --body '{"name":"<container-name>", "properties":{"image":"<image-name>", "isMain": <true/false>, "targetPort": <port>}}'使用 Docker Compose 属性和挎斗配置的映射来帮助完成映射。
在
<container-name>中使用您想要的容器名称。将主应用容器的
isMain设置为true,将挎斗的设置为false。对于
<image-name>,请使用包含服务器名称的映像的完整路径。 例如:"image":"myregistry.azurecr.io/myapp/backend:latest"对所有容器重复此步骤。
将部署槽切换为使用挎斗模式。
az webapp config set --name <webapp-name> --resource-group <resource-group> --slot <slot-name> --linux-fx-version "sitecontainers"重启部署槽位,然后在部署槽中验证迁移的应用的功能。
az webapp restart --name <webapp-name> --resource-group <resource-group> --slot <slot-name>验证后,将槽交换到生产环境:
az webapp deployment slot swap --name <webapp-name> --resource-group <resource-group> --slot <slot-name> --target-slot production
Docker Compose 属性和挎斗配置的映射
以下 Docker Compose 字段对应于 sidecar 配置:
| Docker Compose | 挎斗配置 | 注释 |
|---|---|---|
command、entrypoint |
startUpCommand |
|
environment |
environmentVariables |
|
image |
image |
|
ports |
targetPort |
仅支持端口 80 和 8080 用于外部流量。 |
volumes |
volumeMounts |
不支持持久性 Azure 存储。 |
挎斗不支持以下 Docker Compose 字段:
| Docker Compose 字段 | 支持 | 注释 |
|---|---|---|
build |
不允许 | 预生成映像并将映像推送到注册表。 |
depends_on |
忽略 | 不保证容器的启动顺序。 |
networks |
忽略 | 网络连接在系统内部处理。 |
secrets |
忽略 | 使用应用服务应用设置或 Key Vault 来管理机密信息。 |
volumes 使用 {WEBAPP_STORAGE_HOME} 或 {WEBSITES_ENABLE_APP_SERVICE_STORAGE} |
不支持 |
迁移限制和注意事项
下表显示了 Docker Compose 应用中当前支持的功能,这些功能在挎斗中不受支持或支持有限。
| 功能 / 特点 | Docker Compose | Sidecar |
|---|---|---|
| 存储 | 容器之间共享的卷 | 容器专用的持久存储受限 |
| 网络 | 服务名称作为主机名 | 所有容器共享 localhost;每个容器需要独特的端口 |
| 日志记录和监测 | 自定义驱动程序,外部工具 | 与 Azure Monitor 和 Log Analytics 集成 |
| 应用服务环境 (ASE) | 已支持 | 尚不支持 |
| 国家云 | 已支持 | 尚不支持 |