Cara Membuat Docker Membangun Kembali Gambar Tanpa Cache

  • Post author:
  • Post category:Tutorial

Docker menyimpan hasil pembangunan gambar untuk mempercepat pembangunan kembali berikutnya. Meskipun mekanisme ini umumnya dapat diandalkan, terkadang Anda ingin membangun kembali gambar tanpa menggunakan cache. Ini bisa untuk mendiagnosis masalah atau memeriksa prosedur build lengkap yang dapat direproduksi di lingkungan yang bersih.

Dalam artikel ini, Anda akan mempelajari cara mencapai build baru tanpa menghapus cache secara manual. Anda juga akan melihat cara menarik gambar dasar yang diperbarui sehingga build Anda cocok dengan output yang akan dihasilkan oleh instalasi Docker baru.

Bagaimana Cache Bekerja

Berikut adalah Dockerfile sederhana:

FROM alpine:latest 
COPY 1.txt /1.txt 
COPY 2.txt /2.txt

Isi file sampel di direktori kerja Anda dan buat image:

$ echo 1 > 1.txt 
$ echo 2 > 2.txt 
$ docker build -t demo:latest .

Output akan terlihat seperti ini:

Mengirim konteks build ke Docker daemon 5.12kB Langkah 1/3 : DARI alpine:latest —> 9c6f07244728 Langkah 2/3 : COPY 1.txt /1.txt —> db61ff73c0b5 Langkah 3/3 : COPY 2.txt /2.txt —> f1129e47fc12 Berhasil membangun f1129e47fc12 Berhasil menandai demo:latest

Sekarang memodifikasi 2.txt dan kemudian membangun kembali gambar:

$ echo two > 2.txt $ docker build -t demo:latest . Mengirim konteks build ke daemon Docker 5.12kB Langkah 1/3 : DARI alpine:latest —> 9c6f07244728 Langkah 2/3 : COPY 1.txt /1.txt —> Menggunakan cache —> db61ff73c0b5 Langkah 3/3 : COPY 2.txt /2.txt —> 75ba7d786049 Berhasil membangun 75ba7d786049 Berhasil menandai demo:latest

Tahap pembuatan kedua menunjukkan Menggunakan cache karena isi 1.txt belum berubah. Lapisan perantara dengan ID db61ff73c0b5 akan digunakan kembali untuk build baru.

Menonaktifkan Cache

Anda dapat menonaktifkan penggunaan cache lapisan perantara dengan menyertakan flag –no-cache saat Anda menjalankan docker build:

$ echo second > 2.txt $ docker build –no-cache -t demo:terbaru . Mengirim konteks build ke daemon Docker 5.12kB Langkah 1/3 : DARI alpine:latest —> 9c6f07244728 Langkah 2/3 : COPY 1.txt /1.txt —> 1590b2407dd4 Langkah 3/3 : COPY 2.txt / 2.txt —> afb31630ce32 Berhasil membangun afb31630ce32 Berhasil menandai demo:latest

Kali ini layer image baru, ID 1590b2407dd4, telah dibuat pada tahap pembuatan kedua, meskipun 1.txt tetap tidak dimodifikasi.

Anda dapat menggunakan –no- cache flag untuk memaksa pembangunan kembali ketika Anda mencurigai cache sudah basi atau Anda ingin memulai dari awal. Performa build akan berkurang karena Docker perlu membuat ulang setiap layer.

Menarik/Pull Base Image yang Diperbarui

Bentuk caching lainnya menyangkut gambar dasar yang dirujuk oleh Dockerfile Anda dalam instruksi FROM-nya. Contoh gambar di atas menggunakan alpine:latest sebagai basisnya. Docker tidak akan secara otomatis menarik versi terbaru dari alpine:latest, kecuali gambar tersebut belum ada di host Anda.

Ini berarti build pertama dari Dockerfile akan menarik gambar dasar yang Anda butuhkan, selama Anda tidak melakukannya sudah memilikinya. Pembangunan kembali berikutnya tidak akan menyegarkan gambar sehingga Anda dapat membangun di pangkalan yang sudah ketinggalan zaman. Membangun image pada host Docker yang berbeda mungkin tidak menghasilkan output yang sama jika host tersebut menarik versi base yang lebih baru.

Anda dapat memaksa Docker untuk memeriksa image dasar yang diperbarui pada waktu build dengan menambahkan flag –pull ke perintah build docker Anda . Ini terpisah dari –no-cache. Menggunakan –pull akan mengambil manifes tag gambar dari registrinya dan membandingkannya dengan versi di mesin Anda. Gambar baru akan ditarik dari registri ketika ada perbedaan dalam manifests.

$ docker build –no-cache –pull -t demo:latest . Mengirim konteks build ke daemon Docker 5.12kB Langkah 1/3 : DARI alpine: terbaru terbaru: Menarik dari perpustakaan/alpine Intisari: sha256:bc41182d7ef5ffc53a40b044e725193bc10142a1243f395ee852a8d9730fc2ad Status: Gambar terbaru: untuk alpine Langkah 2f07 —> 9c SALIN 1.txt /1.txt —> 4fee970dfaab Langkah 3/3 : SALIN 2.txt /2.txt —> 60d2e3fff0fb Berhasil membuat 60d2e3fff0fb Berhasil menandai demo:latest

Contoh di atas menunjukkan bagaimana output build berubah ketika – -pull flag digunakan. Docker mencoba menarik gambar dasar Alpine, meskipun sudah ada di mesin dari contoh build sebelumnya. Intisari gambar (SHA) dicetak ke terminal. Dalam hal ini intisari tidak berubah dari versi lokal sehingga Docker melaporkan bahwa gambar sudah diperbarui.

Bendera –no-cache dan –pull dapat digunakan secara terpisah atau dalam kombinasi. Menambahkan keduanya memberi Anda batu tulis terbersih untuk memulai build Anda, memaksa Docker untuk memeriksa gambar dasar yang diperbarui dan mengabaikan lapisan yang dibuat sebelumnya. Ini setara dengan menjalankan build pada host Docker yang baru diinstal.

Menggunakan Docker Compose

Docker Compose mendukung flag –no-cache dan –pull juga. Mereka memiliki efek yang sama seperti rekan-rekan membangun buruh pelabuhan mereka.

# Compose v2 
$ docker compose build --no-cache --pull 
# Compose v1 
$ docker-compose build --no-cache --pull

Membersihkan Build Cache

Anda dapat membersihkan build cache untuk menjamin itu tidak digunakan. Ini juga membantu mengosongkan ruang disk berlebih yang digunakan oleh lapisan build yang di-cache.

Jalankan perintah prune pembuat buruh pelabuhan untuk mengosongkan cache Anda. Ini hanya berfungsi saat Anda membuat gambar dengan BuildKit build engine modern.

$ docker builder prune

Menjalankan perintah tanpa argumen hanya menghapus cache build yang menggantung. Ini terkait dengan cache yang terkait dengan gambar yang tidak lagi ada di host Anda. Tambahkan flag -a untuk mengosongkan cache sepenuhnya, termasuk layer yang digunakan oleh images:

$ docker builder prune -a

Pruning juga menerima flag –filter yang dapat digunakan untuk menargetkan cache yang dimodifikasi sebelum atau sejak periode waktu tertentu.

# Hapus cache yang dimodifikasi dalam dua jam terakhir 
$ docker build prune --filter sejak=2 jam 
# Hapus cache yang dimodifikasi lebih dari dua jam yang lalu 
$ docker build prune --filter hingga=2h

Cache build Docker meningkatkan kinerja dengan menggunakan kembali lapisan gambar perantara di antara build . Ini menghindari pekerjaan yang sia-sia untuk membuat ulang lapisan yang sudah ada dan belum berubah. Meskipun cache build umumnya diinginkan, ada skenario di mana Anda mungkin ingin menjalankan build tanpanya. Menambahkan flag –no-cache ke build Anda memberikan perspektif yang akurat tentang apa yang akan dihasilkan build saat dijalankan pada host baru. gambar dasar host.

Stale perlu dipertimbangkan di samping cache build juga. Docker menggunakan kembali versi lokal dari gambar dasar secara default, yang dapat menyebabkan Anda membuat gambar baru pada basis yang sudah ketinggalan zaman. Menggunakan flag –pull memaksa Docker untuk memeriksa image dasar yang diperbarui sebelum memulai build, memberi Anda konsistensi yang lebih besar di berbagai lingkungan.

Itulah berita seputar Cara Membuat Docker Membangun Kembali Gambar Tanpa Cache, semoga bermanfaat. Disadur dari HowToGeek.com.