ONBUILD
Docker instruksi memungkinkan Anda mengatur pemicu dalam gambar. Pemicu Anda akan dieksekusi nanti, saat gambar digunakan sebagai dasar untuk yang lain. Mereka akan menjadi bagian dari konteks gambar hilir baru dan tidak akan menjadi lapisan sistem file di docker build
awal Anda .
Menambahkan Pemicu ONBUILD
ONBUILD
adalah instruksi yang Anda tulis ke dalam Dockerfiles Anda. Ini unik karena menerima lain instruksi sebagai argumennya. Anda dapat menentukan operasi Dockerfile apa pun, seperti COPY
atau RUN
, dan menjalankannya selama pembuatan gambar hilir.
ONBUILD RUN example-command
Contoh ini menjalankan example-command
dalam gambar anak pada saat itu dibuat. Berikut ini kasus lain di mana file disalin dari konteks build gambar hilir ke dalam sistem file:
ONBUILD COPY assets.json /app/assets.json
ONBUILD
instruksi tidak berpengaruh apa pun pada gambar yang dihasilkan oleh Dockerfile tempat mereka mendefinisikannya. Membangun Dockerfile di atas tidak jalankan example-command
atau sertakan assets.json
dalam gambar:
# Does not include the extra instructions docker build -t base-image:latest .
Pemicu akan digunakan saat Anda menulis Dockerfile lain yang menggunakan yang pertama sebagai basisnya:
FROM base-image:latest RUN my-binary
docker build -t downstream-image:latest .
Membangun Dockerfile ini akan menjalankan example-command
, salin di assets.json
, dan akhirnya jalankan my-binary
. ONBUILD
pemicu selalu dieksekusi terlebih dahulu, segera setelah FROM
instruksi di Dockerfile hilir.
Bagaimana Docker Mengenali Pemicu?
ONBUILD
tidak memengaruhi sistem file penampung dasar tetapi Docker masih mengetahui pemicu yang ada saat Anda membuat gambar hilir. Proses pembangunan melacak ONBUILD
instruksi yang ditemukannya dan merekamnya dalam metadata gambar.
Docker memeriksa metadata dari gambar yang dirujuk dalam FROM
petunjuk. Jika gambar bernama menyertakan pemicu dalam metadatanya, instruksi pemicu tersebut secara efektif ditempelkan ke bagian atas Dockerfile hilir sebelum pembangunan dimulai.
Pemicu sebenarnya dijalankan sebagai bagian dari FROM
build build panggung. Mereka akan dijalankan sesuai urutan penulisannya di Dockerfile hulu. Jika ONBUILD
instruksi gagal, Docker akan membatalkan build dan akan terlihat seperti FROM
panggung adalah penyebabnya.
Batasan
Anda dapat menggunakan instruksi Dockerfile apa pun sebagai argumen untuk ONBUILD
pemicu dengan tiga pengecualian:
ONBUILD FROM
– Ini tidak diperbolehkan karena akan menimpa gambar dasar yang digunakan untuk build. Setiap Dockerfile harus mewarisi dari satu basis.ONBUILD MAINTAINER
–MAINTAINER
instruksi sudah usang dan tidak boleh digunakan; informasi kepengarangan paling baik diberikan sebagai label.LABEL
instruksi kompatibel denganONBUILD
.ONBUILD ONBUILD
– RantaiONBUILD
instruksi tidak didukung. Semua pemicu dieksekusi dalam gambar segera di hilir Dockerfile Anda. Anda tidak dapat menentukan pemicu yang dimaksudkan untuk dieksekusi dalam gambar "cucu" dua tingkat atau lebih di bawah Dockerfile yang menentukan.
Semua instruksi didefinisikan dengan cara yang sama seperti penggunaan regulernya. Tulis langkah biasa di Dockerfile Anda, lalu awali dengan ONBUILD
, akan memindahkannya dari alur build normal dan menjadikannya sebagai pemicu build hilir.
Kapan Pemicu ONBUILD Berguna?
ONBUILD
paling sering digunakan dalam gambar utilitas yang mengotomatisasi tugas-tugas seperti kompilasi kode. Prosedur semacam ini umumnya memerlukan beberapa langkah untuk dieksekusi dalam urutan tertentu, dengan dependensi seperti kode sumber Anda ditambahkan pada titik tertentu.
Pertimbangkan gambar kompilasi yang mencari kode sumber di direktori, lalu jalankan perintah untuk membangunnya. Anda tidak bisa begitu saja COPY
dan RUN
dalam Dockerfile gambar itu sebagai sumber pengguna akhir tidak akan ada di dalam Anda konteks pembuatan gambar.
Menggunakan ONBUILD
memungkinkan Anda menyediakan Dockerfile boilerplate yang dapat diperluas pengguna Anda dan docker build
tanpa menciptakan kembali fungsionalitas umum:
ENV BUILD_ENV=production RUN init-build.sh ONBUILD COPY /src /build ONBUILD RUN compile.sh --destination=/bin
Contoh ini menunjukkan bagaimana image builder dapat menyediakan lingkungan kompilasi yang telah dikonfigurasi sebelumnya. Saat digunakan sebagai gambar dasar, kode akan secara otomatis dikompilasi dari konteks build hilir. Gambar itu dapat berinteraksi dengan keluaran yang dikompilasi di /bin
dalam tahapan Dockerfile-nya sendiri.
Ringkasan
ONBUILD
instruksi di Dockerfiles memberi Anda cara untuk mengeksekusi pemicu sebagai bagian dari build hilir. Anda dapat menggunakan instruksi Dockerfile lainnya sebagai ONBUILD
pemicu, kecuali untuk beberapa batasan.
Menggunakan ONBUILD
memungkinkan Anda menyediakan gambar Docker generik yang menentukan rangkaian fungsi yang dapat digunakan kembali. Ini lebih efisien daripada meminta pengguna menyalin teks contoh Dockerfiles kata demi kata, lalu menambahkan instruksi mereka sendiri di bagian bawah. Anda masih dapat memodifikasi dan memperbarui gambar dasar tanpa memerlukan tindakan dari pengguna Anda.
Mengadopsi ONBUILD
mengurangi pengulangan dan memfasilitasi gambar dasar Docker yang dapat diperluas. ONBUILD
instruksi layak dipertimbangkan saat Anda membuat Dockerfile boilerplate yang perlu disesuaikan oleh pengguna akhir sebelum lingkungan container akhir dianggap selesai.