練習:使用 Azure Container Registry 工作建置和執行容器映像

已完成

在此練習中,您會使用 ACR 工作來執行下列動作:

  • 建立 Azure Container Registry (ACR)
  • 從 Dockerfile 建置和推送映像
  • 驗證結果
  • 在 ACR 中執行映像

必要條件

  • 具有有效訂用帳戶的 Azure 帳戶。 如果還沒有訂閱,則可在 https://azure.com/free 註冊免費試用版。

登入 Azure 並啟動 Cloud Shell

  1. 登入 Azure 入口網站,並開啟 Cloud Shell。

    Cloud Shell 啟動按鈕的位置。

  2. 當命令介面開啟時,請選取 [Bash] 環境。

    選取 Bash 環境。

建立 Azure Container Registry

  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 Container Registry 的開發人員適用的成本最佳化選項。

從 Dockerfile 建置和推送映像

現在使用 Azure Container Registry,根據本機 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. 使用 az acr run 命令,從容器登錄執行 sample/hello-world:v1 容器映像。 以下範例會使用 $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