クイックスタート: Azure Pipelines を使用してアプリをデプロイするコンテナー イメージをビルドする

Azure DevOps Services

このクイックスタートでは、Azure Pipelines を使用してアプリのデプロイ用のコンテナー イメージをビルドする方法を示します。 このイメージをビルドするために必要なのは、リポジトリ内の Dockerfile です。 パイプラインで使用するエージェントに基づいて、Linux または Windows コンテナーをビルドできます。

前提条件

  • アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます
  • GitHub アカウント。 お持ちでない場合は、無料でサインアップしてください。
  • Docker がインストールされている Azure パイプライン Windows または Linux エージェント。

サンプル リポジトリをフォークする

ブラウザーで、次のサンプル リポジトリに移動し、自身の GitHub アカウントにフォークします。

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

Linux または Windows イメージをビルドする

  1. Azure DevOps 組織にサインインし、プロジェクトに移動します。

  2. [パイプライン] に移動し、プロジェクトで最初のパイプラインを作成する場合は [新しいパイプライン] または [パイプラインの作成] を選択します。

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

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

    • サインインするために GitHub にリダイレクトされた場合は、GitHub の資格情報を入力します。
    • Azure Pipelines アプリをインストールするために GitHub にリダイレクトされた場合は、[承認してインストール] を選択します。
  5. azure-pipelines.yml の内容を次のコードに置き換えます。 Linux と Windows のどちらのアプリをデプロイするかに基づいて、必ず、vmImage をそれぞれ ubuntu-latest または windows-latest に設定してください。

     trigger:
     - main
    
     pool:
       vmImage: 'ubuntu-latest' 
    
     variables:
       imageName: 'pipelines-javascript-docker'
    
     steps:
     - task: Docker@2
       displayName: Build an image
       inputs:
         repository: $(imageName)
         command: build
         Dockerfile: app/Dockerfile
    
  6. 完了したら、[保存して実行] を選択します。

  7. azure-pipelines.yml ファイルをリポジトリに追加すると、コミット メッセージを追加するように求められます。 メッセージを入力し、[保存して実行] を選択します。

セルフホステッド エージェントを使用する場合は、エージェントのホストに Docker がインストールされていることと、昇格された特権で Docker エンジン/デーモンが実行されていることを確認します。

イメージをビルドするには、エージェントのホストに Docker をインストールし、Docker エンジン/デーモンを管理者特権で実行する必要があります。 YAML パイプライン エディターを使用してパイプラインを作成するには、次の手順に従います。

  1. コレクションに移動し、プロジェクトを作成します。
  2. プロジェクト内で、[パイプライン] を選択します。
  3. [Create Pipeline] を選択します。
  4. ソース コードの場所として [GitHub Enterprise Server] を選択します。
  5. まだであれば、GitHub Enterprise Server アカウントに接続する Azure Pipelines を承認します。
    1. [GitHub Enterprise Server に接続する] を選択します。
    2. アカウントの詳細を入力し、[確認して保存] を選択します。
  6. リポジトリを選択します。 Azure Pipelines アプリをインストールするために GitHub にリダイレクトされた場合は、[承認してインストール] を選択します。
  7. パイプラインを構成するには、[Docker イメージのビルド] テンプレートを選択します。
  8. YAML パイプラインで、YAML ファイルの内容を次のコードに置き換えます。 プール名を、セルフホステッド エージェントを含むプールの名前に Docker 機能を使用して置き換えます。
# Docker
# Build a Docker image
# https://docs.microsoft.com/azure/devops/pipelines/languages/docker

trigger:
- main

pool:
  name: default
  demands: docker

variables:
  imageName: 'pipelines-javascript-docker'

steps:
 - task: Docker@2
   displayName: Build an image
   inputs:
     repository: $(imageName)
     command: build
     Dockerfile: '$(Build.SourcesDirectory)/app/Dockerfile'

  1. [保存して実行] を選択します。
  2. [保存して実行] ページで、もう一度 [保存して実行] を選択します。

Docker イメージのビルドの詳細については、このサンプル アプリケーションで使用されている Docker タスクを参照してください。 コマンド ライン タスクを使用して、Docker コマンドを直接呼び出すこともできます。

コンテナー イメージがビルドされ、エージェントに格納されます。 イメージは、Google Container Registry、Docker Hub、または Azure Container Registry にプッシュできます。 詳細については、Docker Hub または Google Container Registry へのイメージのプッシュまたは Azure Container Registry へのイメージのプッシュに関する情報を参照してください。

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

このアプリケーションを引き続き使用する予定がない場合は、パイプラインとコード リポジトリを削除します。

よく寄せられる質問

コンテナー イメージをビルドするために使用できるエージェントは何ですか?

  • Microsoft ホステッド Ubuntu エージェントまたは Linux プラットフォーム ベースのセルフホステッド エージェントを使うと、Linux コンテナー イメージをビルドできます。

  • Microsoft ホステッド Windows エージェントまたは Windows プラットフォーム ベースのセルフホステッド エージェントを使うと、Windows コンテナー イメージをビルドできます。 すべての Microsoft ホステッドで Windows プラットフォーム ベースのエージェントには、Docker のビルドに必要な Moby エンジンとクライアントが付属しています。

  • 現在、Microsoft ホステッド macOS エージェントを使って、コンテナー イメージをビルドすることはできません。これは、イメージのビルドに必要な Moby エンジンがこれらのエージェントにプレインストールされていないためです。

詳しくは、Microsoft ホステッド エージェントで使用できる Windows と Linux のエージェントのオプションに関する記事をご覧ください。

ホステッド エージェントでは、どのような事前キャッシュ済み Docker イメージを使用できますか?

コンテナー レジストリからすべてのジョブの Docker イメージをプルする間隔が長くならないように、一般的に使用される一部のイメージが、Microsoft ホステッド エージェントに事前にキャッシュされます。

Docker ビルドの BuildKit 変数はどのように設定しますか?

BuildKit では、パフォーマンス、ストレージ管理、機能、セキュリティに関するビルドの機能強化が行われています。 BuildKit は現在、Windows ホストではサポートされていません。

BuildKit を使用して Docker ビルドを有効にするには、DOCKER_BUILDKIT 変数を設定します。

trigger:
- main
   
pool:
  vmImage: 'ubuntu-latest'
   

variables:
  imageName: 'pipelines-javascript-docker'
  DOCKER_BUILDKIT: 1
    
steps:
- task: Docker@2
  displayName: Build an image
  inputs:
    repository: $(imageName)
    command: build
    Dockerfile: app/Dockerfile

セルフホステッド エージェントを使うにはどうすればよいですか?

Docker がインストールされ、エージェントのホストでエンジン/デーモンが実行されている必要があります。 Docker がエージェントのホストにインストールされていない場合は、Docker インストーラー タスクをパイプラインに追加できます。 Docker タスクの前に Docker インストーラー タスクを追加する必要があります。

Docker タスクを使用する代わりに、スクリプトベースの Docker ビルドを作成するにはどうすればよいですか?

build コマンドまたはその他の Docker コマンドを使用できます。

docker build -f Dockerfile -t foobar.azurecr.io/hello:world .

このコマンドにより、Docker タスクでビルドされたものと同等のイメージが作成されます。 内部的に、Docker タスクによって、スクリプトで Docker バイナリが呼び出され、さらにいくつかのコマンドが結合され、さらにいくつかの利点が得られます。 詳しくは、Docker タスクに関するページを参照してください。

Azure Pipelines でのビルド中にレイヤー キャッシュを再利用できますか?

Microsoft ホステッド エージェントを使用している場合、すべてのジョブは、azure-pipelines-image-generation リポジトリのテンプレートから生成されたイメージに基づいて、新しくプロビジョニングされた仮想マシンにディスパッチされます。 これらの仮想マシンは、ジョブの完了後にクリーンアップされます。 この短期の有効期間により、これらの仮想マシンを以降のジョブに再利用したり、キャッシュされた Docker レイヤーを再利用したりできなくなります。 回避策として、2 つのイメージを生成し、それらを早期にイメージ レジストリにプッシュするマルチステージ ビルドを設定できます。 その後、--cache-from 引数を使用して、これらのイメージをキャッシュ ソースとして使用するように Docker に指示できます。

セルフホステッド エージェントを使用している場合は、短期の有効期間の問題がこれらのエージェントには当てはまらないため、回避策なしで Docker レイヤーをキャッシュできます。

x64 以外のアーキテクチャ用の Linux コンテナー イメージをビルドするにはどうすればよいですか?

Microsoft ホステッド Linux エージェントを使うと、x64 アーキテクチャ用の Linux コンテナー イメージが作成されます。 x86 や ARM プロセッサなどの他のアーキテクチャ用のイメージを作るには、QEMU などのマシン エミュレーターを使用できます。

次の手順では、QEMU を使用して ARM プロセッサ コンテナー イメージを作成する方法を示します。

  1. ターゲット アーキテクチャに一致する基本イメージを使用して Dockerfile を作成します。

    FROM arm64v8/alpine:latest
    
  2. イメージをビルドする前に、ジョブで次のスクリプトを実行します。

    # register QEMU binary - this can be done by running the following image
    docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
    # build your image
    

詳細については、GitHub の qemu-user-static を参照してください。

コンテナー化されたアプリケーションのテストを実行し、テスト結果を発行するにはどうすればよいですか?

コンテナー化されたアプリケーションのテストとそのテスト結果の発行に関するさまざまなオプションについては、テスト結果の発行タスクに関する記述を参照してください。

次のステップ

コンテナー イメージをビルドした後、Azure Container Registry、Docker Hub、または Google Container Registry にイメージをプッシュします。 コンテナー レジストリにイメージをプッシュする方法を学習する場合は、次のいずれかの記事に進んでください。