Cara Menggunakan Beberapa Konteks Bangun Docker untuk Merampingkan Perakitan Gambar.

\u003cimg data-pagespeed-no-defer/\u003e.

Konsep Dockers dari konteks build adalah salah satu karakteristiknya yang paling membatasi dan disalahpahami. Konteks build mendefinisikan file dan folder lokal yang dapat Anda rujuk di Dockerfile Anda. Konten di luarnya tidak dapat digunakan, yang sering kali menghambat prosedur pembuatan yang rumit.

BuildKit v0. 8 meningkatkan situasi ini dengan memungkinkan Anda menggunakan beberapa konteks dengan setiap build yang Anda lakukan. Ini memudahkan untuk mereferensikan file yang mungkin berada di lokasi yang benar-benar terpisah, seperti file dalam direktori kerja Anda dan ketergantungan pada URL jarak jauh.

Dalam artikel ini, jelaskan dengan baik mengapa beberapa konteks build berguna dan bagaimana Anda dapat menggunakannya dengan rilis Docker CLI terbaru. Pertama mari kita rekap apa konteks build dan mengapa begitu banyak orang mengalami masalah di masa lalu.

Tujuan Konteks Bangun.

Docker berbasis daemon. Proses yang menjalankan pembuatan gambar Anda tidak bergantung pada proses CLI yang mengeluarkan perintah. Daemon dapat ditemukan di host jarak jauh yang tidak dapat mengakses sistem file mesin Anda secara langsung.

Konteks build mengacu pada file yang ditransfer ke daemon Docker saat build terjadi. Inilah sebabnya mengapa hanya konten dalam konteks yang dapat direferensikan oleh Dockerfile Anda.

Itu umum untuk menjalankan pembangunan buruh pelabuhan dengan. sebagai argumennya, yang menjadikan direktori kerja Anda sebagai konteks build:.

docker build -t situs web saya: terbaru.

Ini mengizinkan referensi ke jalur apa pun di dalam direktori kerja Anda:.

FROM httpd:latestCOPY index.html /var/www/html/index.html

Anda tidak dapat menjangkau untuk menyalin apa pun di atas direktori kerja di sistem file Anda:.

FROM httpd:latestCOPY index.html /var/www/html/index.htmlCOPY ../company-css/company.css /var/www/html/company.css

Setiap file yang Anda butuhkan dalam gambar wadah Anda harus ada di bawah satu direktori yang dapat Anda gunakan sebagai konteks pembangunan. Ini bisa menjadi masalah dalam situasi seperti yang ditunjukkan di atas, di mana Anda ingin menarik dependensi dari sumber yang tidak ada di pohon proyek Anda.

Menggunakan Beberapa Konteks Bangun.

Beberapa konteks build sekarang didukung di BuildKit v0. 8 dan yang lebih baru ketika Anda ikut serta ke sintaks Dockerfile v1. 4. Rilis ini dikirimkan dengan Docker CLI mulai dari versi 20. 10. 13. Anda seharusnya dapat menggunakannya hari ini jika Anda menjalankan versi terbaru Docker.

Anda harus membangun gambar Anda dengan BuildKit untuk menggunakan banyak konteks. Mereka tidak didukung oleh pembuat warisan. Gunakan perintah docker buildx build alih-alih build docker biasa:.

$ docker buildx build -t situs web saya: terbaru.

Sekarang Anda dapat menggunakan flag --build-context untuk mendefinisikan beberapa konteks build bernama:.

$ docker buildx build -t situs web saya: terbaru. \\\r\n . /perusahaan-css \\\r\n . /perusahaan-js \\.

Sesuaikan Dockerfile Anda ke konten referensi dari konteks ini:.

#syntax=docker/dockerfile:1.4FROM httpd:latestCOPY index.html /var/www/html/index.htmlCOPY --from=company-css /company.css /var/www/html/company.cssCOPY --from=company-js /company.js /var/www/html/company.js

Ini mengilustrasikan bagaimana Anda dapat menyalin file dan folder yang berada di luar konteks build utama Anda, terlepas dari posisinya di pohon sistem file Anda.

Dockerfile v1. 4 deklarasi sintaks diperlukan untuk mengaktifkan dukungan untuk fitur. Anda kemudian dapat menggunakan opsi --from dengan instruksi ADD dan COPY untuk menarik file dari konteks build bernama, mirip dengan referensi sumber daya di tahap build sebelumnya.

Urutan Prioritas.

Beberapa konteks build mengubah urutan resolusi sumber daya untuk --from flag. Docker sekarang akan mencocokkan kunci yang Anda berikan (--from\u003dkey) menggunakan prosedur berikut:.

Cari set konteks build bernama dengan flag --build-context.

Cari tahap pembuatan sebelumnya yang dibuat dengan FROM my-image: nama panggung AS terbaru.

Buat tahap build inline baru menggunakan kunci yang diberikan sebagai gambar tahapan.

Ini berarti Anda dapat menggunakan konteks bernama untuk mengganti dependensi jarak jauh yang ditentukan menggunakan tahapan build.

Pertimbangkan contoh ini:.

#syntax=docker/dockerfile:1.4FROM my-org/company-scss:latest AS cssRUN sass company.scss company.cssFROM httpd:latestCOPY index.html /var/www/html/index.htmlCOPY --from=css /company.css /var/www/html/company.css

Gambar Docker ini menarik beberapa sumber daya jarak jauh dari gambar Docker lain yang dibagikan. Ini dapat membuat kesulitan saat Anda menguji proyek Anda, mungkin ada bug dalam ketergantungan yang ingin Anda tambal dengan cepat.

Konteks build bernama memungkinkan Anda mengganti nama panggung css untuk menyediakan file lokal sebagai gantinya:.

$ docker buildx build -t situs web saya: terbaru. --build-context css\u003dcss/.

Ini akan menyalin direktori kerja Anda css/perusahaan. css ke dalam gambar akhir, alih-alih versi yang disediakan oleh my-org/company-scss: dependensi terbaru.

Urutan resolusi berarti penggantian dapat diterapkan bahkan jika gambar Anda tidak menggunakan tahapan pembuatan bernama. Dengan mendefinisikan konteks pembangunan dengan nama yang sama dengan gambar, Dockerfile Anda akan menarik konten dari konteks itu, bukan gambar registri asli.

$ docker buildx build -t situs web saya: terbaru. --build-context my-org/company-scss:latest\u003dcss/\n.

Konteks build bernama mendukung semua sumber yang sudah diterima oleh docker build:.

--build-context my-context\u003d. /local/path , Jalur di sistem file Anda.

--build-context my-context=

Komentar