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?
sumber
Jawaban:
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.
sumber
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.
sumber