コンテナ イメージのビルド

このページでは、Docker イメージをビルドして格納するように Cloud Build を構成する方法について説明します。Cloud Build を初めて使用する場合は、最初にクイックスタートビルド構成の概要をご覧ください。

Cloud Build では、事前にビルドされたイメージが用意されています。このイメージを Cloud Build 構成ファイルで参照してタスクを実行できます。 これらのイメージは Google Cloud でサポートされ、管理されています。サポートされているビルド済みの Docker イメージを使用して Docker コマンドを実行し、Docker イメージをビルドできます。

始める前に

このページの説明は、Docker の知識があることを前提としています。また、次の準備が必要です。

ビルド構成ファイルによるビルド

ビルド構成ファイルを使用して Docker イメージをビルドするには、次のことを行います。

  1. アプリケーションのソースコードと Dockerfile が含まれているディレクトリに、cloudbuild.yaml または cloudbuild.json という名前でファイルを作成します。
  2. ビルド構成ファイルで、次のことを行います。

    • name フィールドを追加し、事前にビルドされている Docker イメージを指定します。事前にビルドされたイメージは、Container Registry の gcr.io/cloud-builders/docker に保存されています。以下の構成ファイルの例では、Cloud Build が使用するビルド済みの Docker イメージが name フィールドに指定されています。このイメージは、args フィールドで指定されたタスクの実行に使用されます。
    • args フィールドに引数を追加してイメージをビルドします。

      YAML

      steps:
      - name: 'gcr.io/cloud-builders/docker'
        args: [ 'build', '-t', 'gcr.io/PROJECT_ID/IMAGE_NAME', '.' ]
      

      JSON

      {
       "steps": [
        {
            "name": "gcr.io/cloud-builders/docker",
            "args": [
              "build",
              "-t",
              "gcr.io/PROJECT_ID/IMAGE_NAME",
              "."
             ]
         }
         ]
       }
      

      上記のビルド構成のプレースホルダ値を、次のように置き換えます。

      • PROJECT_ID: 実際の Cloud プロジェクト ID。
      • IMAGE_NAME: コンテナ イメージの名前。
  3. ビルド構成ファイルを使用してビルドを開始します。

    gcloud builds submit --config CONFIG_FILE_PATH SOURCE_DIRECTORY
    

    上記のコマンドのプレースホルダ値を次のように置き換えます。

    • CONFIG_FILE_PATH: ビルド構成ファイルのパス。
    • SOURCE_DIRECTORY: ソースコードのパスまたは URL。

    gcloud builds submit コマンドに CONFIG_FILE_PATHSOURCE_DIRECTORY を指定しないと、Cloud Build は、構成ファイルとソースコードが現在の作業ディレクトリにあることを前提とします。

Dockerfile によるビルド

Cloud Build では、Dockerfile のみを使用して Docker イメージをビルドできます。個別のビルド構成ファイルは不要です。

Dockerfile を使用してビルドするには、ソースコードと Dockerfile が格納されているディレクトリから次のコマンドを実行します。

    gcloud builds submit --tag gcr.io/PROJECT_ID/IMAGE_NAME

上記のコマンドのプレースホルダ値を次のように置き換えます。

  • PROJECT_ID: 実際の Cloud プロジェクト ID。
  • IMAGE_NAME: コンテナ イメージの名前。

Cloud Native Buildpack によるビルド

Cloud Build では、Dockerfile またはビルド構成ファイルなしでイメージをビルドできます。これは、Cloud Native Buildpacks を使用して行うことができます。

Buildpacks を使用してビルドするには、ソースコードが格納されているディレクトリから次のコマンドを実行します。

    gcloud builds submit --pack builder=BUILDPACK_BUILDER, \
        env=ENVIRONMENT_VARIABLE, \
        image=IMAGE

上記のコマンドのプレースホルダ値を次のように置き換えます。

  • BUILDPACK_BUILDER: 使用する Buildpacks のビルダー。ビルダーを指定しない場合、Cloud Build はデフォルトで gcr.io/buildpacks/builder を使用します。
  • ENVIRONMENT_VARIABLE: ビルドの環境変数。
  • IMAGE: Container Registry にあるイメージの URL。イメージ名は、gcr.io/ 名前空間か pkg.dev 名前空間に存在する必要があります。

次にコマンドの例を示します。

  • デフォルトの gcr.io/buildpacks/builder を使用してビルドを実行し、イメージ gcr.io/gcb-docs-project/hello を作成します。

      gcloud alpha builds submit --pack image=gcr.io/gcb-docs-project/hello
    
  • 区切り文字に ^--^ を使用して、複数の環境変数をビルドに渡します。引数のエスケープについての詳細は、gcloud topic escaping をご覧ください。

      gcloud builds submit --pack \
          ^--^image=gcr.io/my-project/myimage--env=GOOGLE_ENTRYPOINT='java -jar target/myjar.jar',GOOGLE_RUNTIME_VERSION='3.1.301'
    

イメージを Container Registry に保存する

ビルド済みのイメージを次のいずれかの方法で格納するように Cloud Build を構成できます。

  • images フィールドを使用する。ビルドが完了した後、Container Registry にイメージを格納します。
  • docker push コマンドを使用する。ビルドフローの中で Container Registry にイメージを格納します。

images フィールドを使用した場合と Docker push コマンドを使用した場合の違いは、images フィールドを使用した場合、保存されたイメージがビルド結果に表示されることです。たとえば、Cloud Console の [ビルドの説明] ページや、Build.get() の結果、gcloud builds list の結果に表示されます。一方、Docker push コマンドを使用してビルドされたイメージを保存すると、イメージはビルド結果に表示されません。

ビルドフローの中でイメージを保存し、ビルドの結果にイメージを表示する場合は、ビルド構成ファイルで Docker の push コマンドと images フィールドの両方を使用します。

ビルドの完了後に Container Registry にコンテナ イメージを格納するには次のことを行います

  1. アプリケーションのソースコードと Dockerfile が含まれているディレクトリに、cloudbuild.yaml または cloudbuild.json という名前でファイルを作成します。
  2. ビルド構成ファイルに、イメージをビルドするビルドステップを追加して、images フィールドを追加してビルドイメージを指定します。これにより、Container Registry にイメージが格納されます。以下のスニペットは、イメージをビルドして Container Registry に格納するビルド構成を示しています。

    YAML

    steps:
    - name: 'gcr.io/cloud-builders/docker'
      args: ['build', '-t', 'gcr.io/PROJECT_ID/IMAGE_NAME', '.']
    images: ['gcr.io/PROJECT_ID/IMAGE_NAME']
    

    JSON

    {
    "steps": [
    {
        "name": "gcr.io/PROJECT_ID/IMAGE_NAME",
        "args": [
            "build",
            "-t",
            "gcr.io/PROJECT_ID/IMAGE_NAME",
            "."
        ]
    }
    ],
    "images": [
        "gcr.io/PROJECT_ID/IMAGE_NAME"
    ]
    }
    

    ここで

    • PROJECT_ID は Cloud プロジェクト ID です。
    • IMAGE_NAME はコンテナ イメージの名前です。
  3. ビルド構成ファイルを使用してビルドを開始します。

    gcloud builds submit --config CONFIG_FILE_PATH SOURCE_DIRECTORY
    

    ここで

    • CONFIG_FILE_PATH は、ビルド構成ファイルへのパスです。
    • SOURCE_DIRECTORY は、ソースコードのパスまたは URL です。

ビルドフローの中で Container Registry にイメージを格納するには次のことを行います

  1. アプリケーションのソースコードと Dockerfile が含まれているディレクトリに、cloudbuild.yaml または cloudbuild.json という名前でファイルを作成します。

  2. ビルド構成ファイルで、イメージをビルドする docker ビルドステップを追加します。さらに、別の docker ビルドステップを追加して引数を渡し、push コマンドを呼び出します。

    YAML

    steps:
    - name: 'gcr.io/cloud-builders/docker'
      args: ['build', '-t', 'gcr.io/PROJECT_ID/IMAGE_NAME', '.']
    - name: 'gcr.io/cloud-builders/docker'
      args: ['push', 'gcr.io/PROJECT_ID/IMAGE_NAME']
    

    JSON

    {
      "steps": [
       {
          "name": "gcr.io/cloud-builders/docker",
          "args": [
              "build",
              "-t",
              "gcr.io/PROJECT_ID/IMAGE_NAME",
              "."
           ]
       },
       {
           "name": "gcr.io/cloud-builders/docker",
           "args": [
              "push",
              "gcr.io/PROJECT_ID/IMAGE_NAME"
            ]
       }
      ]
    }
    

    ここで

    • PROJECT_ID は Cloud プロジェクト ID です。
    • IMAGE_NAME はコンテナ イメージの名前です。
  3. ビルド構成ファイルを使用してビルドを開始します。

    gcloud builds submit --config CONFIG_FILE_PATH SOURCE_DIRECTORY
    

    ここで

    • CONFIG_FILE_PATH は、ビルド構成ファイルへのパスです。
    • SOURCE_DIRECTORY は、ソースコードのパスまたは URL です。

ビルドフローの中でイメージを格納し、ビルド結果にイメージを表示するには次のことを行います

  1. アプリケーションのソースコードと Dockerfile が含まれているディレクトリに、cloudbuild.yaml または cloudbuild.json という名前でファイルを作成します。
  2. ビルド構成ファイルで、push コマンドを呼び出す Docker 起動ステップをイメージのビルドステップの後に追加し、images フィールドを追加します

    YAML

    steps:
    - name: 'gcr.io/cloud-builders/docker'
      args: ['build', '-t', 'gcr.io/PROJECT_ID/IMAGE_NAME', '.']
    - name: 'gcr.io/cloud-builders/docker'
      args: ['push', 'gcr.io/PROJECT_ID/IMAGE_NAME']
    images: ['gcr.io/PROJECT_ID/IMAGE_NAME']
    

    JSON

    {
        "steps": [
       {
           "name": "gcr.io/cloud-builders/docker",
           "args": [
               "build",
               "-t",
               "gcr.io/PROJECT_ID/IMAGE_NAME",
               "."
            ]
       },
       {
           "name": "gcr.io/cloud-builders/docker",
           "args": [
               "push",
               "gcr.io/PROJECT_ID/IMAGE_NAME"
            ]
       }
       ],
        "images": [
           "gcr.io/PROJECT_ID/IMAGE_NAME"
        ]
    }
    

    ここで

    • PROJECT_ID は Cloud プロジェクト ID です。
    • IMAGE_NAME はコンテナ イメージの名前です。
  3. ビルド構成ファイルを使用してビルドを開始します。

    gcloud builds submit --config CONFIG_FILE_PATH SOURCE_DIRECTORY
    

    ここで

    • CONFIG_FILE_PATH は、ビルド構成ファイルへのパスです。
    • SOURCE_DIRECTORY は、ソースコードのパスまたは URL です。

Docker イメージを実行する

ビルドしたイメージが想定どおりに動作することを確認するため、Docker を使用してイメージを実行できます。

  1. Container Registry とやり取りするときに Container Registry 認証情報を使用するよう、Docker を構成します。

    gcloud auth configure-docker
    

    次のようなメッセージが表示されます。

    The following settings will be added to your Docker config file
    located at [/.docker/config.json]:
    
    {
      "credHelpers": {
        "gcr.io": "gcloud",
        "us.gcr.io": "gcloud",
        "eu.gcr.io": "gcloud",
        "asia.gcr.io": "gcloud",
        "staging-k8s.gcr.io": "gcloud",
        "marketplace.gcr.io": "gcloud"
      }
    }
    
    Do you want to continue (Y/n)?
    
  2. y と入力して Enter キーを押します。

  3. 以前ビルドした Docker イメージを実行します。PROJECT_ID は Cloud プロジェクト ID です。

    docker run gcr.io/PROJECT_ID/IMAGE_NAME
    

    出力は次のようになります。

    Hello, world! The time is Fri Feb  2 16:09:54 UTC 2018.
    

次のステップ