次の方法で共有


Docker イメージをビルドして Azure Container Registry に発行する

Azure DevOps Services | Azure DevOps Server 2022

Azure Pipelines を使用して、Docker イメージをビルドして Azure Container Registry に発行するようにパイプライン ワークフローを設定できます。 この記事では、次のことについて説明します。

  • Azure Container Registry を作成する
  • Azure VM でセルフホステッド エージェントを設定する
  • 管理対象サービス ID を設定する
  • Docker レジストリ サービス接続を作成する
  • イメージをビルドして Azure Container Registry に発行する

前提条件

コードを取得する

サンプル アプリをフォークまたは複製して、このチュートリアルの手順に従ってください。

https://github.com/MicrosoftDocs/pipelines-javascript-docker

Azure Container Registry を作成する

  1. Azure Portalに移動します。

  2. 左側のナビゲーション パネルから [リソースの作成] を選択し、[コンテナー][コンテナー レジストリ] の順に選択します。

  3. ご使用のサブスクリプションを選択し、ご使用のリソース グループを選択するか、新しく作成します。

  4. コンテナーレジストリのレジストリ名を入力します。 レジストリ名は Azure 内で一意にする必要があります。また、5 文字以上で構成する必要があります。

  5. ご希望の場所SKU を選択し、[レビューと作成] を選択します。

  6. 設定をレビューし、終わったら [作成] を選択します。

セルフホステッド エージェント VM を設定する

マネージド サービス ID と Azure Pipelines を併用して Docker イメージを Azure Container Registry に発行するには、Azure VM で独自のセルフホステッド エージェントを設定する必要があります。

VM の作成

  1. Azure Portalに移動します。

  2. 左側のナビゲーション パネルから [リソースの作成] を選択し、[仮想マシン] ->[作成] を選択します。

  3. ご使用のサブスクリプションを選択してから、コンテナー レジストリの作成時に使用したリソース グループを選択します。

  4. 仮想マシンに名前を付け、イメージを選択します。

  5. ユーザー名パスワードを入力してから、[レビューと作成] を選択します。

  6. 設定をレビューして、終わったら [作成] を選択します。

  7. 展開が完了したら、[リソースに移動] を選択します。

エージェント プールを作成する

  1. Azure DevOps プロジェクトから、歯車アイコン 歯車アイコン を選択して、[プロジェクト設定] に移動します。

  2. [エージェント プール] を選択してから、[プールの追加] を選択します。

  3. [新規] を選択し、[セルフホステッド][プール タイプ] ドロップダウン メニューから選択します。

  4. プールに名前を付け、[すべてのパイプラインへのアクセス許可を与える] チェックボックスをオンにします。

  5. 完了したら [作成] を選択します。

  6. この時点で、以前に作成したプールを選択して [新規エージェント] を選択します。

  7. このウィンドウの手順を使用して、以前に作成した VM でエージェントを設定します。 [コピー] ボタンを選択して、クリップボードにダウンロード リンクをコピーします。

    エージェントを設定する方法を示すスクリーンショット。

個人用アクセス トークンを作成する

  1. Azure DevOps プロジェクトから、[ユーザー設定] を選択し、[個人用アクセス トークン] を選択します。

  2. [新しいトークン] を選択して、新しい個人用アクセス トークンを作成します。

  3. PAT の名前を入力してから、有効期限を選択します。

  4. [カスタム定義][スコープ] 内で選択してから、[すべてのスコープを表示する] を選択します。

  5. [エージェント プール] ->[読み取りおよび管理]、さらに [配置グループ] ->[読み取りおよび管理] を選択します。

  6. 完了したら [作成] を選択し、PAT を安全な場所に保存します。

セルフホステッド エージェントを設定する

  1. Azure portal で、VM に接続します。

  2. 管理者特権での PowerShell コマンド プロンプトで、次のコマンドを実行してエージェントをダウンロードします。

    Invoke-WebRequest -URI <YOUR_AGENT_DOWNLOAD_LINK> -UseBasicParsing  -OutFile <FILE_PATH> 
    ##Example: Invoke-WebRequest -URI https://vstsagentpackage.azureedge.net/agent/2.213.2/vsts-agent-win-x64-2.213.2.zip -OutFile C:\vsts-agent-win-x64-2.213.2.zip
    
  3. 次のコマンドを実行し、エージェントを抽出して作成します。

    mkdir agent ; cd agent
    Add-Type -AssemblyName System.IO.Compression.FileSystem ; [System.IO.Compression.ZipFile]::ExtractToDirectory("<FILE_PATH>", "$PWD")
    
  4. 次のコマンドを実行して、エージェントの構成を始めます。

    .\config.cmd
    
  5. サーバー URL の入力を求められたら入力します。 例: https://dev.azure.com/fabrikamFiber

  6. 認証タイプを尋ねるダイアログが表示されたら Enter キーを押して、PAT 認証を選択します。

  7. 以前に作成した個人用アクセス トークンを貼り付けてから、Enter キーを押します。

  8. エージェント プールの名前を入力してから、エージェント名を入力します。

  9. 作業フォルダーは既定値のままにし、エージェントをサービスとして実行する際に「Y」と入力します。

    Azure VM でエージェントを設定する方法を示すスクリーンショット。

  10. エージェントでジョブのリッスンを開始する準備ができたので、続いて VM に Docker をインストールします。 次のコマンドを実行して、Docker をダウンロードします。

    Invoke-WebRequest -URI https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe -OutFile <DOWNLOAD_PATH>
    
  11. ダウンロード パスに移動してから、次のコマンドを実行し、Docker をインストールして開始します。

    Start-Process 'Docker%20Desktop%20Installer.exe' -Wait install
    
  12. 続いてエージェント フォルダーに戻り、cmd ファイルを実行して、Azure VM でエージェントを実行します。

    .\run.cmd
    
  13. この時点で、Azure DevOps ポータルの [エージェント プール] ->[エージェント] にご使用のエージェントがリストされているはずです。

    [エージェント] タブ内の使用できるエージェントを示すスクリーンショット。

マネージド ID を設定する

  1. Azure portal で、以前に作成した VM に移動します。

  2. 左側のナビゲーション パネルから [ID] を選択してから、システム割り当て ID を有効にします。

  3. 完了したら [保存] を選択し、選択内容を確認します。

    システム割り当て ID を有効にする方法を示すスクリーンショット。

  4. [Azure ロールの割り当て] を選択し、[ロールの割り当てを追加] を選択します。

  5. [リソース グループ][スコープ] ドロップダウン メニューから選択します。

  6. ご使用のサブスクリプションリソース グループを選択してから、AcrPush ロールを選択します。

  7. 手順 5 と 6 を繰り返して、AcrPull ロールを追加します。

    acrpull ロールと acrpush ロールを設定する方法を示すスクリーンショット。

Docker レジストリ サービス接続を作成する

  1. Azure DevOps プロジェクトから、歯車アイコン 歯車アイコン を選択して、[プロジェクト設定] に移動します。

  2. 左側のウィンドウから [サービス接続] を選択します。

  3. [新しいサービス接続] を選択し、[Docker レジストリ] を選択して、[次へ] を選択します。

  4. [Azure Container Registry] を選択してから、[マネージド サービス ID][認証の種類] として選択します。

  5. サブスクリプションID サブスクリプション名と、Azure コンテナー レジストリ ログイン サーバーを入力します。 前の手順で作成した VM のシステム割り当てテナント ID を [テナント ID] テキスト フィールドに貼り付けます。

  6. サービス接続の名前を入力し、[すべてのパイプラインへのアクセス許可を与える] チェック ボックスをオンにします。 このオプションを選択するには、サービス接続管理者ロールが必要です。

  7. 完了したら、[保存] を選択します。

    Docker レジストリ サービス接続 MSI を設定する方法を示すスクリーンショット。

ビルドと Azure Container Registry への発行

  1. Azure DevOps プロジェクトから、[Pipelines] を選択し、[パイプラインの作成] を選択します。

  2. ソース コードをホストしているサービスを選択します (Azure Repos や GitHub など)。

  3. リポジトリを選択してから、[スタート パイプライン] を選択します。

  4. 既定の YAML パイプラインを削除し、次のスニペットを使用します。

    trigger:
    - main
    
    variables:
      dockerRegistryServiceConnection: '<SERVICE_CONNECTION_NAME>'
      imageRepository: '<IMAGE_NAME>'
      dockerfilePath: '$(Build.SourcesDirectory)/app/Dockerfile'
      tag: '$(Build.BuildId)'
    
    stages:
    - stage: Build
      displayName: Build and publish stage
      jobs:
      - job: Build
        displayName: Build job
        pool:
          name: '<YOUR_AGENT_POOL_NAME>'
        steps:
        - task: DockerInstaller@0
          inputs:
            dockerVersion: '17.09.0-ce'
    
        - task: Docker@2
          displayName: Build and publish image to Azure Container Registry
          inputs:
            command: buildAndPush
            containerRegistry: $(dockerRegistryServiceConnection)
            repository: $(imageRepository)
            dockerfile: $(dockerfilePath)
            tags: |
              $(tag)
    
  5. パイプラインの実行が完了したら、Azure でイメージを確認できます。 Azure portal で Azure Container Registry に移動してから、[リポジトリ] を選択します。

    Azure portal のイメージを示すスクリーンショット。

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

このアプリケーションを引き続き使用する予定がない場合は、リソース グループを削除して、継続的な料金が発生しないようにします。

az group delete --name myapp-rg