VM ili Docker?

Kako shvatiti da vam treba Docker, a ne VM? Morate odrediti šta tačno želite izolirati. Ako želite da izolujete sistem sa zagarantovanim resursima i virtuelnim hardverom, onda 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 kontejnera i VM-a?

Virtuelna mašina (VM) je virtuelni računar sa svim virtuelnim uređajima i virtuelnim hard diskom, na koji je instaliran novi nezavisni OS zajedno sa drajverima virtuelnih uređaja, upravljanjem memorijom i drugim komponentama. To jest, dobijamo apstrakciju fizičkog hardvera koji vam omogućava da pokrenete više virtuelnih računara na jednom računaru.
Instalirani VM može zauzeti prostor na disku na različite načine:

  • fiksni prostor na tvrdom disku, koji omogućava brži pristup virtuelnom tvrdom disku i izbjegava fragmentaciju datoteka;
  • dinamička alokacija memorije. Prilikom instaliranja dodatnih aplikacija, memorija će im se dinamički dodijeliti dok ne dostigne maksimalnu količinu koja joj je dodijeljena.

Što više virtuelne mašine Što više prostora zauzimaju na serveru, to više prostora zahtijevaju i to im je potrebna stalnija podrška za okruženje koje je potrebno za pokretanje vaše aplikacije.

doker — je softver za kreiranje aplikacija zasnovanih na kontejnerima. Kontejneri i virtuelna mašina Imaju slične prednosti, ali funkcionišu drugačije. Kontejneri zauzimaju manje prostora jer ponovo koriste više zajedničkih resursa host sistema nego virtuelne mašine (VM), jer za razliku od VM-ova, oni pružaju virtualizaciju na nivou operativnog sistema, a ne na nivou hardvera. Ovaj pristup osigurava manji memorijski otisak, brže raspoređivanje i lakše skaliranje.

Kontejner obezbeđuje efikasniji mehanizam za inkapsuliranje aplikacija obezbeđivanjem potrebnih interfejsa za host sistem. Ova karakteristika omogućava kontejnerima da dijele jezgro sistema, gdje svaki od kontejnera radi kao poseban proces glavnog OS-a, koji ima svoj vlastiti skup memorijskih područja (svoj virtuelni adresni prostor). Budući da je virtualni adresni prostor svakog kontejnera svoj, podaci koji pripadaju različitim memorijskim područjima ne mogu se mijenjati.
Izvorni operativni sistem za Docker je Linux (Docker se također može koristiti na Windows, i na MacOS-u), koristi svoje glavne prednosti, koje mu omogućavaju organiziranje odvajanja kernela. Pokretanje Docker kontejnera na Windows će se dogoditi unutar virtuelne mašine sa operativnim sistemom Linux, jer kontejneri dijele glavni operativni sistem, a osnovni operativni sistem za njih je Linux.

Kontejner - kako radi?

Kontejner je apstrakcija na nivou aplikacije koja kombinuje kod i zavisnosti. Kontejneri se uvijek kreiraju od slika, dodajući gornji sloj koji se može pisati i inicijalizirati različite parametre. Budući da kontejner ima svoj vlastiti sloj za pisanje i sve promjene su pohranjene u tom sloju, više kontejnera može dijeliti pristup istoj glavnoj slici.

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

Kada se kontejner pokrene sa slike, Docker montira sistem datoteka za čitanje/pisanje na bilo koji sloj ispod. Ovdje će se pokrenuti svi procesi koje želimo da naš Docker kontejner pokreće.

Kada Docker prvi put pokrene kontejner, 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 datoteka će biti kopirana sa sloja samo za čitanje ispod u sloj za čitanje i pisanje.
Verzija datoteke samo za čitanje će i dalje postojati, ali je sada skrivena ispod kopije. Volumi se koriste za skladištenje podataka, bez obzira na životni ciklus kontejnera. Volumi se inicijaliziraju kada se kreira spremnik.

Kako je slika povezana sa kontejnerom?

Slika - glavni element za svaki kontejner. Slika je kreirana iz Dockerfile-a dodanog projektu i predstavlja skup sistema datoteka (slojeva) raspoređenih jedan na drugi i grupisanih zajedno, dostupnih samo za čitanje; maksimalan broj slojeva je 127.

U srcu svake slike je osnovna slika, koja je određena naredbom FROM - ulazna tačka prilikom generisanja Dockerfile slike. Svaki sloj je sloj samo za čitanje i predstavljen je jednom naredbom koja modificira sistem datoteka, napisana u Dockerfile-u.
Za kombinovanje ovih slojeva u jednu sliku, Docker koristi napredni višeslojni sistem datoteka Union (AuFS je izgrađen na vrhu UnionFS), dozvoljavajući različitim datotekama i direktorijumima iz različitih slojeva datoteka da se transparentno preklapaju, stvarajući pridruženi sistem datoteka.

Slojevi sadrže metapodatke koji vam omogućavaju pohranjivanje povezanih informacija o svakom sloju u vrijeme izvođenja i izgradnje. Svaki sloj sadrži vezu sa sljedećim slojem, ako sloj nema vezu, onda je ovo najviši sloj na slici.

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

  • FROM - ulazna tačka u formiranju slike;
  • MAINTAINER - ime vlasnika slike;
  • RUN - izvršenje naredbe tokom sklapanja slike;
  • DODAJ - kopiranje host datoteke u novu sliku, ako navedete URL datoteku, Docker će je preuzeti u navedeni direktorij;
  • ENV - varijable okruženja;
  • CMD - počinje kreiranje novog kontejnera na osnovu slike;
  • ENTRYPOINT - Naredba se izvršava kada se kontejner pokrene.
  • WORKDIR je radni direktorij za izvršavanje CMD naredbe.
  • KORISNIK - Postavlja UID za kontejner kreiran od slike.
  • VOLUME - Montira host direktorij u kontejner.
  • EXPOSE je skup portova koji se slušaju u kontejneru.

Kako funkcioniše UnionFS?

UnionFS — sistem datoteka servisnog steka (FS) za Linux i FreeBSD. Ovaj datotečni sistem implementira mehanizam kopiranja prilikom pisanja (COW). Radna jedinica UnionFS-a je sloj, svaki sloj treba smatrati zasebnim, kompletnim datotečnim sistemom s hijerarhijom direktorija koja počinje od korijena. UnionFS kreira union mount za druge datotečne sisteme i omogućava spajanje datoteka i direktorija iz različitih datotečnih sistema (zvanih forkovi) u jedan, kohezivan datotečni sistem transparentno za korisnika.

Sadržaj direktorija sa istim stazama će biti prikazan zajedno u jednom kombinovanom direktorijumu (u istom imenskom prostoru) rezultirajućeg sistema datoteka.

UnionFS kombinuje slojeve na osnovu sledećih principa:

  • jedan od slojeva postaje sloj najvišeg nivoa, drugi i sljedeći slojevi postaju slojevi nižeg nivoa;
  • objekti sloja su dostupni korisniku „od vrha do dna“, tj. ako je traženi objekat u "gornjem" sloju, vraća se, bez obzira na prisustvo objekta istog imena u "donjem" sloju; u suprotnom, vraća se objekat sloja "donji"; ako traženi objekat nije ni tamo ni tamo, vraća se greška "Nema takve datoteke ili direktorija";
  • radni sloj je „gornji“, odnosno, sve radnje korisnika za promenu podataka odražavaju se samo na sloju najvišeg nivoa, bez uticaja na sadržaj slojeva nižeg nivoa.

Docker je najčešće korištena kontejnerska tehnologija za izvršavanje aplikacija. Postao je standard u ovom području, nadograđujući se na cgrupe i imenske prostore koje pruža kernel. Linux.

Docker nam omogućava da brzo implementiramo aplikacije i na najbolji način iskoristimo sistem datoteka tako što dijelimo jezgro OS-a između svih kontejnera, koji rade kao zasebni procesi OS-a.

izvor: www.habr.com

Kupite pouzdan hosting za sajtove sa DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan web hosting sa DDoS zaštitom, VPS VDS servere | ProHoster