Kontainer Docker memiliki kernel sendiri atau tidak?

66

Saya melihat bahwa banyak gambar buruh pelabuhan di repositori buruh pelabuhan dibuat dengan basis Ubuntu.

Apa artinya? Apakah setiap wadah bundel versi kernel Linux dilucuti?

Apakah wadah diletakkan di atas kernel mereka sendiri? Tapi saya pikir kontainer berbagi kernel dari host (yang dalam beberapa kasus adalah boot2docker, custom Tiny Core Linux build, dan yang lain seperti CoreOS).

EDIT: Klarifikasi pertanyaannya sedikit. Ya saya tahu buruh pelabuhan adalah wadah proses, bukan VM penuh. Tetapi karena ada kontainer "Ubuntu" di registry hub docker resmi dan OS lain seperti CentOS, apa artinya menjalankan Ubuntu dalam sebuah wadah?

Jawab: Ahh baru sadar saya. Ini adalah proses tanah pengguna Ubuntu, yang mengandung apt-get dan proses konfigurasi lainnya untuk pembangunan Ubuntu tertentu. Demikian pula untuk CentOS. Docker bukan proses tunggal, hanya entri tunggal. Jadi untuk distribusi ini titik masuk adalah semacam proses init yang memunculkan proses lain.

stewart99
sumber
2
"Ini adalah proses tanah pengguna Ubuntu," - tidak hanya proses, tetapi juga perpustakaan.
osgx

Jawaban:

38

Docker menggunakan kernel OS host, tidak ada kernel kustom atau tambahan di dalam wadah. Semua kontainer yang dijalankan pada mesin membagikan kernel "host" ini.

Wikipedia mengatakan http://en.wikipedia.org/wiki/Docker_(software) itu

Docker menggunakan fitur isolasi sumber daya dari kernel Linux seperti cgroups dan ruang nama kernel untuk memungkinkan "wadah" independen berjalan dalam satu contoh Linux tunggal, menghindari overhead memulai mesin virtual.

cgroups, namespaces, dan LXC adalah fitur dari kernel Linux untuk mengisolasi kelompok proses; masih ada satu kernel, single scheduler, dan satu instance dari manajer memori kernel.

Boot2docker dan CoreOS hanyalah distribusi Linux yang ringan dengan beberapa host kernel; mereka dapat digunakan untuk memuat kontainer Docker.

http://boot2docker.io/

boot2docker adalah distribusi Linux ringan berdasarkan Tiny Core Linux yang dibuat khusus untuk menjalankan wadah Docker. Ini berjalan sepenuhnya dari RAM, beratnya ~ 27MB dan boot dalam ~ 5s (YMMV).

http://en.wikipedia.org/wiki/CoreOS

Satu host kontrol (contoh CoreOS) menjalankan banyak sistem (wadah) Linux yang terisolasi, menggunakan Docker sebagai lapisan tambahan dari abstraksi dan antarmuka [14] ke fitur virtualisasi level sistem operasi yang mendasari kernel Linux. ... Pendekatan ini bergantung pada fungsionalitas cgroup kernel Linux, yang menyediakan isolasi namespace dan kemampuan untuk membatasi, menghitung dan mengisolasi penggunaan sumber daya (CPU, memori, disk I / O, dll.) Untuk koleksi proses.

osgx
sumber
1
Ini tidak menjawab pertanyaan.
EML
2
EML, pertanyaan apa? Secara default semua wadah Docker tidak memiliki kernel sendiri. Hanya ada satu kernel host untuk semua wadah Docker.
osgx
tentu saja, jawaban Anda baik-baik saja sejauh ini, tetapi OP ingin tahu mengapa ia harus FROMmemiliki gambar dasar Ubuntu ketika host sudah menjalankan Ubuntu. Untuk menjawab pertanyaan, Anda harus menjelaskan apa itu gambar dasar.
EML
2
EML, pertanyaan diedit dengan "Klarifikasi" ( superuser.com/posts/889472/revisi ) setelah jawaban saya diposting, jadi itu adalah jawaban untuk pertanyaan asli tanpa klarifikasi. Jika Anda memiliki beberapa informasi untuk dibagikan tentang gambar dasar dan kernel di docker, tambahkan jawaban lain.
osgx
17

Dalam hampir semua kasus, kernel OS host dibagikan. Untuk menjalankan kernel lain, Anda perlu menggunakan virtualisasi. Ini jarang terjadi dan hanya digunakan bila perlu karena penurunan kinerja.

"Wadah Docker Engine hanya terdiri dari aplikasi dan dependensinya. Ini berjalan sebagai proses yang terisolasi di ruang pengguna pada sistem operasi host, berbagi kernel dengan wadah lain. Dengan demikian, menikmati isolasi sumber daya dan manfaat alokasi VM tetapi jauh lebih portabel dan efisien. "

Ini mungkin membantu menjelaskan cara kerjanya: masukkan deskripsi gambar di sini

Sumber: https://www.docker.com/whatisdocker/

JeremiahBarrar
sumber
4
Sumber apa pun untuk "Paket dapat menggunakan kernel yang berbeda" ??? Docker sendiri tidak dapat menggunakan beberapa kernel, selalu hanya ada satu host kernel. Hanya ketika dikombinasikan dengan hypervisor (virtualisasi) kita dapat memulai beberapa host masing-masing dengan versi kernel sendiri dan menjalankan satu Docker per host virtual; tetapi untuk host mana pun hanya akan ada satu kernel untuk host dan untuk kontainer yang di-Docked-nya
osgx
2
Apa itu paket? Kontainer Docker tidak memiliki kernel di dalamnya; itu baru saja diinstal dan mulai pada kernel yang digunakan pada host. Jadi: satu Docker = satu server = satu kernel, seperti yang ditunjukkan pada gambar. Tidak ada cara untuk menggunakan dua kernel dengan mesin Docker tunggal; semua kontainer di dalam mesin ini akan menggunakan kernel yang sama. Saya pikir jawaban yang benar adalah "Tidak, wadah Docker tidak dapat menggunakan kernel yang berbeda dalam satu contoh Mesin Docker"
osgx
1
Setiap kontainer buruh pelabuhan dapat menjalankan kode apa pun yang diinginkannya, termasuk perangkat lunak virtualisasi yang dapat memuat kernel apa pun yang mungkin diperlukan oleh perangkat lunak Anda. Anda dapat menjalankan Windows dalam sebuah wadah jika Anda mau.
JeremiahBarrar
1
JeremiahBarrar, mengerti, terima kasih atas penjelasannya. Apakah menjalankan perangkat lunak virtualisasi dari dalam wadah Docker didokumentasikan dan apakah didukung oleh Docker? Apa jenis virtualisasi yang akan bekerja dari Docker (qemu perangkat lunak, qemu + kvm, xen, ...)?
osgx
2
Kalimat pertama menyesatkan. Menggunakan VM di dalam wadah mengalahkan tujuan menggunakan Docker.
user2707671