如何创建虚拟机或 VHD 的映像

若要创建虚拟机 (VM) 的多个副本以用于 Azure 中,需要捕获 VM 或 OS VHD 的映像。 若要创建映像,需要删除个人帐户信息,这使得多次部署更加安全。 执行下列步骤可取消预配现有 VM,解除分配并创建映像。 可以使用此映像,在订阅内的任何资源组中创建 VM。

如果想要创建一份现有 Linux VM 的副本以用于备份或调试,或从本地 VM 上传专用 Linux VHD,请参阅上传自定义磁盘映像并根据该映像创建 Linux VM

还可使用 Packer 创建自定义配置。 有关使用 Packer 的详细信息,请参阅如何使用 Packer 在 Azure 中创建 Linux 虚拟机映像

开始之前

确保符合以下先决条件:

Note

在 Azure 中国区使用 Azure CLI 2.0 之前,请先运行 az cloud set -n AzureChinaCloud 来改变云环境。如果想切回国际版 Azure,请再次运行 az cloud set -n AzureCloud

快速命令

有关本主题的用于测试、评估或了解 Azure 中的 VM 的简化版本,请参阅使用 CLI 创建 Azure VM 的自定义映像

步骤 1:取消预配 VM

使用 Azure VM 代理取消预配 VM 以删除计算机特定文件和数据。 在源 Linux VM 上,使用带 -deprovision+user 参数的 waagent 命令。 有关详细信息,请参阅 Azure Linux 代理用户指南

  1. 使用 SSH 客户端连接到 Linux VM。
  2. 在 SSH 窗口中,键入以下命令:

    sudo waagent -deprovision+user
    


    Note

    仅在要捕获为映像的 VM 上运行此命令。 不保证映像中的所有敏感信息被清除,或者映像适合用于分发。 +user 参数还会删除上次预配的用户帐户。 如果想要在 VM 中保留帐户凭据,只需使用 -deprovision 就地保留用户帐户。

  3. 键入 y 继续。 添加 -force 参数即可免除此确认步骤。

  4. 完成该命令后,键入 exit。 此步骤将关闭 SSH 客户端。

步骤 2:创建 VM 映像

使用 Azure CLI 2.0 将 VM 标记为通用化并捕获映像。 在以下示例中,请将示例参数名称替换成自己的值。 示例参数名称包括 myResourceGroupmyVnetmyVM

  1. 对使用 az vm deallocate 取消设置的 VM 解除分配。 以下示例在名为 myResourceGroup 的资源组中解除分配名为 myVM 的 VM:

    az vm deallocate \
      --resource-group myResourceGroup \
      --name myVM
    
  2. 使用 az vm generalize 将 VM 标记为通用化。 以下示例将名为 myResourceGroup 的资源组中名为 myVM 的 VM 标记为通用化:

    az vm generalize \
      --resource-group myResourceGroup \
      --name myVM
    
  3. 现在,使用 az image create 创建 VM 资源的映像。 以下示例使用名为 myVM 的 VM 资源在名为 myResourceGroup 的资源组中创建名为 myImage 的映像:

    az image create \
      --resource-group myResourceGroup \
      --name myImage --source myVM
    

    Note

    该映像在与源 VM 相同的资源组中创建。 可以在订阅内的任何资源组中从此映像创建 VM。 从管理角度来看,你可能希望为 VM 资源和映像创建特定的资源组。

步骤 3:从捕获的映像创建 VM

使用通过 az vm create 创建的映像来创建 VM。 以下示例从名为 myImage 的映像创建名为 myVMDeployed 的 VM:

az vm create \
   --resource-group myResourceGroup \
   --name myVMDeployed \
   --image myImage\
   --admin-username azureuser \
   --ssh-key-value ~/.ssh/id_rsa.pub

在另一个资源组中创建 VM

可在订阅内的任何资源组中根据映像创建 VM。 若要在与映像不同的资源组中创建 VM,请指定映像的完整资源 ID。 使用 az image list 查看映像列表。 输出类似于以下示例:

"id": "/subscriptions/guid/resourceGroups/MYRESOURCEGROUP/providers/Microsoft.Compute/images/myImage",
   "location": "chinanorth",
   "name": "myImage",

以下示例使用 az vm create ,通过指定映像资源 ID,在与源映像不同的资源组中创建 VM:

az vm create \
   --resource-group myOtherResourceGroup \
   --name myOtherVMDeployed \
   --image "/subscriptions/guid/resourceGroups/MYRESOURCEGROUP/providers/Microsoft.Compute/images/myImage" \
   --admin-username azureuser \
   --ssh-key-value ~/.ssh/id_rsa.pub

步骤 4:验证部署

现在将 SSH 连接到创建的虚拟机以验证部署并开始使用新的 VM。 若要通过 SSH 连接,请使用 az vm show查找 VM 的 IP 地址或 FQDN:

az vm show \
   --resource-group myResourceGroup \
   --name myVMDeployed \
   --show-details

后续步骤

可以从源 VM 映像创建多个 VM。 如果需要对映像进行更改,请执行以下操作:

  • 从映像创建 VM。
  • 进行任何更新或配置更改。
  • 再次执行相关步骤,对 VM 执行取消预配、解除分配、通用化和创建操作。
  • 将此新映像用于将来的部署。 如果需要,请删除原始映像。

有关使用 CLI 管理 VM 的详细信息,请参阅 Azure CLI 2.0