Docker YAML を使用して Docker イメージをビルドし、Azure Container Registry にプッシュします。

Azure DevOps Services

このチュートリアルでは、Azure Pipelines Docker テンプレートに基づくパイプラインを使用して、コンテナ化されたアプリケーションを構築し、Azure Container Registry にプッシュする方法について説明します。 このテンプレートでは、新しいコード リポジトリの変更によってパイプラインがトリガーされ、更新された Docker イメージをビルドしてレジストリに発行する継続的インテグレーション YAML パイプラインが設定されます。

Docker コンテナー テンプレート パイプラインは、Microsoft がホストするエージェントを使用し、Azure Container Registry へのサービス プリンシパル ベースのサービス接続を作成します。 セルフホステッド エージェントと自分で作成したサービス接続を使用して同様のプロセスを実行するパイプラインについては、「Docker イメージをビルドして Azure Container Registry にプッシュする」を参照してください。

前提条件

サンプル アプリを入手する

GitHub で、Sample Docker and Kubernetes Node.JS app リポジトリをフォークまたは複製します。

コンテナー レジストリを作成する

  1. Azure Portal の上部にあるメニュー バーのアイコンを選択して Azure Cloud Shell にサインインします。 Bash シェルをかならず使用します。

    Azure Cloud Shell のボタン

  2. Cloud Shell で次のコマンドを実行し、Azure CLI を使用してリソース グループと Azure Container Registry を作成します。 Container Registry 名は小文字で入力する必要があります。

    az group create --name myapp-rg --location eastus
    az acr create --resource-group myapp-rg --name mycontainerregistry --sku Basic
    
  3. Docker イメージを Azure Container Registry にデプロイするには、レジストリの管理者ユーザー アカウントを有効にする必要があります。このアカウントは既定で無効になっています。 レジストリの管理者ユーザーを有効にするには、az acr update コマンドで --admin-enabled パラメータを使用します。 詳細と指示については、「管理者アカウント」を参照してください。

    az acr update -n <acrName> --admin-enabled true
    

または、Azure Portal UI を使用してAzure Container Registry を作成することもできます。 手順については、「Container Registry を作成する」を参照してください。 レジストリを作成した後、[プロパティ] で管理者アカウントを有効にします。

パイプラインを作成する

  1. Azure DevOpsプロジェクトで、このパイプラインが最初のパイプラインである場合は、[パイプライン]>[新規パイプライン] の順に選択するか、[パイプラインを作成] を選択します。

    [新しいパイプラインの作成] 画面が表示されたスクリーンショット。

  2. ソース コードの場所として [GitHub] を選択します。

  3. [リポジトリを選択] 画面で、サンプル コード リポジトリを選択します。

  4. [パイプラインの構成] 画面で、[Docker: イメージをビルドし Azure Container Registry にプッシュする] パイプラインを選択します。

    Docker イメージをビルドして Azure Container Registry にプッシュするパイプラインが選択されているスクリーンショット。

  5. [Docker] 画面で、Azure サブスクリプション > [続行] の順に選択します。

  6. ドロップダウン メニューで [Container Registry] を選択し、[イメージ名] を指定したら、[検証と構成] を選択します。

    イメージをビルドして Azure Container Registry にプッシュする Docker パイプラインの構成方法を示すスクリーンショット。

    Azure Pipeline は、パイプラインを定義する azure-pipelines.yml ファイルを生成します。

  7. azure-pipelines.yml のコードを見直し、[保存して実]行 を選択します。

    新しい YAML パイプラインの [保存して実行] ボタンを示すスクリーンショット。

  8. 必要に応じて、[メッセージをコミット] を編集し、説明を入力します。 次に、[保存して実行] を再度選択し、azure-pipelines.yml ファイルをリポジトリにコミットして、ビルドを開始します。

  9. [ビルド実行] ページには、ビルドの詳細を進行状況が表示されます。 動作中のパイプラインを確認するには、[ジョブ][ビルド] を選択します。

    [ジョブ実行] ページの [ビルド] リンクを示すスクリーンショット。

パイプラインの詳細

パイプラインは、Docker container テンプレートから生成されます。 ビルドの段階では、[Docker v2 タスク] を使用して、Docker イメージをビルドし、Container Registry にプッシュします。

Docker タスクは、[Docker レジストリ サービス接続] と サービス プリンシパル認証を使用して、パイプラインを有効化し、イメージを Container Registry にプッシュします。 Docker container テンプレートは、パイプラインの作成時に、このサービス接続を生成します。

- stage: Build
  displayName: Build and push stage
  jobs:  
  - job: Build
    displayName: Build job
    pool:
      vmImage: $(vmImageName)
    steps:
    - task: Docker@2
      displayName: Build and push an image to container registry
      inputs:
        command: buildAndPush
        repository: $(imageRepository)
        dockerfile: $(dockerfilePath)
        containerRegistry: $(dockerRegistryServiceConnection)
        tags: |
          $(tag)

リソースをクリーンアップする

このチュートリアルで作成したリソースの使用が終了したら、これ以上料金が発生しないように、リソースを削除できます。 次の Cloud Shell コマンドを実行して、リソース グループとそれに属するすべてのリソースを削除します。

az group delete --name myapp-rg