使用 Docker 运行适用于 Azure Stack Hub 的 PowerShell

在本文中,你可使用 Docker 创建容器,在其中运行使用各种接口所需的 PowerShell 版本。 你可以找到使用 AzureRM 模块和最新 Az 模块的说明。 AzureRM 要求使用基于 Windows 的容器。 Az 使用基于 Linux 的容器。

Docker 先决条件

安装 Docker

  1. 安装 Docker

  2. 在命令行程序(例如 PowerShell 或 Bash)中输入以下内容:

    docker --version
    

使用 PowerShell 设置服务主体

若要使用 PowerShell 访问 Azure Stack Hub 中的资源,需要在 Microsoft Entra 租户中使用服务主体。 通过基于角色的访问控制 (RBAC) 来委派权限。 可能需要向云运营商请求服务主体。

  1. 若要设置服务主体,请按通过创建服务主体向应用程序授予对 Azure Stack Hub 资源的访问权限中的说明操作。

  2. 记下应用程序 ID、机密、租户 ID 和对象 ID 供以后使用。

在 Docker 中运行 PowerShell

在这些说明中,你将运行基于 Linux 的容器映像,该映像包含 PowerShell 和 Azure Stack Hub 所需的模块。

  1. 需要使用 Linux 容器运行 Docker。 运行 Docker 时,请切换到 Linux 容器。

  2. 从已加入 Azure Stack Hub 所在的域的计算机运行 Docker。 如果使用的是 Azure Stack 开发工具包 (ASDK),则在远程计算机上安装 VPN。

在 Linux 容器上安装 Azure Stack Hub Az 模块

  1. 在命令行中运行以下 Docker 命令,以在 Ubuntu 容器中运行 PowerShell:

    docker run -it mcr.microsoft.com/azurestack/powershell
    

    可以运行 Ubuntu 或 Debian。 可在 GitHub 存储库 azurestack-powershell 中找到以下 Docker 文件。 有关 Docker 文件的最新更改,请参阅 GitHub 存储库。 每个 OS 均已标记。 将冒号之后部分的标记替换为所需 OS 的标记。

    Linux Docker 映像
    Ubuntu docker run -it mcr.microsoft.com/azurestack/powershell:ubuntu-18.04
    Debian docker run -it mcr.microsoft.com/azurestack/powershell:debian-9
  2. 可以将此 shell 用于 cmdlet 了。 通过登录并运行 Test-AzureStack.ps1 来测试 shell 连接性。

    首先创建服务主体凭据。 你将需要“机密”和“应用程序 ID” 。 在运行 Test-AzureStack.ps1 检查容器时,还需要“对象 ID”。 可能需要向云运营商请求服务主体。

    键入以下 cmdlet 来创建服务主体对象:

    $passwd = ConvertTo-SecureString <Secret> -AsPlainText -Force
    $pscredential = New-Object System.Management.Automation.PSCredential('<ApplicationID>', $passwd)
    
  3. 通过从 Azure Stack Hub 实例运行具有以下值的以下脚本来连接到你的环境。

    描述
    环境的名称。 Azure Stack Hub 环境的名称。
    资源管理器终结点 资源管理器的 URL。 如果你不知道,请联系你的云运营商。 该 URL 应类似于 https://management.region.domain.com
    目录租户 ID Azure Stack Hub 租户目录的 ID。
    凭据 包含服务主体的对象。 在本例中为 $pscredential
    ./Login-Environment.ps1 -Name <String> -ResourceManagerEndpoint <resource manager endpoint> -DirectoryTenantId <String> -Credential $pscredential
    

    PowerShell 返回帐户对象。

  4. 通过在容器中运行 Test-AzureStack.ps1 脚本来测试环境。 指定服务主体“对象 ID”。 如果未指明对象 ID,脚本仍将运行,但它只是测试租户(用户)模块,无法测试需要管理员权限的模块。

    ./Test-AzureStack.ps1 <Object ID>
    

后续步骤