すべてのプロダクト
Search
ドキュメントセンター

:コンテナイメージのビルドと Container Registry へのプッシュ

最終更新日:Mar 01, 2026

Function Compute のパイプラインは、コンテナイメージをビルドし、Alibaba Cloud Container Registry へプッシュします。利用可能な実行環境は 2 種類あり、標準的なビルドにはデフォルト(マネージド)環境、大規模なベースイメージや VPC 接続型レジストリ、および Container Registry Enterprise Edition を使用する場合は専用環境をご利用ください。

前提条件

開始する前に、以下の条件を満たしていることを確認してください。

  • Container Registry のイメージリポジトリ(Personal Edition または Enterprise Edition)

  • (プライベートリポジトリの場合)Container Registry への書き込み権限を持つ AliyunFCServerlessDevsRole ロール(例:ポリシー AliyunContainerRegistryFullAccess)。詳細については、「RAM ユーザーへのカスタムポリシーのアタッチ」をご参照ください。

  • (Container Registry Enterprise Edition の場合)VPC アクセスが構成済みの専用実行環境。詳細については、「専用実行環境の使用」をご参照ください。

  • (イメージビルドタスクの場合)デプロイ時の重複ビルドを防ぐため、s.yaml ファイルから component: fc build --use-docker フックを削除してください。

デフォルト実行環境の制限事項

制約制限値
ディスクサイズ10 GB
ビルドタイムアウト15 分間
固定 IP アドレスまたは CIDR ブロック非対応
IP アドレスホワイトリストによるアクセス非対応

コードソースおよびリージョン要件:

コードソースリージョンサイト
GitHubシンガポール国際サイト (alibabacloud.com)
GitLab または Codeup中国 (杭州)中国サイト (aliyun.com)

これらの制限が要件を満たさない場合は、「専用実行環境」をご利用ください。

デフォルト実行環境でのイメージビルド

  1. Function Compute コンソールにログインします。

  2. 対象アプリケーションを見つけ、パイプライン管理 タブをクリックします。

  3. パイプラインの詳細 セクションで、タスクテンプレート タブをクリックし、作成 > イメージビルド を選択して、ページ右側の .yaml ファイルを編集します。

    image.png

  4. パイプライン YAML を定義します。以下は最小限のイメージビルド構成の例です。

kind: Pipeline
name: "image-build-pipeline"
description: 'demo pipeline'
labels:
  myLabel: image-build
spec:
  templateSpec:
    tasks:
      - name: build-push
        context:
          data:
            # コンソール上に表示される表示名。
            displayName: image build
            # このタスクを有効化する場合は true を設定します。デフォルト:無効。
            enable: true
            build:
              # Dockerfile のパス(コードリポジトリのルートからの相対パス)。
              # デフォルト:./Dockerfile
              dockerfile: code/Dockerfile
              # 対象となる Container Registry のイメージ名。
              image: registry-vpc.cn-hangzhou.aliyuncs.com/pipeline-demo/demo-repo:latest
              # ビルドコンテキストディレクトリ。デフォルト:Dockerfile があるディレクトリ。
              context: ./context
        # イメージビルドタスク用の組み込みテンプレート。
        taskTemplate: build-image-task
        runAfters: []

パイプライン YAML のフィールド:

フィールド説明デフォルト値
build.dockerfileDockerfile のパス(コードリポジトリのルートからの相対パス)./Dockerfile
build.imageContainer Registry の完全なイメージ名(タグを含む)必須
build.contextビルドコンテキストディレクトリDockerfile があるディレクトリ
data.displayNameコンソール上でのタスク表示名--
data.enableタスク実行の有効/無効設定false
taskTemplate必ず build-image-task(組み込みテンプレート)を指定してください。--

専用実行環境を用いたイメージビルド

デフォルト環境が要件を満たさない場合、ご自身のアカウント内でパイプラインを実行する専用実行環境を構成してください。専用環境では、リージョン、ネットワーク構成、リソース仕様、タイムアウトを自由に指定できます。

重要

専用実行環境では、ご自身のアカウント内の関数でタスクを実行するため、課金が発生する場合があります。詳細については、「課金の概要」をご参照ください。

実行環境の構成は、グラフィカルな編集または YAML ファイルによる編集のいずれかで行えます。

専用実行環境に関する一般的な情報については、「パイプラインの管理」をご参照ください。

NAS キャッシュによるビルド高速化

Dockerfile で大規模なベースイメージ(例:機械学習モデルや cuDNN 環境)を参照する場合、各ビルド時にベースイメージをプルすると、処理が遅延したり、ディスク領域が不足したりする可能性があります。File Storage NAS(NAS)を活用してベースイメージをキャッシュし、以降のビルドを高速化してください。

手順

  1. パイプライン向けに専用実行環境を構成し、仮想プライベートクラウド(VPC)および NAS ファイルシステムをバインドします。

  2. イメージプリフェッチ機能を用いて、ベースイメージを NAS ファイルシステムにキャッシュします。

  3. イメージビルド時に NAS キャッシュディレクトリを参照します。

プリフェッチとビルドを統合したタスク

以下の YAML は、単一タスク内でベースイメージのプリフェッチとビルドを実行します。

kind: Pipeline
name: "image-build-use-cache-pipeline"
description: 'demo pipeline'
labels:
  myLabel: image-build-use-cache
spec:
  templateSpec:
    context:
      data:
        runnerConfig:
          regionId: cn-hangzhou
          logConfig:
            project: demo-project
            logstore: demo-logstore
          # VPC は Enterprise Edition インスタンスに接続されている必要があります。
          vpcConfig:
            securityGroupId: sg-xxxx
            vSwitchIds:
              - vsw-xxx
            vpcId: vpc-xxxx
          # インスタンスの仕様。
          cpu: 8
          memory: 32768
          diskSize: 10240
          # ビルドのタイムアウト時間 (秒)。
          timeout: 1800
    tasks:
      - name: build-push
        context:
          data:
            displayName: image build
            enable: true
            build:
              dockerfile: code/Dockerfile
              # タグに _accelerated を追加してイメージのアクセラレーションを有効化します。
              image: demo-registry-vpc.cn-hangzhou.aliyuncs.com/pipeline***/demo***:debug_accelerated
              # Container Registry Enterprise Edition インスタンス ID。
              instanceID: cri-xxxx
        taskTemplate: build-image-task
        runAfters: []

キャッシュヒットが発生した場合、ビルドログには Found manifest at ... と出力されます。

image.png

プリフェッチとビルドを分離したタスク

イメージプリフェッチとイメージビルドを、依存関係を持つ独立したタスクとして実行します。

- name: only-warm
  context:
    data:
      enable: true
      # ベースイメージをキャッシュにプリフェッチ。
      warm:
        images:
        - registry-vpc.cn-hangzhou.aliyuncs.com/pipeline-demo/base-image-1:debug
        - registry-vpc.cn-hangzhou.aliyuncs.com/pipeline-demo/base-image-2:debug
        cacheDir: "/mnt/image-cache"
        # Container Registry Enterprise Edition インスタンスを指定します。
        instanceID: cri-xxxx
  taskTemplate: build-image-task
  runAfters: []
- name: only-build
  context:
    data:
      enable: true
      build:
        dockerfile: code/Dockerfile
        image: registry-vpc.cn-hangzhou.aliyuncs.com/pipeline-demo/demo-repo:latest
        # プリフェッチタスクのキャッシュを参照します。
        cacheDir: "/mnt/image-cache"
  taskTemplate: build-image-task
  runAfters: [only-warm]

Container Registry Enterprise Edition イメージのビルド

デフォルトのパイプライン実行環境は、固定パブリック IP アドレスおよび内部 CIDR ブロックをサポートしないため、Container Registry Enterprise Edition インスタンスへのアクセスができません。代わりに、VPC 接続を備えた専用実行環境をご利用ください。

ネットワークアクセスの構成

Enterprise Edition インスタンスを用いたイメージビルドを実行する前に、ネットワークアクセスを構成してください。

  • インターネット経由のアクセス:デフォルトでは無効です。インターネット経由のアクセスを許可するには、パブリック IP アドレスホワイトリストを構成してください。「インターネット経由のアクセスの構成」をご参照ください。

  • VPC 経由のアクセス:Elastic Compute Service(ECS)インスタンスと Container Registry Enterprise Edition インスタンスを同一 VPC 内で接続するために、アクセス制御リスト(ACL)を構成してください。「VPC ACL の構成」をご参照ください。

手順

  1. パイプライン向けに専用実行環境を構成し、Container Registry Enterprise Edition インスタンスに接続された VPC をバインドします。Enterprise Edition インスタンスと同じ VPC および vSwitch を使用するか、異なる VPC の場合は VPC ACL を構成してください。「VPC ACL の構成」をご参照ください。

  2. build.instanceID フィールドに Enterprise Edition インスタンス ID を指定します。

  3. (推奨)イメージリポジトリでイメージ加速を有効化し、イメージタグに _accelerated を付与します。パイプラインのイメージビルドタスクは、オリジナルイメージを自動的にプッシュし、加速イメージの変換完了を待機します。「コンテナイメージのリソースを必要に応じてロード」をご参照ください。

サンプル YAML

kind: Pipeline
name: "image-build-use-cache-pipeline"
description: 'demo pipeline'
labels:
  myLabel: image-build-use-cache
spec:
  templateSpec:
    context:
      data:
        runnerConfig:
          regionId: cn-hangzhou
          logConfig:
            project: demo-project
            logstore: demo-logstore
          # VPC は Enterprise Edition インスタンスと接続されている必要があります。
          vpcConfig:
            securityGroupId: sg-xxxx
            vSwitchIds:
              - vsw-xxx
            vpcId: vpc-xxxx
          # インスタンス仕様。
          cpu: 8
          memory: 32768
          diskSize: 10240
          # ビルドタイムアウト(秒単位)。
          timeout: 1800
    tasks:
      - name: build-push
        context:
          data:
            displayName: image build
            enable: true
            build:
              dockerfile: code/Dockerfile
              # タグに _accelerated を付与してイメージ加速を有効化します。
              image: demo-registry-vpc.cn-hangzhou.aliyuncs.com/pipeline***/demo***:debug_accelerated
              # Container Registry Enterprise Edition インスタンス ID。
              instanceID: cri-xxxx
        taskTemplate: build-image-task
        runAfters: []

イメージビルドとデプロイを含む CI/CD パイプラインの構築

イメージビルドタスクテンプレートとカスタムタスクテンプレートを組み合わせることで、自動化された CI/CD パイプラインを作成できます。CI ステージでは各イメージに現在のコミット ID をタグ付けし、CD ステージではそのタグを用いてデプロイを行います。

コミット ID を用いたイメージタグ付け

  1. ビルドステージ:組み込み変数 <% .git.shortCommitId %>(HEAD コミット ID の先頭 7 文字)をイメージタグとして付与します。

       image: registry-vpc.cn-hangzhou.aliyuncs.com/demo/demo-image:<% .git.shortCommitId %>
  2. デプロイステージ:環境変数 GIT_COMMIT を、値 <% .git.shortCommitId %> で注入します。

  3. s.yaml:環境変数を ${env(GIT_COMMIT)} で参照し、イメージタグを動的に設定します。

組み込み YAML 変数の詳細については、「YAML ファイルによるパイプラインの記述」をご参照ください。

パイプライン YAML

# パイプラインを実行するためにコミットします。
kind: Pipeline
# 一意な命名のためにコミット ID とタイムスタンプを含めます。
name: "p-<% .git.shortCommitId %>-<% .currentTimestampMs %>"
description: 'demo pipeline'
# ラベルはパイプライン検索のフィルター条件として機能します。
# Serverless Application Center は、パイプライン実行のコミット時に他のラベルも追加します。
labels:
  myLabel: my-cicd-example
spec:
  context:
    data:
      appName: <% .appName %>
  templateSpec:
    context:
      data:
        envName: <% .envName %>
        deployFile: s.yaml
    tasks:
      # イメージビルドタスク。
      - name: build-image
        context:
          data:
            displayName: image build
            enable: true
            build:
              dockerfile: code/Dockerfile
              # 現在のコミット SHA をタグとして付与します。
              image: registry-vpc.cn-hangzhou.aliyuncs.com/demo/demo-image:<% .git.shortCommitId %>
        taskTemplate: build-image-task
        runAfters: []
      # デプロイタスク。
      - name: build-and-deploy
        context:
          data:
            displayName: デプロイメント
            enable: true
            # コミット SHA を環境変数として注入します。
            envVars:
              GIT_COMMIT: <% .git.shortCommitId %>
            steps:
              - plugin: "@serverless-cd/checkout"
              - plugin: "@serverless-cd/s-setup"
              - plugin: "@serverless-cd/s-deploy"
        taskTemplate: serverless-runner-task
        runAfters:
          - name: build-push

s.yaml におけるコミットタグの参照

GIT_COMMIT 環境変数を s.yaml で使用し、コンテナイメージタグを動的に設定します。

edition: 3.0.0
name: demo
access: 'default'  # キー別名。

resources:
  function:
    component: fc3
    props:
      region: 'cn-hangzhou'
      functionName: demo
      runtime: custom-container
      customContainerConfig:
        # コミットに基づくイメージタグを動的に参照します。
        image: registry-vpc.cn-hangzhou.aliyuncs.com/demo***/demo-ima***:${env(GIT_COMMIT)}
        port: 9000
      memorySize: 4096
      timeout: 3600