VM atau Docker?

Bagaimana memahami bahwa Anda membutuhkan Docker dan bukan VM? Anda perlu menentukan apa yang sebenarnya ingin Anda isolasi. Jika Anda ingin mengisolasi sistem dengan sumber daya terjamin dan perangkat keras virtual, pilihan harus jatuh pada VM. Jika Anda perlu mengisolasi aplikasi yang sedang berjalan sebagai proses sistem terpisah, Anda memerlukan Docker.

Jadi apa perbedaan antara wadah Docker dan VM?

Mesin virtual (VM) adalah komputer virtual dengan semua perangkat virtual dan hard disk virtual, tempat OS independen baru diinstal bersama dengan driver perangkat virtual, manajemen memori, dan komponen lainnya. Artinya, kami mendapatkan abstraksi perangkat keras fisik yang memungkinkan Anda menjalankan banyak komputer virtual di satu komputer.
VM yang diinstal dapat menggunakan ruang disk dengan berbagai cara:

  • ruang hard disk tetap, yang memungkinkan akses lebih cepat ke hard disk virtual dan menghindari fragmentasi file;
  • alokasi memori dinamis. Saat menginstal aplikasi tambahan, memori akan dialokasikan secara dinamis hingga mencapai jumlah maksimum yang dialokasikan untuknya.

Semakin banyak mesin virtual di server, semakin banyak ruang yang digunakan, dan juga membutuhkan dukungan konstan dari lingkungan yang diperlukan agar aplikasi Anda berfungsi.

Buruh pelabuhan adalah software untuk membangun aplikasi berbasis container. Wadah dan mesin virtual memiliki manfaat yang serupa, tetapi cara kerjanya berbeda. Wadah mengambil lebih sedikit ruang, karena terlalu sering menggunakan lebih banyak sumber daya bersama dari sistem host daripada VM, karena tidak seperti VM, menyediakan virtualisasi di tingkat OS, bukan perangkat keras. Pendekatan ini memberikan jejak memori yang lebih sedikit, penerapan yang lebih cepat, dan penskalaan yang lebih mudah.

Kontainer menyediakan mekanisme yang lebih efisien untuk mengenkapsulasi aplikasi dengan menyediakan antarmuka yang diperlukan ke sistem host. Fitur ini memungkinkan wadah untuk berbagi inti sistem, di mana masing-masing wadah berjalan sebagai proses terpisah dari OS utama, yang memiliki kumpulan area memorinya sendiri (ruang alamat virtualnya sendiri). Karena ruang alamat virtual masing-masing wadah adalah miliknya sendiri, data milik area memori yang berbeda tidak dapat diubah.
OS asli untuk Docker adalah Linux (Docker juga dapat digunakan di Windows dan MacOS), ia menggunakan keunggulan utamanya, yang memungkinkannya mengatur kernel terpisah. Peluncuran kontainer Docker di Windows akan dilakukan di dalam mesin virtual Linux, karena kontainer berbagi OS dari sistem host dan OS utama untuk mereka adalah Linux.

Wadah - bagaimana cara kerjanya?

Wadah adalah abstraksi pada level aplikasi yang menggabungkan kode dan dependensi. Wadah selalu dibuat dari gambar, menambahkan lapisan atas yang dapat ditulis dan menginisialisasi berbagai parameter. Karena sebuah wadah memiliki lapisan tulisnya sendiri dan semua perubahan disimpan di lapisan itu, beberapa wadah dapat berbagi akses ke gambar master yang sama.

Setiap wadah dapat dikonfigurasi melalui file dalam proyek pembuatan docker yang termasuk dalam solusi utama, docker-compose.yml. Di sana Anda dapat mengatur berbagai parameter seperti nama wadah, port, pengidentifikasi, batas sumber daya, ketergantungan antara wadah lain. Jika Anda tidak menentukan nama wadah dalam pengaturan, maka Docker akan membuat wadah baru setiap kali, memberikan nama secara acak.

Ketika sebuah wadah dimulai dari sebuah gambar, Docker memasang sistem file baca/tulis di atas semua lapisan di bawahnya. Di sinilah semua proses yang kita inginkan agar wadah Docker kita berjalan akan berjalan.

Saat Docker pertama kali memulai wadah, lapisan baca/tulis awal kosong. Saat terjadi perubahan, mereka diterapkan ke lapisan itu; misalnya, jika Anda ingin memodifikasi file, file tersebut akan disalin dari lapisan read-only di bawahnya ke lapisan read-write.
Versi file hanya-baca akan tetap ada, tetapi sekarang tersembunyi di bawah salinan. Volume digunakan untuk menyimpan data, terlepas dari siklus hidup wadah. Volume diinisialisasi saat wadah dibuat.

Bagaimana gambar dikaitkan dengan wadah?

Gambar - elemen utama untuk setiap wadah. Gambar dibuat dari Dockerfile yang ditambahkan ke proyek dan merupakan kumpulan sistem file (lapisan) berlapis di atas satu sama lain dan dikelompokkan bersama, hanya tersedia untuk dibaca; jumlah lapisan maksimum adalah 127.

Inti dari setiap image adalah image dasar, yang ditentukan oleh perintah FROM - titik masuk saat membuat image Dockerfile. Setiap lapisan adalah lapisan yang hanya dapat dibaca dan diwakili oleh satu perintah yang mengubah sistem file, yang ditulis dalam Dockerfile.
Untuk menggabungkan lapisan-lapisan ini menjadi satu gambar, Docker menggunakan sistem file Union multi-lapisan Lanjutan (AuFS dibangun di atas UnionFS), yang memungkinkan file dan direktori yang berbeda dari lapisan file yang berbeda tumpang tindih secara transparan, menciptakan sistem file terkait.

Lapisan berisi metadata yang memungkinkan Anda menyimpan informasi terkait tentang setiap lapisan pada waktu proses dan waktu pembuatan. Setiap lapisan berisi tautan ke lapisan berikutnya, jika lapisan tersebut tidak memiliki tautan, maka ini adalah lapisan paling atas pada gambar.

Dockerfile mungkin berisi perintah seperti:

  • DARI - titik masuk dalam pembentukan gambar;
  • PEMELIHARA - nama pemilik gambar;
  • RUN - eksekusi perintah selama perakitan gambar;
  • TAMBAH - menyalin file host ke gambar baru, jika Anda menentukan file URL, Docker akan mengunduhnya ke direktori yang ditentukan;
  • ENV - variabel lingkungan;
  • CMD - memulai pembuatan wadah baru berdasarkan gambar;
  • ENTRYPOINT - Perintah dijalankan saat wadah dimulai.
  • WORKDIR adalah direktori kerja untuk menjalankan perintah CMD.
  • USER - Mengatur UID untuk wadah yang dibuat dari gambar.
  • VOLUME - Pasang direktori host ke wadah.
  • EXPOSE adalah sekumpulan port yang didengarkan di dalam container.

Bagaimana UnionFS bekerja?

PersatuanFS β€” sistem file tumpukan layanan (FS) untuk Linux dan FreeBSD. FS ini mengimplementasikan mekanisme copy-on-write (Copy-On-Write, COW). Unit kerja UnionFS adalah sebuah lapisan, setiap lapisan harus dianggap sebagai sistem file lengkap yang terpisah dengan hierarki direktori dari root itu sendiri. UnionFS membuat mount gabungan untuk sistem file lain dan memungkinkan Anda menggabungkan file dan direktori secara transparan dari sistem file yang berbeda (disebut cabang) ke dalam satu sistem file tertaut, secara transparan kepada pengguna.

Isi direktori dengan jalur yang sama akan ditampilkan bersama dalam satu direktori gabungan (dalam namespace yang sama) dari sistem berkas yang dihasilkan.

UnionFS menggabungkan lapisan berdasarkan 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", mis. jika objek yang diminta ada di lapisan "atas", itu dikembalikan, terlepas dari keberadaan objek dengan nama yang sama di lapisan "bawah"; jika tidak, objek lapisan "bawah" dikembalikan; jika objek yang diminta tidak ada atau tidak ada, kesalahan "Tidak ada file atau direktori" dikembalikan;
  • lapisan kerja adalah lapisan "atas", yaitu, semua tindakan pengguna untuk mengubah data hanya tercermin pada lapisan tingkat atas, tanpa memengaruhi konten lapisan tingkat bawah.

Docker adalah teknologi paling umum untuk menggunakan kontainer dalam pekerjaan aplikasi. Ini telah menjadi standar di area ini, dibangun di atas cgroup dan ruang nama yang disediakan oleh kernel Linux.

Docker memungkinkan kami untuk menyebarkan aplikasi dengan cepat dan memanfaatkan sistem file sebaik-baiknya dengan berbagi kernel OS di antara semua wadah, berjalan sebagai proses OS terpisah.

Sumber: www.habr.com

Tambah komentar