Seperti apa proses di dalam wadah Docker?

33

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?

slm
sumber
3
Meskipun tidak akurat (dan mengapa saya tidak akan menuliskannya sebagai jawaban), saya merasa lebih mudah menganggap docker sebagai chroot mewah daripada sebagai mesin virtual. Itu tidak akurat, tetapi membantu ketika mencoba memvisualisasikannya di kepala saya.
coteyr
2
@coteyr - Lucu Anda menyebutkan analogi itu, saya menggunakan yang tepat ketika mencoba untuk menggambarkan apa yang dilakukan Docker juga. IMO Docker memiliki lebih banyak kesamaan dengan chroot daripada dengan virtualisasi.
slm

Jawaban:

53

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:

    ss01

Beralih ke tab terminal lain tempat kita masuk ke sistem host yang menampung wadah Docker, kita dapat melihat ruang proses yang digunakan wadah "sebenarnya":

    ss02

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 1000perintah yang sedang di latar belakang.

    ss03

Perhatikan bagaimana di dalam wadah Docker proses ditugaskan ID proses (PID) dari 48-51. Lihat mereka di ps -eafoutput di mereka juga:

    ss04

Namun, dengan gambar berikut ini, banyak "keajaiban" yang dilakukan Docker terungkap.

    ss05

Lihat bagaimana 4 sleep 1000proses itu sebenarnya hanya proses anak-anak untuk proses Bash asli kita? Juga perhatikan bahwa wadah Docker asli kami /bin/bashsebenarnya adalah proses anak ke daemon Docker juga.

Sekarang jika kita harus menunggu 1000+ detik untuk sleep 1000menyelesaikan 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 -eafakan terlihat seperti ini:

    ss06

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.

slm
sumber
Docker juga menciptakan ruang pengguna yang terisolasi per kontainer yang sedang berjalan.
Bhargav Nanekalva
3

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.

mckenzm
sumber
1
Diedit, saya berpikir dengan topi Xen lama. Jelas itu tidak terjadi ketika menjalankan Windows di bawah KVM / Qemu atau menjalankan 64 bit VM pada host 32 bit di bawah VirtualBox. (jangan tanya). Ini mirip dengan argumen pv vs hvm untuk AWS.
mckenzm