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

Function Compute:Dockerfile からのレイヤーのビルド

最終更新日:Apr 01, 2026

依存関係にダイナミックリンクライブラリ (.so ファイル) が含まれている場合、またはローカル環境が Function Compute の実行環境と互換性がない場合は、Dockerfile を使用してレイヤーをビルドします。ネイティブ依存関係のない純粋な言語パッケージ (純粋な Python パッケージなど) の場合は、代わりに Function Compute コンソールまたはローカルマシンに直接インストールしてください。

このトピックでは、例として Node.js ランタイム用の Puppeteer レイヤーをビルドする手順を説明します。

パッケージディレクトリの要件

依存関係をレイヤーの ZIP ファイルにパッケージングする場合、ランタイムに一致するディレクトリに配置します。たとえば、Python ライブラリは、レイヤー ZIP パッケージの /python ディレクトリにパッケージングします。

ダイナミックリンクライブラリを含む依存関係の場合、.so ファイルを ZIP ファイルの /lib ディレクトリに配置します。レイヤーが Function Compute にアップロードされると、これらのファイルは自動的に /opt/lib に解凍されます。

  • 組み込みランタイム/opt/lib は自動的に LD_LIBRARY_PATH に追加されます。

  • カスタムランタイム: 手動で /opt/libLD_LIBRARY_PATH に追加する必要があります。

Puppeteer レイヤーのビルド

ステップ 1: Dockerfile の準備

次の内容で Dockerfile を作成します。

# 関数と同じランタイムバージョンの build-latest イメージを使用します。
# 中国本土にいる場合は、代わりに registry.cn-beijing.aliyuncs.com からプルします。
FROM aliyunfc/runtime-nodejs14:build-latest

# 環境変数と作業ディレクトリを設定します。
ENV PATH /opt/bin:$PATH
ENV LD_LIBRARY_PATH /opt/lib
ENV NODE_PATH /opt/nodejs/node_modules
WORKDIR /tmp

# Puppeteer を /opt/nodejs にインストールします。
COPY ./package.json /opt/nodejs/
RUN cd /opt/nodejs \
    && npm --registry https://registry.npmmirror.com i

# システム依存関係の .deb ファイルを /tmp/install/archives にダウンロードします。
RUN mkdir -p /opt/lib /tmp/install
RUN apt-get update && apt-get install -y -d -o=dir::cache=/tmp/install \
    libblas3 fonts-liberation libappindicator3-1 libasound2 libatk-bridge2.0-0 \
    libgtk-3-0 libnspr4 libnss3 libpangocairo-1.0-0 libxcb-dri3-0 \
    libx11-xcb1 libxcb1 libxss1 libxtst6 lsb-release \
    xdg-utils libatspi2.0-0 libatk1.0-0 libxkbcommon0 libepoxy0 \
    libglapi-mesa libnspr4 libgbm-dev \
    --reinstall --no-install-recommends

# 各 .deb パッケージから .so ファイルを抽出します。
RUN for f in $(ls /tmp/install/archives/*.deb); do \
        echo "Preparing to unpack ${f##*/}"; \
        cd /tmp/install/archives; \
        dpkg-deb -x ${f##*/} /tmp/install; \
    done;

# 抽出した .so ファイルを /opt/lib にコピーします。
RUN cp -r /tmp/install/usr/bin /opt/; \
    cp -r /tmp/install/usr/lib/x86_64-linux-gnu/* /opt/lib/

# /opt を layer.zip にパッケージングします。
# -y フラグはシンボリックリンクを保持します。.[^.]* は親ディレクトリなしで隠しファイルを含みます。
RUN cd /opt \
    && zip -ry layer.zip * .[^.]*

CMD ["bash"]
ベースイメージのランタイムバージョンは、関数のランタイムバージョンと一致している必要があります。レイヤーのビルドには build-latest タグを使用してください。

ステップ 2: レイヤー ZIP ファイルのビルド

  1. Dockerfile から Docker イメージをビルドします。

    sudo docker build -t <layer-image-name> -f Dockerfile .
  2. イメージからレイヤー ZIP ファイルをコピーします。

    sudo docker run --rm -v $(pwd):/tmp <layer-image-name> sh -c "cp /opt/layer.zip /tmp/"

    このコマンドは、現在のディレクトリをコンテナ内の /tmp としてマウントし、そこに layer.zip をコピーします。コマンドが完了すると、現在のディレクトリに layer.zip が表示されます。--rm フラグはコンテナを自動的に削除します。

ステップ 3: カスタムレイヤーの作成

Function Compute コンソールまたは Serverless Devs を使用してレイヤーを作成し、[レイヤーのアップロード方法][ZIP パッケージでレイヤーをアップロード] に設定します。詳細な手順については、「カスタムレイヤーの作成」をご参照ください。

説明

Function Compute は、直接使用できるパブリックレイヤーとして Puppeteer を提供しています。詳細については、「例 1: Node.js 16 と Puppeteer を使用してウェブページのスクリーンショットを撮るサンプルプログラム」をご参照ください。

ベースイメージ

Function Compute は、サポートされている各ランタイム用にプリセットされたベースイメージを提供しています。次のフォーマットを使用してイメージをプルします。

docker pull aliyunfc/<runtime-name>:<tag>
# 例:
docker pull aliyunfc/runtime-python3.10:latest

利用可能なベースイメージ:

ランタイムイメージタグ
Python 3.10aliyunfc/runtime-python3.10
Python 3.9aliyunfc/runtime-python3.9
Python 3.6aliyunfc/runtime-python3.6
Node.js 16aliyunfc/runtime-nodejs16
Node.js 14aliyunfc/runtime-nodejs14
Node.js 12aliyunfc/runtime-nodejs12
Java 11aliyunfc/runtime-java11
Java 8aliyunfc/runtime-java8
.NET Core 2.1aliyunfc/runtime-dotnetcore2.1
Go 1aliyunfc/runtime-go1
Customaliyunfc/runtime-custom
Custom (Debian 10)aliyunfc/runtime-custom.debian10

利用可能なイメージとタグの完全なリストについては、GitHub の「fc-docker」をご参照ください。

次のステップ

レイヤーを作成した後、Function Compute コンソールまたは Serverless Devs を使用して関数にバインドします。詳細については、「カスタムレイヤーの設定」をご参照ください。