VM ali Docker?

Kako razumeti, da potrebujete Docker, ne pa VM? Morate določiti, kaj želite izolirati. Če potrebujete izolirati sistem z zagotovljenimi dodeljenimi viri in virtualnim strojno opremo, potem se morate odločiti za VM. Če pa želite izolirati delujoče aplikacije kot ločene procese sistema, potrebujete Docker.

Kakšna je torej razlika med Docker kontejnerji in VM?

Virtualna naprava (VM) je virtualni računalnik z vsemi virtualnimi napravami in virtualnim trdim diskom, na katerega je nameščen nov neodvisen operacijski sistem skupaj z virtualnimi gonilniki naprav, upravljanjem pomnilnika in drugimi komponentami. Torej dobimo abstrakcijo fizične opreme, ki omogoča zagon več virtualnih računalnikov na enem računalniku.
Nameščeni VM lahko na računalniku zasedejo različne količine prostora na disku:

  • fiksno mesto na trdem disku, kar omogoča hitrejši dostop do virtualnega trdega diska in preprečuje fragmentacijo datoteke;
  • dinamično dodeljevanje pomnilnika. Pri namestitvi dodatnih aplikacij se bo pomnilnik dinamično dodeljeval zanje, dokler ne doseže največjega obsega, ki mu je dodeljen.

Bolj ko virtualnih naprav na strežniku, več prostora zavzamejo in zahtevajo stalno podporo okolja, potrebnega za delovanje vaše aplikacije.

Docker je programska oprema za ustvarjanje aplikacij na osnovi kontejnerjev. Kontejnerji in virtualne stroje imajo podobne prednosti, ampak delujejo različno. Kontejnerji zasedajo manj prostora, saj ponovno uporabljajo več skupnih virov gostiteljske sistema kot VM, saj v nasprotju z VM zagotavljajo virtualizacijo na ravni operacijskega sistema in ne strojne opreme. Ta pristop zagotavlja manjšo porabo pomnilnika, hitro nameščanje in enostavnejše skaliranje.

Kontejner omogoča bolj učinkovito kapsulacijo aplikacij, zagotavljajoč potrebne vmesnike gostiteljske sistema. Ta možnost omogoča kontejnerjem, da delijo jedro sistema, pri čemer vsak od kontejnerjev deluje kot ločen proces glavne operacijske sistema, ki ima svoj lasten nabor pomnilniških območij (lastni virtualni naslovni prostor). Ker je virtualni naslovni prostor vsakega kontejnerja svoj, podatki, ki pripadajo različnim pomnilniškim območjem, ne morejo biti spremenjeni.
Nativni operacijski sistem za Docker je Linux (Docker lahko uporabljate tudi na Windowsih in MacOS-u), izkorišča njegove ključne prednosti, ki mu omogočajo organizacijo delitve jedra. Zagon Docker kontejnerjev na Windowsih se bo odvijal znotraj virtualnega računalnika z operacijskim sistemom Linux, saj kontejnerji delijo operacijski sistem gostiteljske naprave, glavni operacijski sistem pa je zanje Linux.

Kontejner — kako deluje?

Kontejner — je abstrakcija na ravni aplikacije, ki združuje kodo in odvisnosti. Kontejnerji so vedno ustvarjeni iz slik, z dodajanjem dostopne za pisanje zgornje plasti in inicializirajo različne parametre. Ker ima kontejner svojo lastno plast za pisanje in vse spremembe se shranijo v tej plasti, lahko več kontejnerjev skupno uporablja dostop do iste osnovne slike.

Vsak kontejner lahko konfigurirate preko datoteke v projektu docker-compose, vključene v glavno rešitev — docker-compose.yml. Tam lahko določite različne parametre, kot so ime kontejnerja, porte, identifikatorje, omejitve virov, odvisnosti med drugimi kontejnerji. Če v nastavitvah ne določite imena kontejnerja, bo Docker vsakič ustvaril nov kontejner in mu dodelil ime naključno.

Ko se kontejner zažene iz slike, Docker pritrdi Datotečni sistem za branje in pisanje nad vsemi spodnjimi plasti. Prav tu bodo potekali vsi procesi, ki jih želimo, da naš Docker kontejner izvaja.

Ko Docker prvič zažene kontejner, je začetna plast za branje in pisanje prazna. Ko pride do sprememb, se te nanašajo na to plast; na primer, če želite spremeniti datoteko, se ta datoteka kopira iz plasti samo za branje spodaj v plast za branje in pisanje.
Različica datoteke, dostopna samo za branje, bo še vedno obstajala, a bo zdaj skrita pod kopijo. Za shranjevanje podatkov, ne glede na življenjski cikel kontejnerja, se uporabljajo volumni. Volumni se inicializirajo ob ustvarjanju kontejnerja.

Kako je slika povezana s kontejnerjem?

Slika je osnovni element za vsak kontejner. Slika se ustvari iz Dockerfile, dodanega v projekt, in predstavlja nabor sistemskih datotek (plasti), ki so naložene ena na drugo in skupaj združene, dostopne samo za branje; največje število plasti je 127.

V središču vsake slike je osnovna slika, ki jo določa ukaz FROM — vhodna točka pri oblikovanju Dockerfile. Vsaka plast je read-only plast in je predstavljena z enim ukazom, ki spreminja datotečni sistem zapisan v Dockerfile.
Za kombiniranje teh plasti v eno sliko Docker uporablja napreden večplastni združen file sistem (AuFS je zgrajen na osnovi UnionFS), kar omogoča različnim datotekam in mapam iz različnih datotečnih plasti, da se prozorno prekrivajo in ustvarijo povezano datotečno strukturo.

Plasti vsebujejo metapodatke, ki omogočajo shranjevanje spremljajočih informacij o vsaki plasti med izvajanjem in gradnjo. Vsaka plast vsebuje referenco na naslednjo plast; če plast nima reference, pomeni, da je to najvišja plast v sliki.

Dockerfile lahko vsebuje naslednje ukaze:

  • FROM — vhodna točka pri oblikovanju slike;
  • MAINTAINER — ime lastnika slike;
  • RUN — izvaja ukaz med gradnjo slike;
  • ADD — prekopira datoteko z gostitelja v novo sliko; če je navedena URL-datoteka, bo Docker naložil v določeno mapo;
  • ENV — okoljske spremenljivke;
  • CMD — zažene ustvarjanje novega kontejnerja na podlagi slike;
  • ENTRYPOINT — ukaz se izvede ob zagonu kontejnerja.
  • WORKDIR — delovna mapa za izvajanje ukaza CMD.
  • USER — nastavi UID za kontejner, ustvarjen na podlagi slike.
  • VOLUME — montira mapo z gostitelja v kontejner.
  • EXPOSE — set poslušanih vrat v kontejnerju.

Kako deluje UnionFS?

UnionFS — službena stack datotečna sistem (DS) za Linux in FreeBSD. Ta DS implementira mehanizem kopiranja ob pisanju (Copy-On-Write, COW). Delovna enota UnionFS je plast, vsako plast je treba obravnavati kot ločeno polno funkcionalno datotečno sistem s hierarhijo direktorij od samega korena. UnionFS ustvari združeno montažo za druge datotečne sisteme in uporabniku omogoča, da brez težav združi datoteke in mape različnih datotečnih sistemov (imenovanih veje) v enotno povezano datotečno sistem.

Vsebina map z enakimi potmi bo prikazana skupaj v eni združeni mapi (v enem skupnem imenskem prostoru) pridobljene datotečne sistem.

UnionFS združuje plasti na podlagi naslednjih načel:

  • ena od plasti postane plast najvišje ravni, druga in naslednje – plasti nižje ravni;
  • uporabnik ima dostop do objektov plasti "od zgoraj navzdol", tj. če je zahtevani objekt v "zgornji" plasti, se vrne ta, ne glede na to, ali obstaja objekt s tem imenom v "nižji" plasti; v nasprotnem primeru se vrne objekt "nižjega" sloja; če zahtevani objekt ni prisoten ne tam ne tam, se vrne napaka "Ni takšne datoteke ali mape";
  • delovna plast je "zgornja", tj. vse uporabniške akcije za spremembo podatkov se odražajo le na plasti najvišje ravni, ne da bi vplivale na vsebino plasti nižjih nivojev.

Docker je najpogostejša tehnologija za uporabo kontejnerjev pri delovanju aplikacij. Postal je standard na tem področju, zgrajen na podlagi cgroups in prostora imen, ki jih zagotavlja jedro Linux.

Docker nam omogoča hitro uvajanje aplikacij in čim bolj optimalno uporabo datotečnega sistema z delitvijo jedra OS med vsemi kontejnerji, deluje kot ločeni procesi OS.

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster