Topik ini menjelaskan cara membangun lapisan berdasarkan Dockerfile. Dalam contoh yang digunakan di topik ini, Node.js digunakan untuk menginstal dependensi Puppeteer.
Informasi latar belakang
Function Compute menyediakan berbagai metode untuk membangun lapisan. Untuk dependensi tanpa pustaka tautan-dinamis, seperti pustaka Python murni, Anda dapat menginstal dependensi di konsol Function Compute atau membangun lapisan pada mesin lokal. Namun, jika dependensi mencakup pustaka tautan-dinamis atau lingkungan lokal tidak kompatibel dengan lingkungan runtime Function Compute, Anda hanya dapat membangun lapisan menggunakan Dockerfile.
Saat membangun lapisan, kami menyarankan agar Anda mengemas pustaka dependensi dari setiap bahasa ke direktori tertentu dalam file ZIP lapisan sesuai dengan panduan Buat Lapisan Kustom. Sebagai contoh, kemas pustaka Python ke dalam direktori /python dari paket ZIP lapisan. Jika pustaka dependensi mencakup pustaka tautan-dinamis, letakkan pustaka tersebut di direktori /lib dari paket ZIP lapisan. 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 lapisan Puppeteer
Langkah 1: Siapkan Dockerfile
Kode contoh:
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
# Instal pustaka Puppeteer ke direktori /opt/nodejs.
COPY ./package.json /opt/nodejs/
RUN cd /opt/nodejs \
&& npm --registry https://registry.npm.taobao.org i
# Unduh file .deb yang perlu diinstal ke 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/
# zip file
# -y simpan tautan simbolik sebagai tautan bukan file yang direferensikan
# .[^.]* termasuk file tersembunyi dan kecualikan direktori induk
RUN cd /opt \
&& zip -ry layer.zip * .[^.]*
CMD ["bash"]Dalam kode sebelumnya:
Function Compute menyediakan gambar dasar untuk berbagai runtime. Anda dapat menemukan alamat gambar yang sesuai dari Gambar Dasar Function Compute. Kami menyarankan penggunaan gambar
build-latestuntuk membangun gambar.CatatanSaat membangun lapisan pada mesin lokal, versi runtime gambar dasar harus sama dengan versi runtime fungsi.
FROM aliyunfc/runtime-nodejs14:build-latest
Nyatakan variabel lingkungan dan tentukan /tmp sebagai direktori kerja.
ENV PATH /opt/bin:$PATH
ENV LD_LIBRARY_PATH /opt/lib
ENV NODE_PATH /opt/nodejs/node_modules
WORKDIR /tmpInstal pustaka Puppeteer di direktori /opt/nodejs.
# Instal pustaka Puppeteer ke direktori /opt/nodejs.
COPY ./package.json /opt/nodejs/
RUN cd /opt/nodejs \
&& npm --registry https://registry.npm.taobao.org iUnduh file .deb yang diperlukan oleh pustaka dependensi sistem ke direktori /tmp/install/archives.
# Unduh file .deb yang perlu diinstal ke 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-recommendsUnduh file .deb ke direktori /tmp/install.
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.
# 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 ke dalam paket ZIP. Tambahkan parameter -y untuk mempertahankan tautan simbolik.
# zip file
# -y simpan tautan simbolik sebagai tautan bukan file yang direferensikan
# .[^.]* termasuk file tersembunyi dan kecualikan direktori induk
RUN cd /opt \
&& zip -ry layer.zip * .[^.]*Langkah 2: Bangun paket ZIP lapisan
Jalankan perintah berikut untuk menggunakan file Dockerfile mengemas gambar:
sudo docker build -t ${layer-image-name} -f Dockerfile .Jalankan perintah berikut untuk menyalin paket ZIP lapisan dari gambar:
sudo docker run --rm -v $(pwd):/tmp ${layer-image-name} sh -c "cp /opt/layer.zip /tmp/"
Langkah 3: Buat lapisan kustom
Buat dan konfigurasikan lapisan di konsol Function Compute atau gunakan Serverless Devs. Untuk informasi lebih lanjut, lihat Buat Lapisan Kustom.
Puppeteer tersedia sebagai lapisan umum resmi di Function Compute yang dapat langsung digunakan. Untuk informasi lebih lanjut, lihat bagian "Contoh 1: Program sampel untuk menangkap tangkapan layar halaman web berdasarkan Node.js 16 dan Puppeteer" di Contoh Penggunaan Lapisan Umum Resmi.
Gambar dasar Function Compute
Untuk informasi lebih lanjut, lihat Gambar Dasar Function Compute.