Gunakan Dockerfile untuk membuat layer jika dependensi Anda mencakup pustaka tautan dinamis (.so) atau jika lingkungan lokal Anda tidak kompatibel dengan lingkungan runtime Function Compute. Untuk paket bahasa murni tanpa dependensi native (seperti paket Python murni), instal langsung melalui Konsol Function Compute atau di mesin lokal Anda.
Topik ini menjelaskan langkah-langkah pembuatan layer Puppeteer untuk runtime Node.js sebagai contoh.
Persyaratan struktur direktori paket
Saat mengemas dependensi ke dalam file ZIP layer, letakkan di direktori yang sesuai dengan runtime Anda. Misalnya, masukkan pustaka Python ke dalam direktori /python pada paket ZIP layer.
Untuk dependensi yang mencakup pustaka tautan dinamis, letakkan file .so di direktori /lib dalam file ZIP. Setelah layer diunggah ke Function Compute, file-file tersebut akan secara otomatis diekstrak ke /opt/lib.
Runtime bawaan:
/opt/libsecara otomatis ditambahkan keLD_LIBRARY_PATH.Runtime kustom: Tambahkan
/opt/libkeLD_LIBRARY_PATHsecara manual.
Membuat layer Puppeteer
Langkah 1: Siapkan Dockerfile
Buat Dockerfile dengan konten berikut:
# Gunakan image build-latest dengan versi runtime yang sama seperti fungsi Anda.
# Jika Anda berada di Tiongkok daratan, tarik dari registry.cn-beijing.aliyuncs.com.
FROM aliyunfc/runtime-nodejs14:build-latest
# Atur variabel lingkungan dan direktori kerja.
ENV PATH /opt/bin:$PATH
ENV LD_LIBRARY_PATH /opt/lib
ENV NODE_PATH /opt/nodejs/node_modules
WORKDIR /tmp
# Instal Puppeteer ke /opt/nodejs.
COPY ./package.json /opt/nodejs/
RUN cd /opt/nodejs \
&& npm --registry https://registry.npmmirror.com i
# Unduh file dependensi sistem (.deb) ke /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
# Ekstrak file .so dari setiap paket .deb.
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;
# Salin file .so hasil ekstraksi ke /opt/lib.
RUN cp -r /tmp/install/usr/bin /opt/; \
cp -r /tmp/install/usr/lib/x86_64-linux-gnu/* /opt/lib/
# Kemas /opt menjadi layer.zip.
# Opsi -y mempertahankan symbolic link. Pola .[^.]* menyertakan file tersembunyi tanpa direktori induk.
RUN cd /opt \
&& zip -ry layer.zip * .[^.]*
CMD ["bash"]Versi base image runtime harus sesuai dengan versi runtime fungsi Anda. Gunakan tag build-latest untuk pembuatan layer.Langkah 2: Buat file ZIP layer
Buat image Docker dari Dockerfile:
sudo docker build -t <layer-image-name> -f Dockerfile .Salin file ZIP layer dari image tersebut:
sudo docker run --rm -v $(pwd):/tmp <layer-image-name> sh -c "cp /opt/layer.zip /tmp/"Perintah ini memasang direktori saat ini sebagai
/tmpdi dalam kontainer, lalu menyalinlayer.zipke sana. Setelah perintah selesai,layer.zipakan muncul di direktori saat ini. Opsi--rmmenghapus kontainer secara otomatis.
Langkah 3: Buat layer kustom
Di Konsol Function Compute atau menggunakan Serverless Devs, buat layer dan atur Layer Upload Method ke Upload Layer in ZIP Package. Untuk langkah-langkah lengkapnya, lihat Buat layer kustom.
Function Compute menyediakan Puppeteer sebagai lapisan publik yang dapat Anda gunakan langsung. Untuk informasi lebih lanjut, lihat Contoh 1: Program contoh yang menggunakan Node.js 16 dan Puppeteer untuk mengambil tangkapan layar halaman web.
Base image
Function Compute menyediakan base image prasetel untuk setiap runtime yang didukung. Tarik image menggunakan format berikut:
docker pull aliyunfc/<runtime-name>:<tag>
# Contoh:
docker pull aliyunfc/runtime-python3.10:latestBase image yang tersedia:
| Runtime | Tag image |
|---|---|
| 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 |
| Custom | aliyunfc/runtime-custom |
| Custom (Debian 10) | aliyunfc/runtime-custom.debian10 |
Untuk daftar lengkap image dan tag yang tersedia, lihat fc-docker di GitHub.
Langkah selanjutnya
Setelah membuat layer, bind layer tersebut ke fungsi di Konsol Function Compute atau menggunakan Serverless Devs. Untuk detailnya, lihat Konfigurasi layer kustom.