VM atau Docker?

Bagaimanakah anda tahu jika anda memerlukan Docker dan bukan VM? Anda perlu menentukan apa sebenarnya yang anda ingin asingkan. Jika anda ingin mengasingkan sistem dengan sumber khusus yang terjamin dan perkakasan maya, maka pilihannya mestilah VM. Jika anda perlu mengasingkan aplikasi yang sedang berjalan sebagai proses sistem yang berasingan, anda memerlukan Docker.

Jadi apakah perbezaan antara bekas Docker dan VM?

Mesin maya (VM) ialah komputer maya dengan semua peranti maya dan cakera keras maya di mana OS bebas baharu dipasang bersama pemacu peranti maya, pengurusan memori dan komponen lain. Iaitu, kami mendapat abstraksi perkakasan fizikal yang membolehkan kami menjalankan banyak komputer maya pada satu komputer.
VM yang dipasang boleh menggunakan ruang pada cakera komputer anda dengan cara yang berbeza:

  • ruang cakera keras tetap, yang membolehkan akses lebih cepat ke cakera keras maya dan mengelakkan pemecahan fail;
  • peruntukan memori dinamik. Apabila memasang aplikasi tambahan, memori akan diperuntukkan secara dinamik untuknya sehingga ia mencapai jumlah maksimum yang diperuntukkan kepadanya.

Lebih banyak mesin maya bagi setiap pelayan, lebih banyak ruang yang digunakan, dan juga memerlukan sokongan berterusan untuk persekitaran yang diperlukan untuk aplikasi anda berjalan.

buruh pelabuhan ialah perisian untuk mencipta aplikasi berasaskan kontena. Bekas dan mesin maya mempunyai faedah yang sama, tetapi beroperasi secara berbeza. Bekas mengambil lebih sedikit ruang kerana... menggunakan semula lebih banyak sumber kongsi sistem hos daripada VM, kerana tidak seperti VM, ia menyediakan virtualisasi pada tahap OS, bukan pada tahap perkakasan. Pendekatan ini menghasilkan jejak memori yang lebih rendah, penggunaan yang lebih pantas dan penskalaan yang lebih mudah.

Bekas menyediakan mekanisme yang lebih cekap untuk merangkum aplikasi dengan menyediakan antara muka yang diperlukan kepada sistem hos. Ciri ini membolehkan bekas berkongsi teras sistem, dengan setiap bekas berjalan sebagai proses OS hos yang berasingan yang mempunyai set kawasan memori sendiri (ruang alamat maya sendiri). Oleh kerana ruang alamat maya setiap bekas adalah miliknya sendiri, data yang dimiliki oleh kawasan memori yang berbeza tidak boleh diubah.
OS asli untuk Docker ialah Linux (Docker juga boleh digunakan pada Windows dan MacOS), ia menggunakan kelebihan utamanya, yang membolehkannya mengatur pemisahan kernel. Menjalankan bekas Docker pada Windows akan berlaku di dalam mesin maya yang menjalankan OS Linux, kerana bekas berkongsi OS sistem hos dan OS utama untuk mereka ialah Linux.

Bekas - bagaimana ia berfungsi?

bekas ialah abstraksi peringkat aplikasi yang menggabungkan kod dan kebergantungan. Bekas sentiasa dicipta daripada imej, menambah lapisan atas yang boleh ditulis dan memulakan pelbagai parameter. Oleh kerana bekas mempunyai lapisan tulis sendiri dan semua perubahan disimpan dalam lapisan itu, berbilang bekas boleh berkongsi akses kepada imej induk yang sama.

Setiap bekas boleh dikonfigurasikan melalui fail dalam projek docker-compose yang disertakan dalam penyelesaian utama - docker-compose.yml. Di sana anda boleh menetapkan pelbagai parameter seperti nama bekas, port, pengecam, had sumber, kebergantungan antara bekas lain. Jika anda tidak menyatakan nama bekas dalam tetapan, Docker akan mencipta bekas baharu setiap kali, memberikannya nama secara rawak.

Apabila bekas dimulakan daripada imej, Docker memasang sistem fail baca-tulis di atas mana-mana lapisan di bawah. Di sinilah semua proses yang kami mahu bekas Docker kami dijalankan akan dijalankan.

Apabila Docker mula-mula memulakan bekas, lapisan baca-tulis awal kosong. Apabila perubahan berlaku, ia digunakan pada lapisan ini; contohnya, jika anda ingin menukar fail, fail tersebut akan disalin daripada lapisan baca sahaja di bawah ke lapisan baca-tulis.
Versi baca sahaja fail masih akan wujud, tetapi ia kini tersembunyi di bawah salinan. Jilid digunakan untuk menyimpan data, tanpa mengira kitaran hayat bekas. Kelantangan dimulakan apabila bekas dibuat.

Bagaimanakah imej berkaitan dengan bekas?

Imej β€” elemen utama bagi setiap bekas. Imej dicipta daripada Fail Docker yang ditambahkan pada projek dan merupakan satu set sistem fail (lapisan) berlapis di atas satu sama lain dan dikumpulkan bersama, baca sahaja; bilangan maksimum lapisan ialah 127.

Di tengah-tengah setiap imej ialah imej asas, yang ditentukan oleh arahan FROM - titik masuk semasa membina imej Dockerfile. Setiap lapisan ialah lapisan baca sahaja dan diwakili oleh satu arahan yang mengubah suai sistem fail, yang ditulis dalam Dockerfile.
Untuk menggabungkan lapisan ini menjadi satu imej, Docker menggunakan sistem fail Union berbilang lapisan Lanjutan (AuFS dibina di atas UnionFS), membenarkan fail dan direktori yang berbeza daripada lapisan fail berbeza ditindih secara telus, mewujudkan sistem fail yang padu.

Lapisan mengandungi metadata yang membolehkan anda menyimpan maklumat berkaitan tentang setiap lapisan semasa masa jalan dan masa bina. Setiap lapisan mengandungi pautan ke lapisan seterusnya; jika lapisan tidak mempunyai pautan, maka ia adalah lapisan paling atas dalam imej.

Fail Docker mungkin mengandungi arahan seperti:

  • DARI β€” titik masuk apabila membentuk imej;
  • MAINTAINER - nama pemilik imej;
  • RUN β€” pelaksanaan arahan semasa pemasangan imej;
  • TAMBAH - menyalin fail hos ke imej baharu; jika anda menentukan URL fail, Docker akan memuat turunnya ke direktori yang ditentukan;
  • ENV - pembolehubah persekitaran;
  • CMD - memulakan penciptaan bekas baharu berdasarkan imej;
  • ENTRYPOINT - arahan dilaksanakan apabila bekas bermula.
  • WORKDIR ialah direktori kerja untuk melaksanakan arahan CMD.
  • USER - menetapkan UID untuk bekas yang dibuat berdasarkan imej.
  • VOLUME - melekapkan direktori hos ke dalam bekas.
  • EXPOSE ialah satu set port yang didengari dalam bekas.

Bagaimanakah UnionFS berfungsi?

UnionFS - sistem fail timbunan utiliti (FS) untuk Linux dan FreeBSD. FS ini melaksanakan mekanisme copy-on-write (Copy-On-Write, COW). Unit kerja UnionFS ialah lapisan; setiap lapisan harus dianggap sebagai sistem fail lengkap yang berasingan dengan hierarki direktori daripada akar itu sendiri. UnionFS mencipta pelekap kesatuan untuk sistem fail lain dan membenarkan fail dan direktori daripada sistem fail yang berbeza (dipanggil garpu) digabungkan menjadi satu sistem fail yang koheren, secara telus kepada pengguna.

Kandungan direktori dengan laluan yang sama akan muncul bersama dalam satu direktori bersatu (dalam satu ruang nama) sistem fail yang terhasil.

UnionFS menggabungkan lapisan berdasarkan prinsip berikut:

  • satu daripada lapisan menjadi lapisan peringkat atas, lapisan kedua dan seterusnya menjadi lapisan peringkat bawah;
  • objek lapisan tersedia kepada pengguna "dari atas ke bawah", i.e. jika objek yang diminta berada dalam lapisan "atas", ia dikembalikan, tanpa mengira kehadiran objek dengan nama yang sama dalam lapisan "bawah"; jika tidak objek lapisan "bawah" dikembalikan; jika objek yang diminta tiada di sana mahupun di sana, ralat "Tiada fail atau direktori sedemikian" dikembalikan;
  • lapisan kerja ialah lapisan "atas", iaitu, semua tindakan pengguna untuk menukar data hanya ditunjukkan pada lapisan peringkat atas, tanpa menjejaskan kandungan lapisan peringkat bawah.

Docker ialah teknologi yang paling biasa untuk menggunakan bekas untuk menjalankan aplikasi. Ia telah menjadi standard dalam bidang, membina cgroup dan ruang nama yang disediakan oleh kernel Linux.

Docker membolehkan kami menggunakan aplikasi dengan cepat dan menggunakan sistem fail dengan sebaik mungkin dengan memisahkan kernel OS antara semua bekas, berjalan sebagai proses OS berasingan.

Sumber: www.habr.com

Tambah komen