Mengapa kita menggunakan Gambar Dasar OS dengan Docker jika wadah tidak memiliki OS Tamu?

84

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

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

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

Maksud saya adalah: gambar apa itu? Apa bedanya membuat wadah berdasarkan gambar Debian daripada membuat Mesin Virtual dan menginstal Debian?

Saya pikir kontainer tidak memiliki OS Guest diinstal, tetapi ketika kita membuat gambar kita mendasarkannya pada beberapa gambar dinamai satu OS.

Juga, dalam contoh yang saya lihat ketika kita melakukannya 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 melakukannya docker run -it ubuntu /bin/bash, tampaknya kita memutar VM dengan Ubuntu dan mengaksesnya menggunakan baris perintah.

Ngomong-ngomong, gambar apa yang dinamai sesuai dengan sistem operasi? Betapa berbedanya menjalankan wadah dengan salah satu gambar itu dan memutar VM dengan OS Tamu yang sesuai?

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

pengguna1620696
sumber
2
Menurut pendapat saya, tujuan Anda dalam virtualisasi adalah kuncinya. Jika Anda memerlukan perpustakaan, bahasa, dll. Di OS, maka 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 dapat menjelaskannya dengan jelas blog.risingstack.com/...
metamorph

Jawaban:

68

Karena semua distribusi Linux menjalankan kernel Linux yang sama (ya, itu sedikit 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 distribusi yang lain. Menjadi spesifik, menginstal wadah CentOS di dalam Ubuntu OS akan berarti Anda akan mendapatkan userland dari CentOS, sementara masih menjalankan kernel yang sama, bahkan tidak contoh kernel lain.

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

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

drookie
sumber
3
Jadi itu sebabnya saya dapat meng-host kode golang yang dikompilasi dalam wadah Scratch kosong - karena kode yang dikompilasi hanya membutuhkan kernel?
Francis Norton
Jadi, bagaimana OS tamu tahu untuk menggunakan kernel OS host (dan bagaimana melakukannya)? AFAIK, basis gambar buruh pelabuhan menggunakan gambar OS standar. Dalam contoh Anda, tidak seperti ada build CentOS kustom yang tahu menggunakan kernel induk? Atau apakah itu sesederhana trik sistem file (aufs) di mana Docker mengalihkan tamu '(CentOS') membaca / boot ke host (Ubuntu)? Dalam hal ini, tamu (CentOS) akan menginstal salinan / boot-nya sendiri, tetapi tidak akan pernah terbaca?
James S
Saya suka penjelasan Anda tetapi bagaimana Anda menjelaskan menjalankan wadah Linux di Windows? Apakah Server 2016 dan Windows 10 mengandung kernel Linux untuk mengaktifkan penggunaan Docker? Apakah itu sebabnya versi itu diperlukan?
duct_tape_coder
Ini sederhana: mereka harus dijalankan di bawah tumpukan virtualisasi lengkap Hyper-V, di dalam Linux VM asli: docs.microsoft.com/en-us/virtualization/windowscontainers/… .
drookie
1

Kontainer berjalan di kernel tunggal. Dengan kata lain semua wadah memiliki kernel tunggal (Host OS). Sedangkan hypervisor lain memiliki banyak kernel. Setiap mesin virtual berjalan pada kernel yang berbeda.

Dan "buruh pelabuhan menjalankan ubuntu" sama seperti menciptakan lingkungan chroot.

Shiv sandhu
sumber