Mengapa kami menggunakan gambar dasar OS dengan Docker jika kontainer tidak memiliki OS tamu?

Saya baru saja mulai belajar Docker dan ada sesuatu yang cukup membingungkan bagi saya. Seperti yang telah saya baca di situs web Docker, wadah berbeda dari mesin virtual. Seperti yang saya pahami, sebuah wadah hanyalah kotak pasir di mana seluruh sistem file terisolasi dijalankan.

Saya juga membaca bahwa wadah tidak memiliki OS tamu yang diinstal. Sebaliknya itu bergantung pada Kernel OS yang mendasarinya.

Semua itu baik-baik saja. Yang saya bingung adalah ada gambar Docker yang dinamai sistem operasi. Kami melihat gambar seperti Ubuntu, Debian, Fedora, CentOS dan sebagainya.

Maksud saya adalah: apa gambar-gambar, benar-benar? Bagaimana bedanya membuat wadah berdasarkan gambar Debian daripada membuat mesin Virtual dan menginstal Debian?

Saya pikir kontainer tidak menginstal OS tamu, tetapi ketika kami membuat gambar, kami mendasarkannya pada beberapa gambar yang dinamai satu OS.

Juga, dalam contoh yang saya lihat ketika kita melakukan docker run ubuntu echo "hello world", sepertinya kita memutar VM dengan Ubuntu dan membuatnya menjalankan perintah echo "hello world".

Dengan cara yang sama ketika kita melakukan docker run -it ubuntu /bin/bash, sepertinya kita memutar VM dengan Ubuntu dan mengaksesnya menggunakan baris perintah.

Lagi pula, apa gambar-gambar yang dinamai sistem operasi semua tentang? Seberapa berbedanya menjalankan wadah dengan salah satu gambar itu dan memutar VM dengan OS tamu yang sesuai?

Adalah gagasan bahwa kita hanya Bagikan kernel dengan OS host (dan akibatnya kami memiliki akses ke sumber daya perangkat keras mesin yang mendasarinya, tanpa perlu memvirtualisasikan perangkat keras), tetapi masih menggunakan file dan binari dari setiap sistem yang berbeda pada wadah untuk mendukung aplikasi apa pun yang ingin kami jalankan?

Karena semua distribusi Linux menjalankan kernel Linux yang sama (ya, ini agak disederhanakan) dan hanya berbeda dalam perangkat lunak userland, cukup mudah untuk mensimulasikan lingkungan distribusi yang berbeda - dengan hanya menginstal perangkat lunak userland itu dan berpura-pura itu adalah distribusi lain. Menjadi spesifik, menginstal CentOS container di dalam Ubuntu OS akan berarti bahwa anda akan mendapatkan userland dari CentOS, sementara masih menjalankan kernel yang sama, bahkan bukan instance kernel lain.

Jadi ringan virtualisasi seperti memiliki kompartemen terisolasi dalam OS yang sama. Au contraire real virtualization memiliki OS lengkap lainnya di dalam host OS. Itu sebabnya docker tidak dapat menjalankan FreeBSD atau Windows di dalam Linux.

Jika itu akan lebih mudah, Anda dapat berpikir docker adalah jenis lingkungan chroot yang sangat canggih dan canggih.

Saya berjuang dengan pertanyaan yang sama yang anda tanyakan, dan inilah yang saya pahami.

Wadah tidak memiliki OS tamu, Anda benar tentang itu.

Lalu mengapa kita mendasarkan wadah pada gambar OS?

Karena Anda ingin menggunakan beberapa perintah seperti (apt, ls, cd, pwd).Perintah ini adalah panggilan ke file biner yang mungkin tersedia untuk Anda di OS host Anda tanpa Anda menginstal anything.In agar Anda dapat menjalankan perintah ini di dalam gambar docker Anda, Anda harus memiliki binari untuk mereka di dalam gambar Anda, karena isolasi Anda tidak hanya menjalankan binari dari OS host.

Lihat jawaban ini untuk mendapatkan pemahaman yang lebih baik tentang mengapa kita bahkan membutuhkan gambar dasar: https://stackoverflow.com/a/62384611

Kontainer berjalan pada kernel tunggal. Dengan kata lain semua kontainer memiliki kernel tunggal (Host OS). Sedangkan di sisi lain hypervisors memiliki beberapa kernals. Setiap mesin virtual berjalan pada kernel yang berbeda.

Dan "docker run ubuntu" sama seperti membuat lingkungan chroot.

Menurut pendapat saya, tujuan anda dalam virtualisasi adalah kuncinya. Jika Anda membutuhkan perpustakaan, bahasa, dll. pada OS, jadi wadah OS sesuai dengan kebutuhan anda. Tetapi jika kebutuhan Anda hanya aplikasi sebagai komponen, tidak perlu menggunakan OS sebagai gambar dasar Anda. Saya pikir artikel ini bisa menjelaskannya dengan jelas Operating System Containers vs. Application Containers - RisingStack Engineering