Function Compute memungkinkan Anda membangun layer menggunakan beberapa metode. Untuk dependensi tanpa pustaka tautan dinamis, seperti pustaka Python murni, Anda dapat langsung menginstal dependensi di Konsol Function Compute atau membangun layer di mesin lokal. Namun, jika dependensi mencakup pustaka tautan dinamis atau lingkungan lokal tidak kompatibel dengan lingkungan runtime Function Compute, Anda harus membangun layer berdasarkan Dockerfile. Topik ini menjelaskan cara membangun layer menggunakan Dockerfile. Contoh yang digunakan dalam topik ini melibatkan instalasi dependensi Puppeteer pada runtime Node.js.
Perhatian
Saat membangun layer, kami sarankan untuk mengemas pustaka dependensi setiap bahasa ke direktori tertentu dalam file ZIP layer. Untuk informasi lebih lanjut, lihat Buat Layer Kustom. Sebagai contoh, kemas pustaka Python ke direktori /python dari paket ZIP layer. Jika pustaka dependensi mencakup pustaka tautan dinamis, tempatkan pustaka tersebut di direktori /lib dari file ZIP. Setelah pustaka diunggah ke runtime Function Compute, mereka akan diekstraksi secara otomatis ke direktori /opt/lib. Jika Anda menggunakan runtime bawaan, direktori /opt/lib secara otomatis ditambahkan ke jalur LD_LIBRARY_PATH. Jika Anda menggunakan runtime kustom, tambahkan direktori tersebut secara manual.
Bangun layer Puppeteer
Langkah 1: Siapkan Dockerfile
Berikut adalah contoh kode sampel:
# Tentukan base image. Kami sarankan Anda menggunakan image build-latest.
# Saat Anda membangun layer di mesin lokal, versi runtime dari base image harus sama dengan versi runtime dari fungsi.
# Untuk pengguna di Tiongkok daratan, kami sarankan Anda menggunakan base image di repositori registry.cn-beijing.aliyuncs.com.
FROM aliyunfc/runtime-nodejs14:build-latest
# Deklarasikan variabel lingkungan dan tentukan direktori kerja sebagai /tmp.
ENV PATH /opt/bin:$PATH
ENV LD_LIBRARY_PATH /opt/lib
ENV NODE_PATH /opt/nodejs/node_modules
WORKDIR /tmp
# Instal pustaka Puppeteer ke direktori /opt/nodejs.
COPY ./package.json /opt/nodejs/
RUN cd /opt/nodejs \
&& npm --registry https://registry.npmmirror.com i
# Unduh file .deb yang perlu diinstal di pustaka dependensi sistem ke direktori /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
RUN for f in $(ls /tmp/install/archives/*.deb); do \
echo "Menyiapkan untuk membongkar ${f##*/}"; \
cd /tmp/install/archives; \
dpkg-deb -x ${f##*/} /tmp/install; \
done;
# Salin file .so yang telah diinstal ke direktori /opt/lib.
RUN cp -r /tmp/install/usr/bin /opt/; \
cp -r /tmp/install/usr/lib/x86_64-linux-gnu/* /opt/lib/
# Kemas file di direktori /opt/lib menjadi file ZIP. Perhatikan bahwa parameter -y harus ditambahkan untuk mempertahankan tautan simbolik.
# .[^.]* menunjukkan untuk menyertakan file tersembunyi dan mengecualikan direktori induk.
RUN cd /opt \
&& zip -ry layer.zip * .[^.]*
CMD ["bash"]Langkah 2: Bangun paket ZIP layer
Jalankan perintah berikut untuk menggunakan file Dockerfile dalam mengemas gambar:
sudo docker build -t ${layer-image-name} -f Dockerfile .Jalankan perintah berikut untuk menyalin file ZIP layer dari gambar:
sudo docker run --rm -v $(pwd):/tmp ${layer-image-name} sh -c "cp /opt/layer.zip /tmp/"
Langkah 3: Buat layer kustom
Setelah paket ZIP layer selesai dibangun, Anda dapat membuat layer di Konsol Function Compute atau menggunakan Serverless Devs. Atur Metode Unggah Layer ke Unggah Layer dalam Paket ZIP. Untuk informasi lebih lanjut, lihat Buat Layer Kustom.
Base image Function Compute
Berikut adalah daftar base image preset untuk berbagai bahasa pemrograman di Function Compute. Anda dapat menarik base image langsung dari jalur repositori gambar yang sesuai. Sebagai contoh, gunakan skrip tarik berikut: docker pull aliyunfc/runtime-python3.10:latest.
Untuk informasi lebih lanjut, lihat fc-docker di GitHub.
Apa yang harus dilakukan selanjutnya
Setelah layer dibuat, Anda dapat mengaitkannya dengan fungsi di Konsol Function Compute atau menggunakan Serverless Devs agar fungsi dapat mengakses sumber daya yang disediakan dalam layer. Untuk informasi lebih lanjut, lihat Konfigurasikan Layer Kustom.