VM ili Docker?

Kako shvatiti da vam treba Docker, a ne VM? Morate odrediti što točno želite izolirati. Ako želite izolirati sustav sa zajamčenim resursima i virtualnim hardverom, tada bi izbor trebao pasti na VM. Ako trebate izolirati pokrenute aplikacije kao zasebne sistemske procese, trebat će vam Docker.

Dakle, koja je razlika između Docker spremnika i VM-ova?

Virtualni stroj (VM) je virtualno računalo sa svim virtualnim uređajima i virtualnim tvrdim diskom, na kojem je instaliran novi neovisni OS zajedno s upravljačkim programima virtualnih uređaja, upravljanjem memorijom i ostalim komponentama. To jest, dobivamo apstrakciju fizičkog hardvera koja vam omogućuje pokretanje mnogih virtualnih računala na jednom računalu.
Instalirani VM može zauzeti prostor na disku na različite načine:

  • fiksni prostor na tvrdom disku, koji omogućuje brži pristup virtualnom tvrdom disku i izbjegava fragmentaciju datoteka;
  • dinamička dodjela memorije. Prilikom instaliranja dodatnih aplikacija, memorija će im se dinamički dodjeljivati ​​sve dok ne dosegne maksimalnu količinu koja joj je dodijeljena.

Što je više virtualnih strojeva na poslužitelju, zauzimaju više prostora, a također zahtijevaju stalnu podršku okoline potrebnu za rad vaše aplikacije.

Lučki radnik je softver za izradu aplikacija temeljenih na kontejnerima. Kontejneri i virtualni strojevi imaju slične prednosti, ali rade drugačije. Spremnici zauzimaju manje prostora, jer prekomjerna upotreba više zajedničkih resursa glavnog sustava nego VM, jer za razliku od VM-a, pruža virtualizaciju na razini OS-a, a ne hardvera. Ovaj pristup omogućuje manje memorijskog otiska, bržu implementaciju i lakše skaliranje.

Spremnik pruža učinkovitiji mehanizam za enkapsulaciju aplikacija pružajući potrebna sučelja glavnom sustavu. Ova značajka omogućuje spremnicima da dijele jezgru sustava, gdje se svaki od spremnika izvodi kao zaseban proces glavnog OS-a, koji ima vlastiti skup memorijskih područja (vlastiti virtualni adresni prostor). Budući da je virtualni adresni prostor svakog spremnika vlastiti, podaci koji pripadaju različitim memorijskim područjima ne mogu se mijenjati.
Izvorni OS za Docker je Linux (Docker se također može koristiti na Windowsima i MacOS-u), koristi svoje glavne prednosti, koje mu omogućuju organiziranje podijeljenog kernela. Pokretanje Docker spremnika na Windowsu odvijat će se unutar Linux virtualnog stroja. spremnici dijele OS glavnog sustava, a glavni OS za njih je Linux.

Kontejner - kako radi?

kontejner je apstrakcija na razini aplikacije koja kombinira kod i ovisnosti. Spremnici se uvijek stvaraju od slika, dodajući gornji sloj za pisanje i inicijalizirajući razne parametre. Budući da spremnik ima vlastiti sloj za pisanje i sve su promjene pohranjene u tom sloju, više spremnika može dijeliti pristup istoj glavnoj slici.

Svaki spremnik može se konfigurirati putem datoteke u projektu docker-compose koji je uključen u glavno rješenje, docker-compose.yml. Tamo možete postaviti razne parametre kao što su naziv spremnika, portovi, identifikatori, ograničenja resursa, ovisnosti između drugih spremnika. Ako u postavkama ne navedete naziv spremnika, tada će Docker svaki put stvoriti novi spremnik, nasumično mu dodjeljujući naziv.

Kada se spremnik pokrene iz slike, Docker montira datotečni sustav za čitanje/pisanje na bilo koji sloj ispod. Ovdje će se izvoditi svi procesi za koje želimo da pokreće naš Docker spremnik.

Kada Docker prvi put pokrene spremnik, početni sloj za čitanje/pisanje je prazan. Kada dođe do promjena, one se primjenjuju na taj sloj; na primjer, ako želite izmijeniti datoteku, ta će datoteka biti kopirana iz sloja samo za čitanje ispod u sloj za čitanje i pisanje.
Verzija datoteke samo za čitanje i dalje će postojati, ali je sada skrivena ispod kopije. Volumeni se koriste za pohranu podataka, bez obzira na životni ciklus spremnika. Volumeni se inicijaliziraju kada se kreira spremnik.

Kako je slika povezana sa spremnikom?

slika - glavni element za svaki spremnik. Slika je stvorena iz Dockerfilea dodanog projektu i skup je datotečnih sustava (slojeva) naslaganih jedan na drugi i grupiranih zajedno, dostupnih samo za čitanje; najveći broj slojeva je 127.

U središtu svake slike je osnovna slika, koja je određena naredbom FROM - ulaznom točkom pri generiranju Dockerfile slike. Svaki sloj je sloj samo za čitanje i predstavljen je jednom naredbom koja mijenja datotečni sustav, napisanom u Dockerfile.
Za kombiniranje ovih slojeva u jednu sliku, Docker koristi napredni višeslojni Union datotečni sustav (AuFS je izgrađen na UnionFS-u), dopuštajući različitim datotekama i direktorijima iz različitih datotečnih slojeva da se transparentno preklapaju, stvarajući pridruženi datotečni sustav.

Slojevi sadrže metapodatke koji vam omogućuju pohranu povezanih informacija o svakom sloju tijekom izvođenja i izgradnje. Svaki sloj sadrži vezu na sljedeći sloj, ako sloj nema vezu, onda je to najviši sloj na slici.

Dockerfile može sadržavati naredbe kao što su:

  • FROM - ulazna točka u formiranju slike;
  • MAINTAINER - ime vlasnika slike;
  • RUN - izvršavanje naredbe tijekom sklapanja slike;
  • ADD - kopiranje host datoteke u novu sliku, ako navedete URL datoteku, Docker će je preuzeti u navedeni direktorij;
  • ENV - varijable okruženja;
  • CMD - pokreće stvaranje novog spremnika na temelju slike;
  • ULAZNA TOČKA - Naredba se izvršava kada se spremnik pokrene.
  • WORKDIR je radni direktorij za izvršavanje CMD naredbe.
  • KORISNIK - postavlja UID za spremnik stvoren iz slike.
  • VOLUME - Montira glavni direktorij u spremnik.
  • EXPOSE je skup portova koji se slušaju u spremniku.

Kako funkcionira UnionFS?

UnionFS — datotečni sustav servisnog stoga (FS) za Linux i FreeBSD. Ovaj FS implementira mehanizam kopiranja na pisanje (Copy-On-Write, COW). Radna jedinica UnionFS-a je sloj, svaki sloj treba smatrati zasebnim punopravnim sustavom datoteka s hijerarhijom direktorija od samog korijena. UnionFS stvara union mount za druge datotečne sustave i omogućuje vam transparentno spajanje datoteka i direktorija iz različitih datotečnih sustava (zvanih ogranci) u jedan povezani datotečni sustav, transparentno za korisnika.

Sadržaj direktorija s istim stazama bit će prikazan zajedno u jednom kombiniranom direktoriju (u istom prostoru imena) rezultirajućeg datotečnog sustava.

UnionFS kombinira slojeve na temelju sljedećih načela:

  • jedan od slojeva postaje sloj najviše razine, drugi i sljedeći slojevi postaju slojevi niže razine;
  • objekti sloja dostupni su korisniku "odozgo prema dolje", tj. ako je traženi objekt u "gornjem" sloju, vraća se, bez obzira na prisutnost objekta s istim imenom u "donjem" sloju; inače se vraća objekt "donjeg" sloja; ako traženi objekt nije ni tamo ni tamo, vraća se pogreška "Nema takve datoteke ili direktorija";
  • radni sloj je "gornji", to jest sve radnje korisnika za promjenu podataka odražavaju se samo na sloju najviše razine, bez utjecaja na sadržaj slojeva niže razine.

Docker je najčešća tehnologija za korištenje spremnika u radu aplikacija. Postao je standard u ovom području, nadovezujući se na cgroups i namespaces koje pruža Linux kernel.

Docker nam omogućuje brzu implementaciju aplikacija i najbolje korištenje datotečnog sustava dijeljenjem OS kernela između svih spremnika, koji se izvode kao zasebni OS procesi.

Izvor: www.habr.com

Dodajte komentar