Todos os produtos
Search
Central de documentação

Function Compute:Como compilar uma camada a partir de um Dockerfile

Última atualização: Aug 04, 2026

Use um Dockerfile para compilar uma camada quando a dependência incluir uma biblioteca de vínculo dinâmico (arquivo .so) ou quando o ambiente local for incompatível com o ambiente de execução do Function Compute. Para pacotes de linguagem pura sem dependências nativas (como pacotes Python puros), instale-os diretamente no console do Function Compute ou na máquina local.

Este tópico demonstra a compilação de uma camada do Puppeteer para um runtime Node.js como exemplo.

Requisitos de diretório do pacote

Ao empacotar dependências em um arquivo ZIP de camada, coloque-as no diretório correspondente ao seu runtime. Por exemplo, armazene a biblioteca Python no diretório /python do pacote ZIP da camada.

Para dependências que incluem bibliotecas de vínculo dinâmico, armazene os arquivos .so no diretório /lib do arquivo ZIP. Após o upload da camada para o Function Compute, o sistema descompacta esses arquivos automaticamente em /opt/lib.

  • Runtimes integrados: O sistema adiciona automaticamente o caminho /opt/lib à variável LD_LIBRARY_PATH.

  • Runtimes personalizados: Adicione /opt/lib à variável LD_LIBRARY_PATH manualmente.

Compilar uma camada do Puppeteer

Etapa 1: Preparar um Dockerfile

Crie um arquivo Dockerfile com o seguinte conteúdo:

# Use the build-latest image for the same runtime version as your function.
# If you are in the Chinese mainland, pull from registry.cn-beijing.aliyuncs.com instead.
FROM aliyunfc/runtime-nodejs14:build-latest

# Set environment variables and working directory.
ENV PATH /opt/bin:$PATH
ENV LD_LIBRARY_PATH /opt/lib
ENV NODE_PATH /opt/nodejs/node_modules
WORKDIR /tmp

# Install Puppeteer to /opt/nodejs.
COPY ./package.json /opt/nodejs/
RUN cd /opt/nodejs \
    && npm --registry https://registry.npmmirror.com i

# Download system dependency .deb files to /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

# Extract .so files from each .deb package.
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 extracted .so files to /opt/lib.
RUN cp -r /tmp/install/usr/bin /opt/; \
    cp -r /tmp/install/usr/lib/x86_64-linux-gnu/* /opt/lib/

# Package /opt into layer.zip.
# The -y flag preserves symbolic links. .[^.]* includes hidden files without the parent directory.
RUN cd /opt \
    && zip -ry layer.zip * .[^.]*

CMD ["bash"]
A versão do runtime da imagem base deve corresponder à versão do runtime da sua função. Use a tag build-latest para compilações de camadas.

Etapa 2: Compilar o arquivo ZIP da camada

  1. Compile a imagem Docker a partir do Dockerfile:

    sudo docker build -t <layer-image-name> -f Dockerfile .
  2. Copie o arquivo ZIP da camada para fora da imagem:

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

    Esse comando monta o diretório atual como /tmp dentro do contêiner e copia o arquivo layer.zip para esse local. Após a conclusão do comando, o arquivo layer.zip aparece no diretório atual. A flag --rm remove o contêiner automaticamente.

Etapa 3: Criar uma camada personalizada

No console do Function Compute ou com o Serverless Devs, crie uma camada e defina o Layer Upload Method como Upload Layer in ZIP Package. Para obter etapas detalhadas, consulte Criar uma camada personalizada.

Imagens base

O Function Compute fornece imagens base predefinidas para cada runtime compatível. Baixe uma imagem usando o seguinte formato:

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

Imagens base disponíveis:

Runtime

Tags da imagem

Python 3,10

aliyunfc/runtime-python3.10

Python 3,9

aliyunfc/runtime-python3.9

Python 3,6

aliyunfc/runtime-python3.6

Node.js 16

aliyunfc/runtime-nodejs16

Node.js 14

aliyunfc/runtime-nodejs14

Node.js 12

aliyunfc/runtime-nodejs12

Java 11

aliyunfc/runtime-java11

Java 8

aliyunfc/runtime-java8

.NET Core 2,1

aliyunfc/runtime-dotnetcore2.1

Go 1

aliyunfc/runtime-go1

Personalizado

aliyunfc/runtime-custom

Personalizado (Debian 10)

aliyunfc/runtime-custom.debian10

Para obter a lista completa de imagens e tags disponíveis, consulte fc-docker no GitHub.

Próximos passos

Após criar uma camada, vincule-a a uma função no console do Function Compute ou com o Serverless Devs. Para mais detalhes, consulte Configurar uma camada personalizada.