Cara Memeriksa Perubahan pada Sistem File Docker Container

  • Post author:
  • Post category:Tutorial

 

Docker mewarisi sistem file gambarnya saat pembuatan awal. Sistem file penampung dapat menyimpang dari konten gambar setelah pembuatan jika perubahan dilakukan pada lapisan penampung yang dapat ditulis.

Kemampuan untuk memeriksa perubahan dalam sistem file dapat membantu Anda men-debug masalah dan menyelidiki data yang hilang. File yang ditulis ke sistem file penampung akan hilang saat penampung itu dimulai ulang atau dihancurkan. Dalam beberapa kasus, Anda mungkin secara tidak sengaja melakukan penulisan yang seharusnya diarahkan ke volume tetap.

Dalam artikel ini, kami akan membagikan beberapa teknik untuk mengidentifikasi modifikasi yang dilakukan pada sistem file container. Anda dapat menggunakan informasi ini untuk melacak aktivitas container dan menyelidiki perbedaan antara lingkungan yang berbeda.

Menggunakan Docker Diff

CLI Docker memiliki perintah bawaan untuk tujuan ini. Menjalankan docker diff akan menghitung semua perubahan yang dibuat pada file dan direktori dalam wadah tertentu. Ia menerima ID atau nama wadah yang ingin Anda periksa.

Mulai wadah sederhana untuk tujuan demonstrasi:

$ docker run -it --name alpine alpine:latest sh

Ini akan memulai wadah baru yang menjalankan gambar Alpine. Jendela terminal Anda akan dilampirkan ke wadah. Biarkan jendela ini tetap terbuka.

Sekarang jalankan docker diff di sesi terminal kedua:

$ docker diff alpine

Tidak ada output yang dihasilkan karena container baru masih sama persis dengan filesystem gambar Alpine.

Beralih kembali ke terminal pertama Anda yang masih terpasang ke container. Jalankan beberapa perintah yang menambah, menghapus, atau mengubah file:

/ # demo sentuh / # sentuh contoh

Kembali ke jendela shell pertama Anda. Ulangi perintah docker diff untuk melihat perubahan yang telah dibuat:

$ docker diff alpine A /example C /root C /root/.ash_history A /demo

Sekarang dua file baru terlihat di output perintah. Running touch juga menambahkan entri ke riwayat cangkang penampung. Modifikasi ke /root/.ash_history juga dilaporkan, serta perubahan konsekuen ke direktori /root.

Menafsirkan Docker Diff Output

Setiap baris output yang dihasilkan oleh docker diff diawali dengan A, C atau D tergantung pada jenis perubahan yang terjadi:

A – File atau direktori telah ditambahkan ke sistem file container. Itu tidak ada di gambar asli.C – Isi file atau direktori berbeda dengan versi di gambar.D – Jalur yang ada di gambar telah dihapus dari wadah.

Informasi ini memungkinkan Anda untuk dengan cepat cari perbedaan yang dapat menjelaskan data yang hilang atau perilaku yang tidak diharapkan.

Setiap perubahan sistem file yang tidak muncul di output akan memengaruhi jalur yang dipetakan ke volume Docker. File-file ini disimpan di luar penampung, terlepas dari sistem filenya, sehingga tidak ditampilkan oleh docker diff .

Melihat Konten dalam Gambar Asli

Membandingkan versi file yang disertakan dalam gambar asli dapat membantu. Anda dapat melakukan ini dengan membuat wadah baru dan kemudian menyalin file. Gunakan docker create alih-alih docker run sehingga wadah dibuat tetapi tidak dimulai. Ini akan memastikan bahwa modifikasi yang disebabkan oleh skrip titik masuk gambar tidak memengaruhi hasil.

$ docker create –name temp-container my-image:latest $ docker cp temp-container:/path/to/file copy-file $ docker rm temp-container

Cara alternatif adalah dengan menjalankan wadah dengan titik masuk khusus yang memancarkan konten file ke aliran keluaran standar. Sertakan flag –rm sehingga container secara otomatis dihapus setelah perintah selesai:

$ docker run –rm –entrypoint cat alpine:latest /path/to/file > copy-fileMembandingkan Perbedaan Antara Dua Kontainer

Terkadang Anda mungkin perlu membandingkan perbedaan antara dua wadah berbeda yang menjalankan gambar yang sama. Pertama gunakan docker diff untuk mendapatkan daftar perubahan individual:

$ docker diff first-container > first $ docker diff second-container > second

Sekarang Anda dapat menggunakan alat Unix standar seperti perintah diff untuk menemukan perbedaan dalam dua daftar perubahan:

diff detik pertama 3c3 A /demo

Perbedaan menunjukkan bahwa /a-file baru telah dihapus di kontainer kedua sementara /demo telah ditambahkan.

Cara lain untuk membandingkan kontainer adalah dengan menggunakan buruh pelabuhan export dan perintah tar untuk mengakses daftar file lengkap:

$ docker export demo-container | tar tv -rwxr-xr-x 0/0 0 2022-06-21 14:21 .dockerenv drwxr-xr-x 0/0 0 2022-05-23 17:51 bin/ lrwxrwxrwx 0/0 0 2022-05- 23 17:51 bin/arch -> /bin/busybox lrwxrwxrwx 0/0 0 2022-05-23 17:51 bin/ash -> /bin/busybox lrwxrwxrwx 0/0 0 2022-05-23 17:51 bin/ base64 -> /bin/busybox lrwxrwxrwx 0/0 0 2022-05-23 17:51 bin/bbconfig -> /bin/busybox …

Ulangi perintah ini untuk kedua container Anda. Anda kemudian dapat menggunakan diff untuk membandingkan dua daftar. Output tar yang ditingkatkan dapat membantu Anda melacak ketika file diubah saat waktu modifikasi dan izin ditampilkan.

Summary

Sistem file wadah Docker harus sangat mirip dengan gambar tempat mereka dibuat. Perbedaan dapat terjadi ketika perangkat lunak dalam wadah menulis konten langsung ke sistem file. Pengguna dapat menjadi sumber perbedaan lainnya, ketika mekanisme seperti docker exec digunakan untuk menjalankan perintah dalam container yang sedang berjalan.

Utilitas docker diff menyediakan cara yang nyaman untuk melihat perubahan ini. Meskipun Anda tidak dapat melihat mengapa file ditambahkan atau dihapus, kemampuan untuk mengambil daftar modifikasi dapat sangat berharga dalam memahami mengapa perilaku tertentu diamati. Anda dapat menggunakan alat yang berbeda seperti riwayat buruh pelabuhan dan Menyelam untuk memeriksa perubahan yang dibuat pada lapisan dalam gambar Docker. Kedua pendekatan tersebut dapat digunakan bersama-sama, memungkinkan Anda mengetahui titik pasti file ditambahkan atau dimodifikasi dalam tumpukan lapisan penampung.

Itulah berita seputar Cara Memeriksa Perubahan pada Sistem File Docker Container, semoga bermanfaat. Disadur dari HowToGeek.com.