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

Function Compute:Dockerfileを使用してレイヤーを構築する

最終更新日:Sep 04, 2024

このトピックでは、Dockerfileに基づいてレイヤーを構築する方法について説明します。 このトピックで使用する例では、Node.jsを使用してPuppeteerの依存関係をインストールします。

背景情報

Function Computeは、レイヤーを構築するためのさまざまな方法を提供します。 純粋なPythonライブラリなど、動的リンクライブラリを含まない依存関係の場合は、Function Computeコンソールに依存関係をインストールするか、オンプレミスマシンでレイヤーを構築できます。 依存関係にダイナミックリンクライブラリが含まれている場合、またはローカル環境がFunction Computeランタイム環境と互換性がない場合、コンソールまたはオンプレミスマシンを使用してレイヤーを構築することはできません。 Dockerfileを使用してのみレイヤーをビルドできます。

レイヤーをビルドするときは、[カスタムレイヤーの作成] に従って、各言語の依存関係ライブラリをレイヤーZIPファイルの指定されたディレクトリにパッケージ化することをお勧めします。 たとえば、PythonライブラリをレイヤーZIPパッケージの /pythonディレクトリにパッケージ化します。 依存関係ライブラリにダイナミックリンクライブラリが含まれている場合は、レイヤーZIPパッケージの /libディレクトリにダイナミックリンクライブラリを配置することを推奨します。 組み込みランタイムを使用する場合、/opt/libディレクトリがLD_LIBRARY_PATHパスに自動的に追加されます。 カスタムランタイムを使用する場合は、ディレクトリを手動で追加する必要があります。

Puppeteerレイヤーを構築する

ステップ1: Dockerfileを準備する

サンプルコード:

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

# Install the Puppeteer library to the /opt/nodejs directory.
COPY ./package.json /opt/nodejs/
RUN cd /opt/nodejs \
    && npm --registry https://registry.npm.taobao.org i

# Download the .deb file that needs to be installed to the system dependency library to the /tmp/install/archives directory. 
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

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;

# Copy the installed .so file to the /opt/lib directory. 
RUN cp -r /tmp/install/usr/bin /opt/; \
    cp -r /tmp/install/usr/lib/x86_64-linux-gnu/* /opt/lib/

# zip file
# -y   store symbolic links as the link instead of the referenced file
# .[^.]*    including hidden files and exclude the parent directory
RUN cd /opt \
    && zip -ry layer.zip * .[^.]*

CMD ["bash"]

上記のコードでは、

  • Function Computeは、さまざまなランタイムのベースイメージを提供します。 対応するイメージアドレスは、Function Computeのベースイメージから確認できます。 build-latestイメージを使用してイメージをビルドすることを推奨します。

    説明

    オンプレミスのコンピューターでレイヤーをビルドする場合、基本イメージの実行時バージョンは関数の実行時バージョンと同じである必要があります。

    FROM aliyunfc/runtime-nodejs14:build-latest
  • 環境変数を宣言し、作業ディレクトリとして /tmpを指定します。

  • ENV PATH /opt/bin:$PATH
    ENV LD_LIBRARY_PATH /opt/lib
    ENV NODE_PATH /opt/nodejs/node_modules
    WORKDIR /tmp
  • Puppeteerライブラリを /opt/nodejsディレクトリにインストールします。

  • # Install the Puppeteer library to the /opt/nodejs directory.
    COPY ./package.json /opt/nodejs/
    RUN cd /opt/nodejs \
        && npm --registry https://registry.npm.taobao.org i
  • ダウンロードします。. debシステム依存関係ライブラリにインストールする必要があるファイルを/tmp/install/archivesディレクトリに移動します。

  • # Download the. deb file that needs to be installed to the system dependency library to the /tmp/install/archives directory. 
    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ファイルを/tmp/installディレクトリに移動します。

  • $(ls /tmp/install/archives/*.deb) のfの

  • 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;
  • インストール済みのコピー. そうファイルを/opt/libディレクトリに移動します。

  • # Copy the installed .so file to the /opt/lib directory. 
    RUN cp -r /tmp/install/usr/bin /opt/; \
        cp -r /tmp/install/usr/lib/x86_64-linux-gnu/* /opt/lib/
  • /opt/libディレクトリのファイルをZIPパッケージにパッケージ化します。 -yパラメーターを追加して、シンボリックリンクを保持します。

  • # zip file
    # -y   store symbolic links as the link instead of the referenced file
    # .[^.]*    including hidden files and exclude the parent directory
    RUN cd /opt \
        && zip -ry layer.zip * .[^.]*

ステップ2: レイヤーZIPパッケージを構築する

  1. 次のコマンドを実行して、Dockerfileファイルを使用してイメージをパッケージ化します。

    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/"

ステップ3: カスタムレイヤーを作成する

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

説明

Puppeteerは、直接使用できる公式の共通レイヤーとしてFunction Computeに組み込まれています。 詳細については、「例1: Node.js 16およびPuppeteerに基づいてwebページのスクリーンショットをキャプチャするためのサンプルプログラム」セクションの「公式共通レイヤーの使用例」を参照してください。

Function Computeのベースイメージ

詳細については、「Function Computeの基本イメージ」をご参照ください。