Cara Menggunakan Docker Build Args untuk Mengonfigurasi Gambar Build

  • Post author:
  • Post category:Tutorial

Mekanisme “build args”

Docker memungkinkan Anda menentukan variabel lingkungan yang dapat direferensikan di Dockerfile Anda selama pembuatan gambar. Tidak seperti instruksi ENV biasa, argumen build tidak ada di dalam gambar keluaran akhir. Itu untuk kasus di mana Anda ingin mengonfigurasi proses build alih-alih membuat container.

Mendefinisikan Build Args

Anda mendefinisikan build args di dalam Dockerfile Anda menggunakan instruksi ARG:

ARG EXAMPLE_VAR ARG DEMO_VAR RUN echo $EXAMPLE_VAR

Dua argumen, EXAMPLE_VAR dan DEMO_VAR, ditambahkan ke build oleh Dockerfile di atas.

Anda menyetel nilai argumen yang tersedia melalui flag –build-arg untuk build buruh pelabuhan. Ulangi flag beberapa kali untuk mencakup semua argumen yang didefinisikan dalam Dockerfile:

docker build -t example-image:latest –build-arg EXAMPLE_VAR=value1 –build-arg DEMO_VAR=value2 Anda .

Membangun sampel Dockerfile menggunakan perintah ini akan memancarkan value1 ke terminal Anda selama proses build. Variabel EXAMPLE_VAR tersedia di lingkungan build dengan nilai value1. Komponen nilai dari flag –build-arg adalah opsional; menghilangkannya akan secara otomatis memilih nilai variabel di lingkungan shell lokal Anda.

Advertisement

Karena argumen build tidak dipertahankan ke gambar yang dibuat, Anda akan melihat string kosong saat menjalankan echo $EXAMPLE_VAR di dalam wadah yang dibuat dari contoh-gambar:terbaru. Variabel yang perlu dirujuk oleh container yang sedang berjalan harus ditambahkan menggunakan instruksi ENV dan –env atau -e build flags.

Meskipun tidak ada dalam gambar akhir, argumen build masih memengaruhi cache build Docker. Mengubah nilai argumen antar build dapat menyebabkan cache hilang untuk instruksi yang mengikuti referensi pertama ke variabel. Pernyataan ARG yang mendefinisikan tidak bertanggung jawab atas invalidation cache.

FROM alpine: ARG terbaru EXAMPLE_VAR # Cache tidak divalidasi – arg belum digunakan RUN example-command # Cache build tidak dapat digunakan mulai saat ini dan seterusnya RUN echo $EXAMPLE_VARDefault Build Arg Values

Instruksi ARG dapat diberikan nilai default untuk digunakan jika tidak ada flag –build-arg yang cocok yang diberikan:

ARG EXAMPLE_VAR=demo

Docker akan selalu memilih nilai yang diberikan oleh flag –build-arg jika tersedia. Jika tidak ada, EXAMPLE_VAR akan disetel ke demo dalam lingkungan build. Hal ini mengurangi jumlah flag yang perlu Anda berikan saat membuat gambar dengan argumen yang jarang diganti.

Di mana Build Args Dapat Digunakan?

Args build dapat dirujuk dalam instruksi Dockerfile yang mengikutinya. Mereka bekerja dengan sebagian besar jenis instruksi termasuk perintah RUN yang dieksekusi di wadah build perantara. Argumen direferensikan dengan cara yang sama seperti variabel lingkungan, menggunakan sintaks $EXAMPLE_VAR. Instruksi

ARG bersifat unik karena secara material memengaruhi build tetapi dapat digunakan sebelum pernyataan FROM. Diperbolehkan untuk mereferensikan argumen build di dalam instruksi FROM, memungkinkan Anda memilih gambar dasar yang berbeda tergantung pada konfigurasi pengguna:

ARG BASE_IMAGE_VERSION=alpine FROM my-app-base:2-${BASE_IMAGE_VERSION}docker build -t my-app:latest –build-arg BASE_IMAGE_VERSION=debian .Advertisement

Build args tersedia dari baris di mana mereka didefinisikan. Setiap instruksi berikut dapat mereferensikan nilai build args yang dibuat di atasnya di Dockerfile. Anda harus menambahkan instruksi ARG untuk semua argumen build yang akan Anda gunakan. Merujuk argumen sebelum didefinisikan – atau menggunakan –build-arg tanpa ARG yang sesuai – akan menghasilkan string kosong.

Build args tidak berfungsi di seluruh tahapan build. Setiap tahap bertindak sebagai build baru dengan kumpulan argumen build-nya sendiri. Instruksi ARG yang disertakan dalam tahap sebelumnya tidak berpengaruh pada yang berikutnya kecuali jika diulang dalam setiap tahap:

FROM php:ARG terbaru BUILD_VERSION FROM composer:latest ARG BUILD_VERSION

Kedua tahap secara eksplisit mendefinisikan argumen BUILD_VERSION sehingga nilai yang ditetapkan dengan –build-arg akan dipasok ke masing-masing.

Build pertimbangan tahap juga berlaku saat Anda menggunakan ARG sebelum instruksi FROM. Argumen ini ada di luar tahap pembuatan apa pun; mereka dibagikan oleh semua pernyataan FROM tetapi tidak dapat direferensikan dengan mengikuti instruksi. Jika Anda ingin menggunakan kembali arg build FROM-level di dalam stage, ulangi instruksi ARG untuk menarik nilainya:

# Hanya berlaku untuk instruksi FROM ARG BASE_IMAGE_VERSION=alpine FROM my-app-base:2-${BASE_IMAGE_VERSION} # Referensi argumen build luar ARG BASE_IMAGE_VERSION # Bekerja seperti yang diharapkan RUN echo $BASE_IMAGE_VERSION

Selain masalah khusus ini, argumen berperilaku serupa dengan variabel lingkungan dalam semua hal lainnya. Anda dapat mengganti nilainya menggunakan instruksi ARG dan ENV, menginterpolasinya ke dalam string, dan menggunakannya dalam ekspresi perluasan bentuk ${EXAMPLE_VAR:-demo}. Ini memilih demo sebagai nilai saat variabel EXAMPLE_VAR tidak disetel.

Build Pradefinisi Args

Docker mendukung beberapa argumen pembangunan secara default, bahkan jika Anda tidak menyertakan instruksi ARG-nya di Dockerfile Anda. Mereka berhubungan dengan pengaturan proxy dan bekerja setiap kali flag –build-arg yang sesuai digunakan. Variabel juga dikecualikan dari keluaran riwayat buruh pelabuhan untuk menghindari pengungkapan detail yang berpotensi sensitif yang dimaksudkan – lebih lanjut tentang perintah ini dan implikasinya di bawah ini.

Advertisement

Builds yang ditangani oleh backend BuildKit juga dapat mengakses beberapa argumen build yang telah ditentukan sebelumnya. Ini diberikan dengan nilai yang disuntikkan secara otomatis. Daftar tersebut mencakup TARGETOS, TARGETARCH, TARGETPLATFORM, dan BUILDOS, BUILDARCH, dan BUILDPLATFORM, di antara beberapa lainnya. Variabel menjelaskan karakteristik lingkungan build dan platform yang ditargetkan oleh gambar baru.

Kapan Menggunakan Build Args?

Build args dapat digunakan untuk memasukkan konfigurasi ke dalam build image Docker. Mereka adalah cara untuk memodifikasi gambar akhir secara dinamis tanpa menulis beberapa Dockerfiles.

Anda dapat menggunakan mekanisme ini untuk memodifikasi gambar dasar build, mengubah perintah yang dijalankan oleh instruksi RUN, dan menyediakan pengaturan yang dapat diubah pengguna yang mengekspos opsi penyesuaian gambar. Argumen build masuk akal untuk sebagian besar nilai yang hanya digunakan selama proses build dan yang tidak ingin Anda hardcode ke dalam Dockerfile.

Ada beberapa situasi di mana pendekatan alternatif harus digunakan. Meskipun nyaman, argumen build tidak ideal untuk data rahasia seperti token dan kunci autentikasi. Karena ARG adalah instruksi Dockerfile, variabel dan nilainya terlihat saat memeriksa gambar dengan perintah riwayat buruh pelabuhan. Oleh karena itu, siapa pun yang memiliki akses ke gambar Anda dapat melihat kunci yang digunakan selama build.

Credentials yang digunakan untuk mengautentikasi proses build Anda ke registry paket dan repo kontrol sumber paling baik diberikan sebagai rahasia build BuildKit. Ini dirancang untuk menangani informasi sensitif dan dipasang sebagai file ke dalam lingkungan build, alih-alih menjadi instruksi gambar.

Summary

Build args memungkinkan Anda mengonfigurasi build image Docker menggunakan kombinasi instruksi Dockerfile dan argumen baris perintah pada waktu build. Tidak seperti variabel lingkungan, argumen build tidak dapat diakses oleh container yang sedang berjalan, meskipun masih terlihat di histori layer gambar.

Advertisement

Build arg adalah pilihan yang tepat untuk setelan yang dapat disesuaikan pengguna yang tidak sensitif yang memengaruhi proses build Anda. Gunakan variabel lingkungan sebagai gantinya saat Anda ingin mengekspos nilai di gambar akhir. Rahasia BuildKit adalah opsi ketiga yang lebih baik untuk data berharga apa pun yang perlu diakses oleh build Anda.

Itulah berita seputar Cara Menggunakan Docker Build Args untuk Mengonfigurasi Gambar Build, semoga bermanfaat. Disadur dari HowToGeek.com.