Saya telah mendengar kebingungan muncul beberapa kali baru-baru ini di sekitar apa wadah Docker, dan lebih khusus apa yang terjadi di dalam, sehubungan dengan perintah & proses yang saya gunakan saat berada di dalam wadah Docker.
Bisakah seseorang memberikan gambaran umum tingkat tinggi tentang apa yang terjadi?
Jawaban:
Docker dilemparkan ke dalam ember virtualisasi, karena orang beranggapan bahwa entah bagaimana itu memvirtualisasikan perangkat keras di bawahnya. Ini adalah nama yang salah yang meresapi dari terminologi yang digunakan Docker, terutama istilah wadah.
Namun Docker tidak melakukan sesuatu yang ajaib sehubungan dengan virtualisasi perangkat keras sistem. Alih-alih memanfaatkan kemampuan Kernel Linux untuk membangun "pagar" di sekitar fasilitas utama, yang memungkinkan proses untuk berinteraksi dengan sumber daya seperti jaringan, sistem file, dan izin (antara lain) untuk memberikan ilusi bahwa Anda sedang berinteraksi dengan sistem yang berfungsi penuh.
Berikut adalah contoh yang menggambarkan apa yang terjadi ketika kami memulai wadah Docker dan kemudian memasukkannya melalui doa
/bin/bash
.Sekarang dari dalam wadah ini, jika kita jalankan
ps -eaf
:Beralih ke tab terminal lain tempat kita masuk ke sistem host yang menampung wadah Docker, kita dapat melihat ruang proses yang digunakan wadah "sebenarnya":
Sekarang jika kita kembali ke tab Docker dan meluncurkan beberapa proses di dalamnya dan latar belakang semuanya, kita dapat melihat bahwa kita sekarang memiliki beberapa proses anak berjalan di bawah proses Bash utama yang awalnya kita mulai sebagai bagian dari peluncuran wadah Docker.
CATATAN: Prosesnya adalah 4
sleep 1000
perintah yang sedang di latar belakang.Perhatikan bagaimana di dalam wadah Docker proses ditugaskan ID proses (PID) dari 48-51. Lihat mereka di
ps -eaf
output di mereka juga:Namun, dengan gambar berikut ini, banyak "keajaiban" yang dilakukan Docker terungkap.
Lihat bagaimana 4
sleep 1000
proses itu sebenarnya hanya proses anak-anak untuk proses Bash asli kita? Juga perhatikan bahwa wadah Docker asli kami/bin/bash
sebenarnya adalah proses anak ke daemon Docker juga.Sekarang jika kita harus menunggu 1000+ detik untuk
sleep 1000
menyelesaikan perintah asli , dan kemudian jalankan 4 yang lebih baru, dan mulai wadah Docker lain seperti ini:Output dari komputer host
ps -eaf
akan terlihat seperti ini:Dan kontainer Docker lainnya, semuanya akan muncul sebagai proses di bawah daemon Docker.
Jadi Anda lihat, Docker benar-benar bukan virtualisasi ( dalam pengertian tradisional ), itu membangun "pagar" di sekitar berbagai sumber daya Kernel dan membatasi visibilitas kepada mereka untuk proses yang diberikan + anak-anak.
sumber
Di dalam wadah, proses Anda harus diisolasi (dikarantina). Sebenarnya Anda seharusnya tidak melihat proses apa pun kecuali yang Anda tentukan (setidaknya sebuah shell). Ini bukan untuk pengujian "kemampuan bersosialisasi". Satu-satunya kesamaan dengan chroot adalah bahwa kernel host digunakan. Docker sangat bagus jika Anda perlu mengisolasi sesuatu atau menggunakan versi berbeda dari perangkat lunak arsitektur platform daripada yang berjalan di host. (versi Jawa yang sangat lama atau garpu Python yang berbeda berkata). Sadarilah sepenuhnya bahwa folder dan binari yang Anda tangani mungkin tidak sama dengan yang ada di host. Ini bukan folder / bin yang sama dll.
EDIT: kesamaan dengan chroot daripada VM.
sumber