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
.
$ docker run -it ubuntu:latest /bin/bash
root@c0c5c54062df:/#
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:
$ docker run -it ubuntu:latest /bin/bash
root@450a3ce77d32:/#
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.