VM sau Docker?

Cum să înțelegeți că aveți nevoie de Docker, nu de VM? Trebuie să determinați ce anume doriți să izolați. Dacă trebuie să izolați un sistem cu resurse dedicate garantat și hardware virtual, atunci alegerea trebuie să cadă pe VM. Dacă trebuie să izolați aplicațiile active ca procese separate ale sistemului, veți avea nevoie de Docker.

Care este diferența dintre containerele Docker și VM?

Mașina virtuală (VM) este un computer virtual cu toate dispozitivele virtuale și cu un hard disk virtual, pe care se instalează un nou sistem de operare independent împreună cu driverele virtuale ale dispozitivelor, gestionarea memoriei și alte componente. Cu alte cuvinte, obținem o abstracție a hardware-ului fizic, care permite rularea mai multor computere virtuale pe un singur computer.
O VM instalată poate ocupa diferit spațiu pe discul computerului:

  • spațiu fix pe hard disk, ceea ce permite un acces mai rapid la hard diskul virtual și ajută la evitarea fragmentării fișierului;
  • alocare dinamică a memoriei. Atunci când se instalează aplicații suplimentare, memoria va fi alocată dinamic pentru acestea, până când se atinge volumul maxim alocat.

Cu cât mașini virtuale pe server, cu atât mai mult spațiu ocupă, dar necesită și întreținerea constantă a mediului necesar pentru funcționarea aplicației dvs.

Docker este un software pentru crearea aplicațiilor bazate pe containere. Containerele și mașini virtuale au avantaje similare, dar funcționează diferit. Containerele ocupă mai puțin spațiu, deoarece reutilizează o cantitate mai mare de resurse comune ale sistemului gazdă decât VM, deoarece, spre deosebire de VM, asigură virtualizarea la nivelul sistemului de operare, nu la nivel hardware. Această abordare asigură un volum mai mic de memorie utilizat, desfășurare rapidă și scalare mai simplă.

Containerele oferă un mecanism mai eficient de encapsulare a aplicațiilor, asigurând interfețele necesare ale sistemului gazdă. Această capacitate permite containerelor să împărtășească nucleul sistemului, unde fiecare container functionează ca un proces separat al OS-ului principal, având propriul set de zone de memorie (spațiu de adrese virtuale proprii). Deoarece spațiul de adrese virtuale al fiecărui container este distinct, datele aparținând unor zone de memorie diferite nu pot fi modificate.
Sistemul de operare nativ pentru Docker este Linux (Docker poate fi folosit și pe Windows și MacOS), acesta profitând de avantajele sale fundamentale, care îi permit să organizeze separarea nucleului. Rularea containerelor Docker pe Windows se va efectua într-o mașină virtuală cu sistem de operare Linux, deoarece containerele împărtășesc sistemul de operare al gazdei, iar Linux este sistemul de operare principal pentru acestea.

Container — cum funcționează?

Container — este o abstracție la nivel de aplicație, care combină codul și dependențele. Containerele sunt întotdeauna create din imagini, adăugând un strat superior accesibil pentru scriere și inițializează diferite parametrii. Deoarece containerul are propriul strat pentru scriere și toate modificările sunt salvate în acest strat, mai multe containere pot împărtăși accesul la aceeași imagine de bază.

Fiecare container poate fi configurat printr-un fișier din proiectul docker-compose, inclus în soluția principală — docker-compose.yml. Acolo pot fi specificate diferite parametrii, cum ar fi numele containerului, porturile, identificatorii, limitele resurselor, dependențele între alte containere. Dacă numele containerului nu este specificat în setări, Docker va crea de fiecare dată un container nou, atribuindu-i un nume aleator.

Când un container este pornit dintr-o imagine, Docker montează sistemul de fișiere pentru citire și scriere deasupra oricăror straturi inferioare. Aici se vor executa toate procesele pe care dorim să le efectueze containerul nostru Docker.

Când Docker pornește pentru prima dată un container, stratul inițial de citire-scriere este gol. Când au loc modificări, acestea sunt aplicate la acest strat; de exemplu, dacă doriți să modificați un fișier, acel fișier va fi copiat din stratul doar pentru citire de mai jos în stratul pentru citire și scriere.
Versiunea fișierului disponibilă doar în citire va continua să existe, dar acum este ascunsă sub o copie. Volumenele sunt utilizate pentru stocarea datelor, indiferent de ciclul de viață al containerului. Volumele sunt inițializate la crearea containerului.

Cum este legat un imagine de un container?

Tip — elementul de bază pentru fiecare container. Imaginea este creată din Dockerfile, adăugat în proiect și reprezintă un set de sisteme de fișiere (straturi) suprapuse și grupate împreună, disponibile doar pentru citire; numărul maxim de straturi este 127.

La baza fiecărei imagini se află o imagine de bază, care este specificată de comanda FROM — punctul de intrare la formarea imaginii Dockerfile. Fiecare strat este un strat readonly și este reprezentat de o comandă care modifică sistemul de fișiere documentat în Dockerfile.
Pentru a combina aceste straturi într-o singură imagine, Docker folosește Advanced multi layered Union file system (AuFS construit pe baza UnionFS), permițând diferitelor fișiere și directoare din diferite straturi de fișiere să se suprapună transparent, creând un sistem de fișiere legat.

Straturile conțin metadate care permit păstrarea informațiilor însoțitoare despre fiecare strat în timpul execuției și compilării. Fiecare strat conține un link către stratul următor; dacă un strat nu are un link, atunci acesta este stratul de sus în imagine.

Dockerfile poate conține comenzi precum:

  • FROM — punctul de intrare la formarea imaginii;
  • MAINTAINER — numele proprietarului imaginii;
  • RUN — executarea unei comenzi în timpul compilării imaginii;
  • ADD — copierea unui fișier de pe gazdă într-o nouă imagine; dacă este specificat un URL al fișierului, Docker îl va descărca în directorul specificat;
  • ENV — variabile de mediu;
  • CMD — inițiază crearea unui nou container pe baza imaginii;
  • ENTRYPOINT — comanda este executată la pornirea containerului.
  • WORKDIR — directorul de lucru pentru executarea comenzii CMD.
  • USER — setează UID pentru containerul creat pe baza imaginii.
  • VOLUME — montează un director de pe gazdă în container.
  • EXPOSE — setul de porturi ascultate în container.

Cum funcționează UnionFS?

UnionFS — sistem de fișiere stivă de sistem (FS) pentru Linux și FreeBSD. Acest FS implementează mecanismul de copiere la scriere (Copy-On-Write, COW). Unitatea de lucru a UnionFS este un strat, fiecare strat trebuie considerat ca un sistem de fișiere complet, cu o ierarhie de directoare de la rădăcină. UnionFS creează un montaj combinat pentru alte sisteme de fișiere și permite utilizatorului să unească fișierele și directoarele diferitelor sisteme de fișiere (numite ramuri) într-un singur sistem de fișiere legat.

Conținutul directoarelor cu căi identice va fi afișat împreună într-un singur director combinat (într-un singur spațiu de nume) al sistemului de fișiere obținut.

UnionFS combină straturile, conducându-se după următoarele principii:

  • unul dintre straturi devine stratul de nivel superior, al doilea și straturile ulterioare devin straturi de nivel inferior;
  • utilizatorului, obiectele straturilor sunt accesibile "de sus în jos", adică dacă obiectul solicitat se află în stratul "superior", acesta este returnat, indiferent de existența unui obiect cu același nume în stratul "inferior"; altfel, este returnat obiectul stratului "inferior"; dacă obiectul solicitat nu se găsește nici acolo, nici acolo, este returnată o eroare "Nu există un asemenea fișier sau director";
  • stratul de lucru este "superior", astfel că toate acțiunile utilizatorului de modificare a datelor se reflectă doar pe stratul de nivel superior, fără a afecta conținutul straturilor inferioare.

Docker este cea mai răspândită tehnologie de utilizare a containerelor în rândul aplicațiilor. A devenit standard în acest domeniu, bazându-se pe cgroups și spațiile de nume pe care le oferă nucleul Linux.

Docker ne permite să desfășurăm rapid aplicații și să utilizăm sistemul de fișiere cât mai optim, prin separarea nucleului OS între toate containerele, funcționând ca procese OS separate.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster