このドキュメントでは、イメージ ストリーミングを使用してコンテナ イメージを Batch コンテナ ジョブに pull する方法について説明します。
イメージ ストリーミングを使用すると、コンテナ イメージのダウンロードが完了するのを待たずに Batch ジョブを初期化できます。これにより、次のメリットが得られます。
- 大きなイメージを pull する際のレイテンシの短縮
- ジョブの実行開始までの時間を短縮
準備
- Batch を以前に使用したことがない場合は、Batch を使ってみるを確認し、プロジェクトとユーザーの前提条件を完了して Batch を有効にします。
- 
  
  
  
  
  
  
  
    
    
    
    
    
    
      
      
        
        
        
        
        
      
    
      
      
        
        
        
        
        
      
    
    
    
    
    
  
  ジョブの作成に必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。 - 
  
  
    
      プロジェクトに対する Batch ジョブ編集者 (roles/batch.jobsEditor)
- 
  
  
    
      ジョブのサービス アカウントのサービス アカウント ユーザー (roles/iam.serviceAccountUser)。これは、デフォルトでは Compute Engine のデフォルトのサービス アカウントです。
 ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。 
- 
  
  
    
      プロジェクトに対する Batch ジョブ編集者 (
- まだ有効にしていない場合は、次のコマンドを実行して Container File System API を有効にします。 - gcloud services enable containerfilesystem.googleapis.com 
- コンテナ イメージが VPC Service Controls で保護されている場合は、containerfilesystem.googleapis.comを含むようにサービス境界を更新します。
制限事項
Batch Image ストリーミングには次の制限があります。
- Batch は、Artifact Registry に保存されているコンテナ イメージのイメージ ストリーミングのみをサポートします。現在 Container Registry を使用してコンテナ イメージを管理している場合は、Artifact Registry に移行できます。
- Batch ジョブの VM は、Artifact Registry にコンテナ イメージを保存するのと同じロケーションで実行する必要があります。
- Docker イメージ マニフェスト バージョン 2、スキーマ 1 を使用するコンテナはサポートされていません。
- イメージ ストリーミングを使用する場合、コンテナ実行可能ファイルは次のフィールドのみをサポートします。- imageUri
- commands
- entrypoint
- volumes
- enableImageStreaming
 
- 空のレイヤまたは重複するレイヤを含むコンテナ イメージはサポートされていません。
イメージ ストリーミングを使用するジョブを作成する
次の操作を行って、イメージ ストリーミングを使用する Batch コンテナ ジョブを作成します。
Google Cloud CLI または REST API を使用して、コンテナ ジョブを作成します。コンテナ実行可能なイメージ ストリーミングを有効にするには、enableImageStreaming フィールドを true に設定し、ジョブの VM のロケーションが含まれる Artifact Registry のロケーションに保管されているイメージに imageUri フィールドを設定します。
"container": {
    ...
    "enableImageStreaming": true
        }
たとえば、イメージ ストリーミングを使用するジョブには、次のような JSON 構成ファイルが作成されます。
{
    "taskGroups": [
        {
            "taskCount": "1",
            "taskCountPerNode": "1",
            "taskSpec": {
                "runnables": [
                    {
                        "container": {
                            "imageUri": "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE:TAG",
                            "enableImageStreaming": true
                        }
                    }
                ]
            }
        }
    ],
    "allocationPolicy": {
        "instances": [
            {
                "policy": {
                    "machineType": "e2-standard-4"
                }
            }
        ]
    },
    "logsPolicy": {
        "destination": "CLOUD_LOGGING"
    }
}
次の値を置き換えます。
- LOCATION: イメージが保存されているリポジトリのリージョンまたはマルチリージョンのロケーション(- us-east1や- usなど)です。コンテナのロケーションは、Batch ジョブの VM のロケーションと同じである必要があります。
- PROJECT-ID: コンテナ イメージを含むプロジェクト。プロジェクト ID にコロン(- :)が含まれている場合は、ドメインをスコープとするプロジェクトをご覧ください。
- REPOSITORY: イメージが保存されるリポジトリの名前。
- IMAGE: コンテナ イメージの名前です。
- TAG: イメージに適用されるタグ。
次のステップ
- ジョブの作成または実行で問題が発生した場合は、トラブルシューティングをご覧ください。
- ジョブとタスクを表示する。
- 別のジョブ作成オプションを学習する。