‫Baiklah, dalam kuliah ini kita akan berbicara tentang lapisan gambar.
‫Jadi ini adalah konsep dasar tentang cara kerja Docker. Ia menggunakan sesuatu yang disebut sistem
‫file gabungan untuk menyajikan serangkaian perubahan sistem file sebagai sistem file aktual.
‫Kita akan menyelami sejarah dan memeriksa perintah dan melihat bagaimana kita dapat menggunakannya untuk
‫memahami apa yang sebenarnya terbuat dari gambar. Kita akan belajar sedikit tentang konsep copy
‫on write tentang bagaimana sebuah wadah berjalan sebagai lapisan tambahan di atas gambar.
‫Apa yang saya maksud dengan lapisan gambar?
‫Ini sebenarnya transparan sepenuhnya untuk Anda ketika Anda menggunakan Docker, tetapi ketika Anda mulai menggali
‫perintah tertentu, seperti perintah sejarah, inspeksi dan komit, Anda mulai mendapatkan perasaan
‫bahwa gambar bukan gumpalan besar data yang datang dan pergi dalam satu potongan besar.
‫Kanan?
‫Jika Anda perhatikan ketika kami benar-benar melakukan Docker menarik, waktu-waktu tertentu Anda mungkin melihat
‫kata-kata yang menunjukkan bahwa ada sesuatu yang sudah Anda miliki, seperti Anda sudah men-cache
‫beberapa bagian dari itu, dan itu semua bermuara pada kenyataan bahwa gambar dirancang menggunakan konsep sistem file gabungan
‫membuat lapisan tentang perubahan.
‫Jika kita bisa dengan cepat hanya melihat apa yang kita miliki di Docker ... dalam gambar Docker sebenarnya ...
‫Beberapa saat yang lalu, kami bermain-main dengan tag dengan Nginx. Kanan? Kami ingat bahwa ID
‫gambar Nginx sama dan kami memiliki tag berbeda untuk nama gambar yang sama.
‫Jadi mari kita lakukan riwayat buruh pelabuhan cepat di nginx terbaru.
‫Apa yang saya lihat di sini?
‫Ini bukan daftar hal-hal yang sebenarnya terjadi di wadah karena ini adalah tentang gambar.
‫Ini sebenarnya adalah sejarah lapisan gambar.
‫Setiap gambar dimulai dari awal dengan lapisan kosong yang dikenal sebagai awal.
‫Kemudian setiap set perubahan yang terjadi setelah itu pada sistem file, pada gambar, adalah lapisan lain.
‫Anda mungkin memiliki satu lapisan, Anda mungkin memiliki puluhan lapisan dan beberapa lapisan mungkin tidak ada perubahan dalam
‫hal ukuran file.
‫Anda akan melihat di sini bahwa kita sebenarnya memiliki perubahan di sini yang hanya merupakan perubahan metadata tentang perintah
‫mana yang sebenarnya akan kita jalankan. Kami akan membahasnya sedikit ketika kita pergi ke
‫Dockerfile.
‫Tetapi, untuk sekarang, Anda benar-benar dapat melihat bahwa yang ini menambahkan sejumlah besar file yang berukuran 123MB.
‫Kemudian kami membuat perubahan di sini dan perubahan di sini dan saya kebetulan
‫tahu karena Dockerfiles bahwa ini benar-benar hanya informasi metadata Dockerfile.
‫Saat Anda naik, kami memiliki beberapa perubahan data lagi.
‫Anda akan melihat bahwa ini sebenarnya sangat berbeda di gambar lain.
‫Jadi jika kita pergi ke mysql history buruh pelabuhan, ia memiliki set lapisan gambar yang sama sekali berbeda.
‫Biarkan saya menggambar ini sedikit untuk Anda dan mungkin ini akan membantu.
‫Saat kami memulai gambar, saat kami
‫membuat gambar baru, kami mulai dengan satu lapisan. Setiap lapisan mendapatkan SHA uniknya sendiri yang membantu sistem mengidentifikasi apakah lapisan
‫itu memang sama dengan lapisan lainnya.
‫Anggap saja di awal salah satu milik Anda, Anda mungkin memiliki Ubuntu di bagian paling bawah.
‫Itu lapisan pertama di gambar Anda.
‫Kemudian Anda membuat Dockerfile, yang menambahkan beberapa file lagi dan itu lapisan lain di
‫atas gambar itu. Mungkin kita menggunakan Apt untuk itu.
‫Kemudian di Dockerfile Anda, Anda membuat perubahan variabel lingkungan. Itu bersama-sama adalah gambar Anda.
‫BAIK?
‫Anda mungkin memiliki gambar berbeda yang dimulai dari debian: jessie dan kemudian pada gambar itu Anda
‫juga dapat menggunakan Apt
‫untuk menginstal beberapa hal, katakanlah MySQL. Anda mungkin menyalin beberapa file, Anda dapat membuka port.
‫Jadi masing-masing dari perubahan ini yang biasanya Anda buat di Dockerfile, tetapi Anda juga dapat membuat
‫dengan perintah commit docker yang akan kami periksa sebentar lagi.
‫Ini juga gambar lain dan itu semua dibundel bersama.
‫Apa yang terjadi jika saya memiliki gambar lain yang juga menggunakan versi jessie yang sama?
‫Nah, gambar itu dapat memiliki perubahan sendiri di atas lapisan
‫yang sama yang saya miliki di cache. Di sinilah konsep dasar cache lapisan gambar
‫menghemat banyak waktu dan ruang. Karena kita tidak perlu mengunduh layer yang sudah
‫kita miliki, dan ingat itu menggunakan SHA unik untuk setiap layer sehingga dijamin menjadi
‫layer yang tepat yang dibutuhkannya. Ia tahu cara mencocokkannya antara Docker Hub dan cache lokal kami. Saat kami membuat
‫perubahan pada gambar kami, mereka membuat lebih banyak lapisan.
‫Jika kita memutuskan bahwa kita ingin memiliki gambar yang sama menjadi gambar dasar untuk lebih banyak lapisan, maka hanya
‫menyimpan satu salinan dari setiap lapisan.
‫Dalam sistem ini, sungguh, salah satu manfaat terbesar adalah kita tidak pernah menyimpan data gambar yang sama lebih dari
‫satu kali di sistem file kita.
‫Ini juga berarti bahwa ketika kita mengunggah dan mengunduh, kita tidak perlu
‫mengunggah dan
‫mengunduh lapisan yang sama yang sudah kita miliki di sisi lain. Jika Anda memiliki gambar Anda sendiri dan
‫itu adalah kebiasaan yang Anda buat sendiri, dan kemudian Anda menambahkan, katakanlah, server Apache sebagai lapisan lain di
‫Dockerfile Anda, dan kemudian Anda harus membuka port 80. Kemudian, di bagian paling akhir, Anda benar-benar menyuruhnya menyalin di kode sumber tetapi Anda benar-benar
‫memiliki dua Dockerfiles berbeda untuk dua situs web yang berbeda, dan setiap baris di
‫Dockerfiles sama kecuali untuk bagian terakhir tempat Anda menyalin Situs Web. A ke dalam gambar dan kemudian Situs B,
‫Anda akan berakhir dengan dua gambar. Kami akan tunjukkan itu sebentar lagi. Ini membuat satu gambar dan
‫ini membuat satu gambar, tetapi satu-satunya file yang benar-benar disimpan adalah yang satu ini, ini,
‫lapisan ini dan kemudian lapisan kecil ini dan kemudian lapisan kecil ini.
‫Jadi kita tidak pernah menyimpan seluruh tumpukan lapisan gambar lebih dari sekali jika itu benar-benar lapisan yang sama.
‫Bagaimana cara kerjanya dengan kontainer?
‫Jika Anda memiliki gambar Anda, katakanlah kita memiliki gambar Apache kami, dan kami memutuskan untuk menjalankan sebuah
‫wadah dari itu, semua Docker lakukan adalah menciptakan lapisan baca / tulis baru untuk wadah
‫di atas gambar Apache itu. Ketika kita membaca dengan teliti sistem file dan
‫hal-hal ini, semua wadah dan gambar semua hanya terlihat seperti sistem file biasa, tetapi di bawah driver
‫penyimpanan yang digunakan oleh Docker sebenarnya layering, seperti tumpukan pancake, semua perubahan
‫pada satu sama lain.
‫Jadi jika saya menjalankan dua kontainer secara bersamaan dari gambar Apache yang sama, kontainer 1 dan kontainer 2 hanya akan
‫ditampilkan, dalam hal ruang file, mereka hanya akan menjadi perbedaan antara apa yang terjadi
‫pada wadah hidup yang sedang berjalan dan apa sedang terjadi pada gambar dasar, yang hanya baca.
‫Ketika Anda menjalankan Kontainer dan Anda mengubah file yang datang melalui
‫gambar, katakanlah saya mulai wadah 3, dan saya benar-benar masuk dan mengubah file yang ada di gambar ini di wadah
‫berjalan ...
‫ini dikenal sebagai copy-on-write.
‫Apa yang dilakukan adalah sistem file akan mengeluarkan file itu dari gambar dan menyalinnya ke perbedaan ini ...
‫di sini ... dan menyimpan salinan file itu di layer container.
‫Jadi sekarang wadah benar-benar hanya proses yang berjalan dan file-file
‫yang berbeda dari yang ada di gambar Apache.
‫Jika kita kembali ke daftar gambar kita dan kita melihat perintah-perintah ini lagi, dan kita
‫melihat yang di bawah dan melihat perbedaan tanggal? Kita benar-benar dapat melihat ketika gambar ini diubah di
‫Docker Hub dan diperbarui dari waktu ke waktu, bahwa perubahan ini belum
‫berubah di lapisan paling bawah dalam empat minggu dan kemudian perubahan terbaru telah terjadi dalam dua
‫minggu terakhir.
‫Oh, omong-omong, jangan khawatir tentang bagian yang hilang.
‫Itu sebenarnya hanya keliru di dalam antarmuka Docker.
‫Itu tidak berarti ada sesuatu yang salah atau salah konfigurasi. Artinya adalah benar-benar, gambar mysql ini di
‫sini adalah ID gambar ini.
‫Lapisan lain dalam gambar sebenarnya bukan gambar itu sendiri.
‫Mereka hanya lapisan di dalam gambar ini,
‫sehingga mereka tidak perlu mendapatkan ID gambar mereka sendiri di sana.
‫Secara pribadi, saya pikir itu sedikit menyesatkan dalam antarmuka untuk mengatakan itu, tetapi itulah cara mereka menulisnya.
‫Jadi sekarang setelah kita memahami perintah sejarah untuk menunjukkan kepada
‫kita gambar apa yang mungkin dibuat, mari kita gunakan perintah inspeksi.
‫Apa yang dilakukan adalah ini memberi kita semua detail tentang gambar.
‫Ini pada dasarnya adalah metadata. Ingat ketika kita berbicara tentang suatu
‫gambar yang terdiri dari dua bagian, binari
‫dan dependensinya, dan kemudian metadata tentang gambar itu? Nah, periksa memberi Anda kembali metadata.
‫Selain hanya info dasar, seperti ID gambar dan tag-nya, Anda mendapatkan segala macam detail tentang bagaimana gambar
‫ini diharapkan untuk dijalankan.
‫Ini sebenarnya memiliki opsi untuk mengekspos dua port ini di dalam gambar sehingga Anda tahu kapan Anda ingin memulainya,
‫port mana yang perlu Anda buka di dalam host Docker Anda jika Anda ingin menerima koneksi.
‫Anda benar-benar dapat melihat bahwa variabel lingkungan dilewatkan, termasuk versi
‫Nginx yang sedang dijalankan dan path. Anda benar-benar dapat melihat perintah itu akan berjalan ketika Anda memulai
‫gambar secara default.
‫Sekali lagi, banyak dari hal-hal ini benar-benar dapat diubah seperti yang kita lakukan sebelumnya dengan perintah
‫run docker container.
‫Tapi ini menunjukkan kepada kita semua default dan beberapa informasi menarik lainnya seperti penulis,
‫dan di sini di bagian bawah, bahwa ini adalah arsitektur AMD64, yang hampir semua PC dan Mac normal
‫berjalan pada saat ini.
‫Kami tidak memiliki terlalu banyak mesin 32 bit, jadi ini hanyalah arsitektur Intel
‫64 bit standar dan dirancang untuk berjalan di OS Linux.
‫Oke, ulasan singkat.
‫Jadi kami telah belajar banyak tentang gambar dan bagaimana mereka dibuat, dan kami
‫menemukan bahwa mereka sebenarnya tidak serumit itu. Sungguh, mereka hanya serangkaian perubahan pada sistem file dan metadata tentang perubahan itu.
‫Anda mengetahui bahwa setiap lapisan memiliki identitas uniknya sebagai SHA.
‫Mereka hanya disimpan satu kali pada setiap sistem, jadi pada setiap daemon Docker, setiap layer hanya diwakili satu kali
‫dalam sistem file.
‫Itu memberi kami banyak penghematan dalam ruang, serta waktu transfer dalam mengirim gambar bolak-balik di
‫antara pendaftar, seperti Docker Hub. Dan, sungguh, ketika Anda memulai
‫sebuah wadah, itu hanya satu lapisan perubahan di atas gambar yang ada.
‫Jadi sebenarnya biasanya sangat kecil. Kami belajar tentang sejarah dan memeriksa perintah dan bagaimana mereka
‫bisa mengajari kami apa yang terjadi di dalam gambar dan bagaimana itu dibuat.