VM utawa Docker?

Kepiye sampeyan ngerti yen sampeyan butuh Docker lan dudu VM? Sampeyan kudu nemtokake apa persis sing pengin diisolasi. Yen sampeyan pengin ngisolasi sistem kanthi sumber daya khusus lan hardware virtual sing dijamin, mula pilihan kasebut kudu dadi VM. Yen sampeyan kudu ngisolasi aplikasi sing mlaku minangka proses sistem sing kapisah, sampeyan butuh Docker.

Dadi, apa bedane kontaner Docker lan VM?

Mesin virtual (VM) iku komputer virtual karo kabeh piranti virtual lan hard disk virtual kang OS independen anyar diinstal bebarengan karo driver piranti virtual, Manajemen memori lan komponen liyane. Yaiku, kita entuk abstraksi hardware fisik sing ngidini kita mbukak akeh komputer virtual ing siji komputer.
VM sing diinstal bisa njupuk ruang ing disk komputer kanthi macem-macem cara:

  • papan hard disk tetep, sing ngidini akses luwih cepet menyang hard disk virtual lan ngindhari fragmentasi file;
  • alokasi memori dinamis. Nalika nginstal aplikasi tambahan, memori bakal dialokasikan kanthi dinamis kanggo aplikasi kasebut nganti tekan jumlah maksimal sing diparengake.

Sing liyane mesin virtual saben server, liyane papan padha njupuk munggah, lan uga mbutuhake support pancet kanggo lingkungan dibutuhake kanggo aplikasi kanggo mbukak.

docker iku piranti lunak kanggo nggawe aplikasi basis wadhah. Wadah lan mesin virtual duwe keuntungan sing padha, nanging beda-beda. Kontainer njupuk kurang spasi amarga ... nggunakake maneh sumber daya sambungan liyane saka sistem inang saka VM, amarga ora kaya VM, menehi virtualisasi ing tingkat OS, ora ing tingkat hardware. Pendekatan iki nyebabake jejak memori sing luwih murah, panyebaran luwih cepet, lan skala sing luwih gampang.

Wadhah kasebut nyedhiyakake mekanisme sing luwih efisien kanggo aplikasi enkapsulasi kanthi menehi antarmuka sing dibutuhake kanggo sistem inang. Fitur iki ngidini wadhah kanggo nuduhake inti saka sistem, karo saben wadhah mlaku minangka proses OS host kapisah sing wis pesawat wilayah memori dhewe (ruang alamat virtual dhewe). Wiwit saben papan alamat virtual wadhah iku dhewe, data gadhahanipun wilayah memori beda ora bisa diganti.
OS asli kanggo Docker yaiku Linux (Docker uga bisa digunakake ing Windows lan MacOS), nggunakake kaluwihan utamane, sing ngidini kanggo ngatur pemisahan kernel. Mlaku kontaner Docker ing Windows bakal ditindakake ing mesin virtual sing nganggo Linux OS, amarga kontaner nuduhake OS sistem inang lan OS utama kanggo wong-wong mau yaiku Linux.

Wadhah - kepiye cara kerjane?

Container minangka abstraksi tingkat aplikasi sing nggabungake kode lan dependensi. Wadah tansah digawe saka gambar, nambah lapisan ndhuwur bisa ditulis lan initializing macem-macem paramèter. Amarga wadhah duwe lapisan nulis dhewe lan kabeh owah-owahan disimpen ing lapisan kasebut, sawetara wadhah bisa nuduhake akses menyang gambar master sing padha.

Saben wadhah bisa dikonfigurasi liwat file ing proyek docker-compose sing kalebu ing solusi utama - docker-compose.yml. Ing kono sampeyan bisa nyetel macem-macem paramèter kayata jeneng wadhah, port, pengenal, watesan sumber daya, dependensi antarane wadhah liyane. Yen sampeyan ora nemtokake jeneng wadhah ing setelan, Docker bakal nggawe wadhah anyar saben wektu, menehi jeneng kanthi acak.

Nalika wadhah diwiwiti saka gambar, Docker masang filesystem sing diwaca-tulis ing ndhuwur lapisan ing ngisor iki. Ing kene kabeh proses sing dikarepake bakal ditindakake wadah Docker.

Nalika Docker pisanan miwiti wadhah, lapisan maca-tulis dhisikan kosong. Nalika owah-owahan kedadeyan, ditrapake ing lapisan iki; contone,, yen sampeyan pengin ngganti file, file sing bakal disalin saka lapisan diwaca-mung ing ngisor iki kanggo lapisan diwaca-nulis.
Versi file mung diwaca isih bakal ana, nanging saiki didhelikake ing salinan kasebut. Volume digunakake kanggo nyimpen data, preduli saka siklus urip wadhah. Volume diwiwiti nalika wadhah digawe.

Kepiye hubungane gambar karo wadhah?

Gambar - unsur utama kanggo saben wadhah. Gambar kasebut digawe saka Dockerfile sing ditambahake ing proyek kasebut lan minangka kumpulan sistem file (lapisan) sing dilapisi ing ndhuwur saben liyane lan diklumpukake, mung diwaca; jumlah maksimum lapisan yaiku 127.

Ing jantung saben gambar ana gambar dhasar, sing ditemtokake dening printah FROM - titik entri nalika mbangun gambar Dockerfile. Saben lapisan minangka lapisan mung diwaca lan diwakili dening printah siji sing ngowahi sistem file, ditulis ing Dockerfile.
Kanggo nggabungake lapisan kasebut dadi gambar siji, Docker nggunakake sistem file Union multi layered Advanced (AuFS dibangun ing ndhuwur UnionFS), ngidini file lan direktori sing beda saka lapisan file sing beda bisa dilapisi kanthi transparan, nggawe sistem file sing kohesif.

Lapisan ngemot metadata sing ngidini sampeyan nyimpen informasi sing gegandhengan babagan saben lapisan sajrone runtime lan wektu mbangun. Saben lapisan ngemot pranala menyang lapisan sabanjure; yen lapisan ora duwe pranala, banjur lapisan paling ndhuwur ing gambar.

Dockerfile bisa ngemot perintah kayata:

  • FROM - titik entri nalika mbentuk gambar;
  • MAINTAINER - jeneng pemilik gambar;
  • RUN - eksekusi printah sajrone perakitan gambar;
  • ADD - nyalin file host menyang gambar anyar; yen sampeyan nemtokake URL file kasebut, Docker bakal ndownload menyang direktori sing ditemtokake;
  • ENV - variabel lingkungan;
  • CMD - miwiti nggawe wadhah anyar adhedhasar gambar;
  • ENTRYPOINT - printah dieksekusi nalika wadhah diwiwiti.
  • WORKDIR minangka direktori kerja kanggo nglakokake perintah CMD.
  • USER - nyetel UID kanggo wadhah sing digawe adhedhasar gambar.
  • VOLUME - masang direktori host menyang wadhah.
  • EXPOSE minangka set port sing dirungokake ing wadhah.

Kepiye cara kerja UnionFS?

UnionFS - utility stack file system (FS) kanggo Linux lan FreeBSD. FS iki ngetrapake mekanisme copy-on-write (Copy-On-Write, COW). Unit kerja UnionFS minangka lapisan; saben lapisan kudu dianggep minangka sistem file lengkap sing kapisah kanthi hierarki direktori saka root dhewe. UnionFS nggawe union mount kanggo sistem file liyane lan ngidini file lan direktori saka sistem file beda (disebut forks) digabungake dadi siji sistem file koheren, transparan kanggo pangguna.

Isi direktori kanthi jalur sing padha bakal katon bebarengan ing siji direktori manunggal (ing siji spasi jeneng) saka sistem berkas sing diasilake.

UnionFS nggabungake lapisan adhedhasar prinsip ing ngisor iki:

  • salah siji lapisan dadi lapisan ndhuwur, lapisan kapindho lan sabanjure dadi lapisan ngisor;
  • obyek lapisan kasedhiya kanggo pangguna "saka ndhuwur kanggo ngisor", i.e. yen obyek sing dijaluk ana ing lapisan "ndhuwur", bali, preduli saka ngarsane obyek kanthi jeneng sing padha ing lapisan "ngisor"; digunakake obyek saka lapisan "ngisor" bali; yen obyek sing dijaluk ora ana utawa ora ana, kesalahan "Ora ana file utawa direktori" bali;
  • lapisan apa iku "ndhuwur" siji, sing, kabeh tumindak pangguna kanggo ngganti data sing dibayangke mung ing lapisan ndhuwur-tingkat, tanpa mengaruhi isi lapisan saka tingkat ngisor.

Docker minangka teknologi paling umum kanggo nggunakake kontaner kanggo mbukak aplikasi. Wis dadi standar ing lapangan, mbangun cgroups lan namespaces sing diwenehake dening kernel Linux.

Docker ngidini kita nyebarake aplikasi kanthi cepet lan nggunakake paling apik sistem file kanthi misahake kernel OS ing antarane kabeh wadhah, mlaku minangka proses OS sing kapisah.

Source: www.habr.com

Add a comment