GNU/Linux >> Belajar Linux >  >> Panels >> Docker

Docker Cache – Cara Melakukan Clean Image Rebuild dan Clear Dockers Cache

Wadah memungkinkan Anda untuk mengemas aplikasi Anda dengan cara portabel yang dapat berjalan di banyak lingkungan. Platform kontainer paling populer adalah Docker.

Tutorial ini akan menjelaskan cara menggunakan cache build Docker untuk keuntungan Anda.

Cache Pembuatan Docker

Membangun citra harus cepat, efisien, dan dapat diandalkan. Konsep gambar Docker hadir dengan lapisan yang tidak dapat diubah. Setiap perintah yang Anda jalankan menghasilkan lapisan baru yang berisi perubahan dibandingkan dengan lapisan sebelumnya.

Semua lapisan yang dibangun sebelumnya di-cache dan dapat digunakan kembali. Namun, jika penginstalan Anda bergantung pada sumber daya eksternal, cache Docker dapat menyebabkan masalah.

Cara Memanfaatkan Cache Build Docker

Untuk memahami masalah build-cache Docker, mari buat aplikasi nginx Docker kustom sederhana. Sebelum Anda membuat image, buat Dockerfile yang memperbarui library dan menambahkan halaman awal kustom:

FROM nginx:1.21.6

# Update all packages
RUN apt-get update && apt-get -y upgrade

# Use a custom startpage
RUN echo '<html><bod>My Custom Startpage</body></html>' > /usr/share/nginx/html/index.html

Anda sekarang dapat membuat image Docker:

$  docker build -t my-custom-nginx .

=> [1/3] FROM docker.io/library/nginx:1.21.6@sha256:e12...  5.8s
=> [2/3] RUN apt-get update && apt-get -y upgrade           3.6s
=> [3/3] RUN echo '<html><bod>My Custom Startpage...        0.2s

=> exporting to image                                       0.1s
=> exporting layers                                         0.1s
=> writing image                                            0.0s
=> naming to docker.io/library/my-custom-nginx

[+] Building 11.3s (7/7) FINISHED

Dalam contoh ini, saya menghapus beberapa output agar mudah dibaca. Jika Anda membuat gambar untuk pertama kali, Anda akan melihat bahwa itu membutuhkan waktu yang cukup lama, dalam kasus saya 11.3s .

Satu langkah eksekusi yang panjang adalah apt-get update && apt-get -y upgrade tergantung pada berapa banyak dependensi yang diperbarui dan seberapa cepat kecepatan internet Anda. Ia memeriksa pembaruan paket pada sistem operasi dan menginstalnya jika tersedia.

Sekarang, Anda menjalankannya lagi, dan Anda mendapat manfaat dari cache build Docker:

$ docker build -t my-custom-nginx .

=> [1/3] FROM docker.io/library/nginx:1.21.6@sha256:e1211ac1…   0.0s
=> CACHED [2/3] RUN apt-get update && apt-get -y upgrade        0.0s
=> CACHED [3/3] RUN echo '<html><bod>My Custom Startpage...     0.0s

=> exporting to image                                           0.0s
=> exporting layers                                             0.0s
=> writing image                                                0.0s
=> naming to docker.io/library/my-custom-nginx

Building 1.1s (7/7) FINISHED

Kali ini, pembuatan gambar sangat cepat karena dapat menggunakan kembali semua gambar yang dibuat sebelumnya. Saat Anda menyesuaikan halaman awal Anda di Dockerfile, Anda melihat bagaimana perilaku caching terpengaruh:

FROM nginx:1.21.6

# Update all packages
RUN apt-get update && apt-get -y upgrade

# Use a custom startpage
RUN echo '<html><bod>New Startpage</body></html>' > /usr/share/nginx/html/index.html

Sekarang, buat gambar lagi:

$ docker build -t my-custom-nginx .

=> [1/3] FROM docker.io/library/nginx:1.21.6@sha256:e1211ac1…   0.0s
=> CACHED [2/3] RUN apt-get update && apt-get -y upgrade        0.0s
=> [3/3] RUN echo '<html><bod>My Custom Startpage...            0.2s

=> exporting to image                                           0.0s
=> exporting layers                                             0.0s
=> writing image                                                0.0s
=> naming to docker.io/library/my-custom-nginx

Building 2.1s (7/7) FINISHED

Kali ini hanya membangun kembali lapisan terakhir karena mengenali bahwa RUN perintah telah berubah. Namun, itu menggunakan kembali langkah pembangunan ke-2 yang intens dan tidak memperbarui dependensi sistem operasi.

Perilaku caching cerdas. Setelah 1 langkah perlu dibangun kembali, setiap langkah berikutnya dibangun kembali. Oleh karena itu, ada baiknya untuk meletakkan bagian yang sering berubah di akhir Dockerfile untuk menggunakan kembali lapisan build sebelumnya.

Namun, mungkin Anda ingin memaksa membangun kembali lapisan yang di-cache untuk memaksa pembaruan paket. Memaksa pembangunan kembali mungkin diperlukan karena Anda ingin menjaga keamanan aplikasi Anda dan menggunakan pembaruan terbaru jika tersedia.

Cara Menggunakan --no-cache Build Docker Opsi

Mungkin ada alasan berbeda untuk menonaktifkan build-cache. Anda dapat membangun kembali gambar dari gambar dasar tanpa menggunakan lapisan yang di-cache dengan menggunakan --no-cache pilihan.

$ docker build -t my-custom-nginx .

=> CACHED [1/3] FROM docker.io/library/nginx:1.21.6@sha256:...  0.0s
=> [2/3] RUN apt-get update && apt-get -y upgrade               3.5s
=> [3/3] RUN echo '<html><bod>My Custom Startpage...            0.2s

=> exporting to image                                           0.1s
=> exporting layers                                             0.0s
=> writing image                                                0.0s
=> naming to docker.io/library/my-custom-nginx

Building 5.5s (7/7) FINISHED

Lapisan baru dibangun dan digunakan. docker build menjalankan kedua perintah kali ini, yang datang dengan pendekatan semua atau tidak sama sekali. Entah Anda memberikan --no-cache opsi yang mengeksekusi semua perintah, atau Anda akan menyimpan cache sebanyak mungkin.

Cara Menggunakan Argumen Docker untuk Cache-Busting

Opsi lain memungkinkan memberikan titik awal kecil di Dockerfile. Anda perlu mengedit Dockerfile Anda seperti ini:

FROM nginx:1.21.6

# Update all packages
RUN apt-get update && apt-get -y upgrade

# Custom cache invalidation
ARG CACHEBUST=1

# Use a custom startpage
RUN echo '<html><bod>New Startpage</body></html>' > /usr/share/nginx/html/index.html

Anda menambahkan CACHEBUST argumen ke Dockerfile Anda di lokasi yang ingin Anda bangun kembali. Sekarang, Anda dapat membuat image Docker dan memberikan nilai yang selalu berbeda yang menyebabkan semua perintah berikut dijalankan kembali:

$ docker build -t my-custom-nginx --build-arg CACHEBUST=$(date +%s) .

=> [1/3] FROM docker.io/library/nginx:1.21.6@sha256:e1211ac1...    0.0s
=> CACHED [2/3] RUN apt-get update && apt-get -y upgrade           0.0s
=> [3/3] RUN echo '<html><bod>My Custom Startpage...               0.3s

=> exporting to image                                              0.0s
=> exporting layers                                                0.0s
=> writing image                                                   0.0s
=> naming to docker.io/library/my-custom-nginx

Building 1.0s (7/7) FINISHED

Dengan memberikan --build-arg CACHEBUST=$(date +%s) , Anda menyetel parameter ke nilai yang selalu berbeda yang menyebabkan semua lapisan berikut dibangun kembali.


Docker
  1. Cara Memindahkan Gambar Docker antar Host

  2. Cara Memodifikasi Gambar Docker

  3. Cara Membuat dan Mengonfigurasi Gambar Docker Kustom secara Otomatis dengan Dockerfile – Bagian 3

  1. Cara Mengekspor dan Mengimpor Kontainer Docker

  2. Cara Menggunakan Dockerfile untuk Membangun Gambar Docker

  3. Cara Mengemas dan Mentransfer Gambar Docker Dari Satu Server ke Server Lainnya

  1. Cara Update Image dan Container Docker ke Versi Terbaru

  2. Cara melakukan perubahan pada gambar Docker

  3. Cara membuat Gambar Docker dari Wadah dan File Docker