VM atau Docker?

Bagaimana memahami bahwa Anda memerlukan Docker, bukan VM? Mari kita coba memahami perbedaan utama antara isolasi mesin virtual (VMs) dan wadah Docker, apakah mereka dapat dipertukarkan dan bagaimana kita dapat menggunakannya.


Jadi apa perbedaan antara kontainer Docker dan VM?
Mesin virtual (VM) adalah komputer virtual dengan semua perangkat virtual dan hard disk virtual, tempat OS independen baru (OS tamu) dipasang bersama dengan driver perangkat virtual, manajemen memori, dan komponen lainnya. Artinya, kami mendapatkan abstraksi peralatan fisik yang memungkinkan Anda menjalankan banyak komputer virtual di satu komputer. Peralatan virtual ditampilkan dalam properti sistem, dan aplikasi yang diinstal berinteraksi dengannya seolah-olah itu nyata. Pada saat yang sama, mesin virtual itu sendiri sepenuhnya terisolasi dari komputer nyata, meskipun dapat memiliki akses ke perangkat disk dan periferalnya.
VM yang terinstal dapat mengambil ruang pada disk komputer dengan berbagai cara:


  • memperbaiki ruang pada hard drive, yang memungkinkan akses lebih cepat ke hard drive virtual dan menghindari fragmentasi file;
  • alokasi memori dinamis. Saat memasang aplikasi tambahan, memori akan dialokasikan secara dinamis untuknya hingga mencapai jumlah maksimum yang dialokasikan untuk itu.

Saat menggunakan VM, ada biaya tambahan untuk meniru peralatan virtual dan meluncurkan OS tamu, mendukung dan mengelola lingkungan yang diperlukan agar aplikasi Anda berfungsi. Juga, ketika Anda menggunakan sejumlah besar mesin virtual di server, jumlah ruang yang mereka tempati pada hard drive hanya akan bertambah, karena setiap VM membutuhkan ruang, setidaknya untuk OS tamu dan driver untuk perangkat virtual.


Docker adalah perangkat lunak untuk membuat aplikasi berbasis wadah. Kontainer dan mesin virtual menyelesaikan satu masalah, tetapi mereka melakukannya secara berbeda. Wadah membutuhkan ruang lebih sedikit karena Gunakan kembali lebih banyak sumber daya bersama sistem host daripada VM tidak seperti VM, ia menyediakan virtualisasi di tingkat OS, bukan perangkat keras. Pendekatan ini memberikan ruang hard disk lebih sedikit, penyebaran lebih cepat, dan penskalaan lebih mudah.


Kontainer docker menyediakan mekanisme enkapsulasi aplikasi yang lebih efisien, menyediakan antarmuka sistem host yang diperlukan. Fitur ini memungkinkan kontainer untuk membagi inti sistem, di mana setiap kontainer bekerja sebagai proses terpisah dari OS utama, yang memiliki ruang alamat virtual sendiri, sehingga data milik area memori yang berbeda tidak dapat diubah.


Docker adalah teknologi paling umum untuk menggunakan kontainer dalam aplikasi. Ini telah menjadi standar di area ini, dibangun di cgroups dan namespace yang disediakan oleh kernel Linux. OS asli untuk Docker adalah Linux, jadi peluncuran wadah Docker di Windows akan berlangsung di dalam mesin virtual Linux.


Terbuat dari apa wadah itu?


Gambar adalah elemen utama dari wadah yang dibuat. Gambar dibuat dari Dockerfile ditambahkan ke proyek dan merupakan satu set sistem file (lapisan) yang saling berlapis dan dikelompokkan bersama, hanya-baca; jumlah lapisan maksimum adalah 127.


Di jantung setiap gambar adalah gambar dasar, yang ditunjukkan oleh perintah FROM - titik masuk untuk pembentukan gambar Dockerfile. Setiap lapisan adalah lapisan hanya baca dan diwakili oleh satu perintah memodifikasi sistem file yang ditulis ke Dockerfile. Pendekatan ini memungkinkan file dan direktori yang berbeda dari lapisan file yang berbeda untuk tumpang tindih secara transparan, menciptakan sistem file terintegrasi cascading. Layers mengandung metadata, memungkinkan Anda untuk menyimpan informasi terkait tentang setiap layer pada saat run dan build. Setiap lapisan berisi tautan ke lapisan berikutnya, jika lapisan itu tidak memiliki tautan, maka ini adalah lapisan paling atas pada gambar.
Dimulai dengan Docker EE versi 06/17/02-ee5 dan Docker Engine - Community, Overlay2 atau Overlay digunakan, dan versi sebelumnya menggunakan AuFS (Advanced multi layered Union file system).


Kontainer - bagaimana cara kerjanya?


Wadah adalah abstraksi tingkat aplikasi yang menggabungkan kode dan dependensi. Wadah selalu dibuat dari gambar, menambahkan lapisan atas yang dapat ditulisi dan menginisialisasi berbagai parameter. Karena wadah memiliki lapisan rekamannya sendiri dan semua perubahan disimpan di lapisan ini, beberapa wadah dapat berbagi akses ke gambar yang sama. Setiap kontainer dapat dikonfigurasi melalui file dalam proyek docker-compose.yml, mengatur berbagai parameter, seperti nama wadah, port, pengidentifikasi, dependensi antara kontainer lainnya. Jika Anda tidak menentukan nama wadah di pengaturan, maka Docker akan membuat wadah baru setiap kali, memberinya nama secara acak.


Ketika wadah dimulai dari gambar, Docker memasang sistem file untuk membaca dan menulis di atas semua lapisan di bawah ini. Di sinilah semua proses akan dieksekusi. Saat Anda memulai wadah untuk pertama kalinya, lapisan baca-tulis awal kosong. Ketika perubahan terjadi, mereka berlaku untuk lapisan ini; misalnya, jika Anda ingin memodifikasi file, file ini akan disalin dari layer read-only ke layer read and write. Versi read-only file akan tetap ada, tetapi sekarang tersembunyi di bawah salinan.


Bagaimana cara kerja sistem file cascaded federated?


Sistem file terintegrasi cascade (FS) mengimplementasikan mekanisme salin copy-on-write (COW). Unit kerja adalah sebuah layer, setiap layer harus dianggap sebagai sistem file lengkap yang terpisah dengan hierarki direktori dari root itu sendiri. Pendekatan ini menggunakan sistem file unified mount, memungkinkan, secara transparan bagi pengguna, untuk menggabungkan file dan direktori dari berbagai sistem file (disebut cabang) menjadi satu sistem file yang terhubung. Isi direktori dengan jalur yang sama akan ditampilkan bersama dalam satu direktori gabungan (dalam satu namespace) dari sistem file yang dihasilkan.


Lapisan digabung sesuai dengan prinsip-prinsip berikut:


  • salah satu lapisan menjadi lapisan tingkat atas, lapisan kedua dan selanjutnya menjadi lapisan tingkat bawah;
  • objek lapisan dapat diakses oleh pengguna "dari atas ke bawah", yaitu jika objek yang diminta ada di lapisan "atas", itu dikembalikan, terlepas dari keberadaan objek dengan nama itu di lapisan "bawah"; jika tidak, objek dari layer "bawah" dikembalikan; jika objek yang diminta tidak ada di sana atau di sana, kesalahan "Tidak ada file atau direktori" dikembalikan;
  • lapisan kerja adalah "atas", yaitu, semua tindakan pengguna untuk mengubah data tercermin hanya pada lapisan tingkat atas, tanpa mempengaruhi isi lapisan tingkat bawah.

Kesimpulan


Jika Anda perlu melakukan virtualisasi sistem dengan sumber daya khusus dan perangkat keras virtual yang dijamin, Anda harus memilih VM. Apa yang memberi penggunaan VM:


  • kemampuan untuk menginstal beberapa sistem operasi yang berbeda pada satu komputer;
  • distribusi sumber daya sistem antara mesin virtual;
  • tidak perlu reboot untuk beralih antar sistem operasi;
  • kemampuan untuk mengambil "snapshot" dari kondisi sistem saat ini dan isi disk untuk mengembalikan sistem ke kondisi semula;
  • isolasi kesalahan dan pelanggaran sistem keamanan di tingkat perangkat keras;
  • kemampuan untuk mensimulasikan jaringan komputer pada satu komputer.

Jika Anda ingin mengisolasi aplikasi yang sedang berjalan sebagai proses terpisah, Docker baik-baik saja untuk Anda. Apa yang memberi penggunaan Docker:


  • menyediakan virtualisasi di tingkat OS;
  • kontainer berbagi inti sistem, bekerja sebagai proses terpisah dari OS utama;
  • konsumsi sumber daya sistem, seperti konsumsi memori dan beban CPU, dapat dibatasi secara terpisah untuk setiap wadah menggunakan cgroup;
  • FS untuk wadah dibuat menggunakan mekanisme COW, yang memungkinkan untuk mempercepat penyebaran aplikasi, mengurangi konsumsi memori dan menghemat ruang disk;
  • sistem file yang diubah dari satu wadah dapat digunakan sebagai dasar untuk pembentukan gambar dasar baru dari wadah lainnya.

Source: https://habr.com/ru/post/id474068/


All Articles