Docker bukan metodologi virtualisasi. Ini bergantung pada alat lain yang benar-benar menerapkan virtualisasi berbasis wadah atau virtualisasi tingkat sistem operasi. Untuk itu, Docker awalnya menggunakan driver LXC, kemudian pindah ke libcontainer yang sekarang diganti namanya menjadi runc. Docker terutama berfokus pada mengotomatiskan penyebaran aplikasi di dalam wadah aplikasi. Wadah aplikasi dirancang untuk mengemas dan menjalankan layanan tunggal, sedangkan wadah sistem dirancang untuk menjalankan banyak proses, seperti mesin virtual. Jadi, Docker dianggap sebagai manajemen wadah atau alat penyebaran aplikasi pada sistem kemas.
Untuk mengetahui perbedaannya dari virtualisasi lain, mari kita lihat virtualisasi dan tipenya. Maka, akan lebih mudah untuk memahami apa bedanya di sana.
Virtualisasi
Dalam bentuknya, itu dianggap metode membagi mainframe secara logis untuk memungkinkan beberapa aplikasi untuk berjalan secara bersamaan. Namun, skenario berubah secara drastis ketika perusahaan dan komunitas open source mampu menyediakan metode penanganan instruksi khusus dengan satu dan lain cara dan memungkinkan beberapa sistem operasi dijalankan secara bersamaan pada sistem berbasis x86 tunggal.
Hypervisor
Pegangan hypervisor menciptakan lingkungan virtual tempat mesin virtual tamu beroperasi. Itu mengawasi sistem tamu dan memastikan bahwa sumber daya dialokasikan kepada para tamu sesuai kebutuhan. Hypervisor berada di antara mesin fisik dan mesin virtual dan menyediakan layanan virtualisasi ke mesin virtual. Untuk merealisasikannya, ia mencegat operasi sistem operasi tamu pada mesin virtual dan mengemulasi operasi pada sistem operasi mesin host.
Pesatnya perkembangan teknologi virtualisasi, terutama di cloud, telah mendorong penggunaan virtualisasi lebih lanjut dengan memungkinkan beberapa server virtual dibuat pada satu server fisik dengan bantuan hypervisor, seperti Xen, VMware Player, KVM, dll., Dan penggabungan dukungan perangkat keras dalam prosesor komoditas, seperti Intel VT dan AMD-V.
Jenis-jenis Virtualisasi
Metode virtualisasi dapat dikategorikan berdasarkan bagaimana meniru perangkat keras ke sistem operasi tamu dan mengemulasi lingkungan operasi tamu. Terutama, ada tiga jenis virtualisasi:
- Persaingan
- Paravirtualization
- Virtualisasi berbasis wadah
Persaingan
Emulation, juga dikenal sebagai virtualisasi penuh menjalankan kernel OS mesin virtual sepenuhnya dalam perangkat lunak. Hypervisor yang digunakan dalam tipe ini dikenal sebagai hypervisor Tipe 2. Itu diinstal di bagian atas sistem operasi host yang bertanggung jawab untuk menerjemahkan kode kernel OS tamu ke instruksi perangkat lunak. Terjemahan dilakukan sepenuhnya dalam perangkat lunak dan tidak memerlukan keterlibatan perangkat keras. Emulasi memungkinkan untuk menjalankan sistem operasi apa pun yang tidak dimodifikasi yang mendukung lingkungan yang ditiru. Kelemahan dari jenis virtualisasi ini adalah overhead sumber daya sistem tambahan yang mengarah pada penurunan kinerja dibandingkan dengan jenis virtualisasi lainnya.
Contoh dalam kategori ini termasuk VMware Player, VirtualBox, QEMU, Bochs, Parallels, dll.
Paravirtualization
Paravirtualization, juga dikenal sebagai hypervisor Tipe 1, berjalan langsung pada perangkat keras, atau "bare-metal", dan menyediakan layanan virtualisasi langsung ke mesin virtual yang berjalan di atasnya. Ini membantu sistem operasi, perangkat keras virtual, dan perangkat keras nyata untuk berkolaborasi untuk mencapai kinerja yang optimal. Hypervisor ini biasanya memiliki tapak yang agak kecil dan tidak sendiri membutuhkan sumber daya yang luas.
Contoh dalam kategori ini termasuk Xen, KVM, dll.
Virtualisasi berbasis wadah
Virtualisasi berbasis kontainer, juga dikenal sebagai virtualisasi tingkat sistem operasi, memungkinkan beberapa eksekusi terisolasi dalam satu kernel sistem operasi. Ini memiliki kinerja dan kepadatan terbaik dan fitur manajemen sumber daya yang dinamis. Lingkungan eksekusi virtual terisolasi yang disediakan oleh jenis virtualisasi ini disebut wadah dan dapat dilihat sebagai sekelompok proses yang dilacak.
Konsep sebuah wadah dimungkinkan oleh fitur namespaces yang ditambahkan ke Linux kernel versi 2.6.24. Kontainer menambahkan ID-nya ke setiap proses dan menambahkan pemeriksaan kontrol akses baru untuk setiap panggilan sistem. Itu diakses oleh klon () system call yang memungkinkan membuat instance terpisah dari namespaces yang sebelumnya global.
Ruang nama dapat digunakan dalam banyak cara berbeda, tetapi pendekatan yang paling umum adalah membuat wadah terisolasi yang tidak memiliki visibilitas atau akses ke objek di luar wadah. Proses yang berjalan di dalam wadah tampaknya berjalan pada sistem Linux normal meskipun mereka berbagi kernel yang mendasarinya dengan proses yang terletak di ruang nama lain, sama untuk jenis objek lainnya. Misalnya, saat menggunakan ruang nama, pengguna root di dalam wadah tidak diperlakukan sebagai root di luar wadah, menambah keamanan tambahan.
Subsistem Linux Control Groups (cgroups), komponen utama berikutnya yang memungkinkan virtualisasi berbasis wadah, digunakan untuk mengelompokkan proses dan mengelola konsumsi sumber daya agregat mereka. Ini biasanya digunakan untuk membatasi konsumsi memori dan CPU dari wadah. Karena sistem Linux kemas hanya memiliki satu kernel dan kernel memiliki visibilitas penuh ke dalam wadah, hanya ada satu tingkat alokasi sumber daya dan penjadwalan.
Beberapa alat manajemen tersedia untuk wadah Linux, termasuk LXC, LXD, systemd-nspawn, lmctfy, Warden, Linux-VServer, OpenVZ, Docker, dll.
Wadah vs Mesin Virtual
Tidak seperti mesin virtual, sebuah wadah tidak perlu mem-boot kernel sistem operasi, sehingga wadah dapat dibuat dalam waktu kurang dari satu detik. Fitur ini membuat virtualisasi berbasis wadah unik dan diinginkan daripada pendekatan virtualisasi lainnya.
Karena virtualisasi berbasis-kontainer menambah sedikit atau tidak ada overhead pada mesin host, virtualisasi berbasis-kontainer memiliki kinerja yang hampir sama dengan aslinya
Untuk virtualisasi berbasis wadah, tidak diperlukan perangkat lunak tambahan, tidak seperti virtualisasi lainnya.
Semua kontainer pada mesin host berbagi penjadwal mesin menghemat kebutuhan sumber daya tambahan.
Status kontainer (gambar Docker atau LXC) berukuran kecil dibandingkan dengan gambar mesin virtual, sehingga gambar kontainer mudah didistribusikan.
Manajemen sumber daya dalam wadah dicapai melalui cgroup. Cgroups tidak memungkinkan kontainer mengkonsumsi lebih banyak sumber daya daripada yang dialokasikan untuk mereka. Namun, sampai sekarang, semua sumber daya mesin host terlihat di mesin virtual, tetapi tidak dapat digunakan. Ini dapat diwujudkan dengan menjalankan top
atauhtop
pada wadah dan mesin host pada saat yang sama. Output di semua lingkungan akan terlihat serupa.
Memperbarui:
Bagaimana Docker menjalankan kontainer di sistem non-Linux?
Jika kontainer dimungkinkan karena fitur yang tersedia di kernel Linux, maka pertanyaan yang jelas adalah bagaimana sistem non-Linux menjalankan kontainer. Docker untuk Mac dan Windows menggunakan VM Linux untuk menjalankan kontainer. Docker Toolbox digunakan untuk menjalankan kontainer di Virtual Box VMs. Tapi, Docker terbaru menggunakan Hyper-V di Windows dan Hypervisor.framework di Mac.
Sekarang, izinkan saya menjelaskan bagaimana Docker untuk Mac menjalankan kontainer secara detail.
Docker untuk Mac menggunakan https://github.com/moby/hyperkit untuk meniru kemampuan hypervisor dan Hyperkit menggunakan hypervisor.framework pada intinya. Hypervisor.framework adalah solusi hypervisor asli Mac. Hyperkit juga menggunakan VPNKit dan DataKit untuk masing-masing jaringan namespace dan sistem file.
VM Linux yang dijalankan Docker di Mac hanya baca. Namun, Anda dapat menabraknya dengan menjalankan:
screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty
.
Sekarang, kita bahkan dapat memeriksa versi Kernel dari VM ini:
# uname -a
Linux linuxkit-025000000001 4.9.93-linuxkit-aufs #1 SMP Wed Jun 6 16:86_64 Linux
.
Semua kontainer dijalankan di dalam VM ini.
Ada beberapa batasan untuk hypervisor.framework. Karena itu Docker tidak mengekspos docker0
antarmuka jaringan di Mac. Jadi, Anda tidak dapat mengakses kontainer dari tuan rumah. Sampai sekarang, docker0
hanya tersedia di dalam VM.
Hyper-v adalah hypervisor asli di Windows. Mereka juga mencoba memanfaatkan kemampuan Windows 10 untuk menjalankan sistem Linux secara asli.