练习:使用 Azure 容器注册表任务来生成和运行容器映像

已完成

在此练习中,使用 ACR 任务执行以下操作:

  • 创建 Azure 容器注册表 (ACR)
  • 从 Dockerfile 生成和推送映像
  • 验证结果
  • 运行 ACR 中的映像

先决条件

  • 具有活动订阅的 Azure 帐户。 如果你还没有该订阅,可在 https://azure.com/free 注册免费试用版

登录到 Azure 并启动 Cloud Shell

  1. 登录到 Azure 门户,并打开 Cloud Shell。

    Cloud Shell 启动按钮的位置。

  2. shell 打开时,选择“Bash”环境。

    选择 Bash 环境。

创建 Azure 容器注册表

  1. 为注册表创建资源组。 将以下命令中的 <myLocation> 替换为你附近的位置。

    az group create --name az204-acr-rg --location <myLocation>
    
  2. 创建一个基本容器注册表。 注册表名称在 Azure 中必须唯一,并且包含 5-50 个字母数字字符。 将以下命令中的 <myContainerRegistry> 替换为唯一值。

    az acr create --resource-group az204-acr-rg \
        --name <myContainerRegistry> --sku Basic
    

    注意

    命令会创建一个基本注册表,这是一个成本优化选项,供开发人员了解 Azure 容器注册表。

从 Dockerfile 生成和推送映像

现在,使用 Azure 容器注册表基于本地 Dockerfile 生成映像并对其进行推送。

  1. 创建或导航到本地目录,然后使用以下命令创建 Dockerfile。 Dockerfile 包含一行,该行引用托管在 Microsoft Container Registry 的 hello-world 映像。

    echo FROM mcr.microsoft.com/hello-world > Dockerfile
    
  2. 运行 az acr build 命令生成映像,映像生成成功后,将其推送到注册表。 将 <myContainerRegistry> 替换为之前使用的名称。

    az acr build --image sample/hello-world:v1  \
        --registry <myContainerRegistry> \
        --file Dockerfile .
    

    下面是上一个命令输出的缩短示例,其中显示了最后几行和最终结果。 可在 repository 字段中看到列出了 sample/hello-word 映像。

    - image:
        registry: <myContainerRegistry>.azurecr.io
        repository: sample/hello-world
        tag: v1
        digest: sha256:92c7f9c92844bbbb5d0a101b22f7c2a7949e40f8ea90c8b3bc396879d95e899a
      runtime-dependency:
        registry: mcr.microsoft.com
        repository: hello-world
        tag: latest
        digest: sha256:92c7f9c92844bbbb5d0a101b22f7c2a7949e40f8ea90c8b3bc396879d95e899a
      git: {}
    
    
    Run ID: cf1 was successful after 11s
    

验证结果

  1. 使用 az acr repository list 命令列出注册表中的存储库。 将 <myContainerRegistry> 替换为之前使用的名称。

    az acr repository list --name <myContainerRegistry> --output table
    

    输出:

    Result
    ----------------
    sample/hello-world
    
  2. 使用 az acr repository show-tags 命令列出 sample/hello-world 存储库中的标记。 将 <myContainerRegistry> 替换为之前使用的名称。

    az acr repository show-tags --name <myContainerRegistry> \
        --repository sample/hello-world --output table
    

    输出:

    Result
    --------
    v1
    

运行 ACR 中的映像

  1. 使用 sample/hello-world:v1 命令从容器注册表运行 az acr run 容器映像。 以下示例使用 $Registry 指定运行命令的注册表。 将 <myContainerRegistry> 替换为之前使用的名称。

    az acr run --registry <myContainerRegistry> \
        --cmd '$Registry/sample/hello-world:v1' /dev/null
    

    此示例中的 cmd 参数以其默认配置运行容器,但 cmd 支持其他 docker run 参数甚至其他 docker 命令。

    以下示例输出已缩短:

    Packing source code into tar to upload...
    Uploading archived source code from '/tmp/run_archive_ebf74da7fcb04683867b129e2ccad5e1.tar.gz'...
    Sending context (1.855 KiB) to registry: mycontainerre...
    Queued a run with ID: cab
    Waiting for an agent...
    2019/03/19 19:01:53 Using acb_vol_60e9a538-b466-475f-9565-80c5b93eaa15 as the home volume
    2019/03/19 19:01:53 Creating Docker network: acb_default_network, driver: 'bridge'
    2019/03/19 19:01:53 Successfully set up Docker network: acb_default_network
    2019/03/19 19:01:53 Setting up Docker configuration...
    2019/03/19 19:01:54 Successfully set up Docker configuration
    2019/03/19 19:01:54 Logging in to registry: mycontainerregistry008.azurecr.io
    2019/03/19 19:01:55 Successfully logged into mycontainerregistry008.azurecr.io
    2019/03/19 19:01:55 Executing step ID: acb_step_0. Working directory: '', Network: 'acb_default_network'
    2019/03/19 19:01:55 Launching container with name: acb_step_0
    
    Hello from Docker!
    This message shows that your installation appears to be working correctly.
    
    2019/03/19 19:01:56 Successfully executed container: acb_step_0
    2019/03/19 19:01:56 Step ID: acb_step_0 marked as successful (elapsed time in seconds: 0.843801)
    
    Run ID: cab was successful after 6s
    

清理资源

不再需要时,可使用 az group delete 命令删除此处存储的资源组、容器注册表和容器映像。

az group delete --name az204-acr-rg --no-wait