Cloud și date

Containerele: diferența față de mașinile virtuale

Ce sunt containerele software, cum împart nucleul sistemului de operare, de ce pornesc în secunde și când alegi un container în loc de o mașină virtuală.

De Publicația LumeaTehnologiei5 min de citit
Containere de marfă stivuite pe cheul unui port, imagine care ilustrează izolarea containerelor software
Cuprins 6 secțiuni

Un container este un pachet care conține o aplicație și tot ce îi trebuie ca să ruleze: biblioteci, setări, fișiere auxiliare. Spre deosebire de o mașină virtuală, nu aduce cu el un sistem de operare întreg, ci folosește nucleul celui al gazdei. Rezultatul este un mod de a livra programe care funcționează la fel pe laptopul programatorului, pe serverul de test și în cloud.

Numele vine, nu întâmplător, de la containerele de transport maritim: indiferent ce transportă, au aceeași formă standard, deci pot fi urcate pe orice navă, tren sau camion. Containerele software fac același lucru pentru aplicații.

De ce au apărut containerele?

Containerele au apărut pentru a rezolva fraza veche a programatorilor: „la mine funcționează”. O aplicație poate depinde de o anumită versiune de bibliotecă, de o setare a sistemului sau de o unealtă instalată de mână, iar pe alt calculator oricare dintre ele poate lipsi sau poate fi diferită.

Dacă aplicația este împachetată cu toate dependențele, problema dispare. Pachetul rulează identic oriunde există un program capabil să-l pornească. Cel mai cunoscut astfel de program este Docker, folosit atât de des încât mulți folosesc numele lui pentru întreaga idee. Există însă și alte unelte compatibile.

Un al doilea motiv este eficiența. Dacă ai de rulat zece aplicații mici, pornirea a zece mașini virtuale, fiecare cu sistemul ei de operare, risipește memorie. Containerele împart același nucleu, deci cele zece aplicații încap pe o gazdă mult mai mică.

Cum diferă un container de o mașină virtuală?

Un container virtualizează sistemul de operare, nu hardware-ul. Mașina virtuală, descrisă în Virtualizarea: cum rulează mai multe calculatoare pe unul, simulează un calculator întreg, iar containerul simulează doar un „spațiu privat” în interiorul aceluiași sistem de operare.

AspectMașină virtualăContainer
Ce conțineAplicație, biblioteci și sistem de operare completAplicație și biblioteci
Dimensiune tipicăDe ordinul gigaoctețilorDe ordinul zecilor sau sutelor de megaocteți
Timp de pornireMinuteSecunde sau mai puțin
IzolareFoarte puternicăBună, dar mai slabă
Sistem de operarePoate fi diferit de al gazdeiAcelași nucleu ca al gazdei

Ultima linie are consecințe practice: pe o gazdă Linux rulezi containere pentru Linux, nu pentru alt tip de sistem. Pe laptopurile cu alt sistem, programele de containere pornesc în fundal o mică mașină virtuală Linux, tocmai ca să aibă nucleul necesar.

Ce este o imagine de container?

O imagine de container este șablonul din care se pornesc containerele, un fel de fotografie în citire a aplicației și a mediului ei. Containerul este instanța vie creată dintr-o imagine, la fel cum un program pornit este instanța unui fișier executabil.

Imaginile se construiesc în straturi. Un strat de bază conține un sistem minimal, peste el se adaugă bibliotecile, apoi aplicația. Dacă modifici doar aplicația, se reface doar ultimul strat, nu totul, iar celelalte se refolosesc. Asta face actualizările rapide și transferurile mici.

Imaginile sunt păstrate în registre, adică depozite online de unde pot fi descărcate. Când un serviciu din cloud pornește zece copii ale aceleiași aplicații, descarcă imaginea o singură dată și creează zece containere din ea.

Lăzi de lemn așezate pe rafturi într-un depozit, fiecare ținând separat ce conține

Când alegi containere și când mașini virtuale?

Alegi containere când ai aplicații care pot fi împachetate curat, vrei pornire rapidă și multe copii care rulează în paralel. Alegi mașini virtuale când ai nevoie de izolare maximă, de un sistem de operare diferit sau când rulezi programe vechi, care așteaptă un calculator întreg.

Situațiile tipice arată așa:

  • o aplicație web cu mai multe părți (interfață, server, bază de date): fiecare piesă într-un container separat, care se actualizează independent;
  • testarea automată: se pornește un mediu curat într-o secundă și se șterge după rulare;
  • clienți diferiți pe aceeași infrastructură: mașini virtuale, pentru o separare mai strictă;
  • programe vechi care cer o versiune anume de sistem: mașină virtuală.

În practică, cele două se combină des. Un furnizor de cloud pornește mașini virtuale pentru clienți, iar în interiorul fiecărei mașini clientul rulează containere. Astfel obții izolarea tare pe exterior și flexibilitatea pe interior.

Ce înseamnă orchestrarea containerelor?

Orchestrarea este administrarea automată a unui număr mare de containere: pornirea lor, repornirea celor căzute, distribuirea între servere și adăugarea de copii când crește încărcarea. Fără ea, ai de urmărit manual zeci sau sute de containere.

Un sistem de orchestrare primește o descriere de tipul „vreau trei copii din această aplicație, mereu” și se ocupă singur de rest. Dacă un server cade, copiile de pe el sunt repornite pe altele. Dacă traficul crește, numărul de copii se mărește. Principiul scalării automate îl detaliezi în Scalarea în cloud: orizontală, verticală și elasticitate.

Pentru un proiect mic, orchestrarea este de multe ori excesivă. Un singur server cu câteva containere pornite simplu poate fi suficient ani de zile. Complexitatea se justifică abia când numărul de servicii și de servere crește.

Atenție: Un container nu este automat sigur. Dacă imaginea conține programe vechi, cu vulnerabilități cunoscute, ele rămân vulnerabile și în container. Imaginile se reconstruiesc periodic, cu versiuni actualizate, la fel cum se aplică actualizările de software pe orice alt sistem.

Pe aceeași temă, citește și suveranitatea datelor: de ce contează unde sunt stocate și stocarea în cloud: unde stau de fapt fișierele tale.

Întrebări frecvente

Docker și containerul sunt același lucru?

Nu. Containerul este conceptul, iar Docker este una dintre cele mai cunoscute unelte care îl implementează. Există și alte programe care rulează containere compatibile.

Containerele sunt mai rapide decât mașinile virtuale?

La pornire, da, pentru că nu încarcă un sistem de operare. La viteza de execuție diferența este mică, deoarece ambele rulează aproape direct pe procesor.

Pot rula containere pe calculatorul de acasă?

Da, există programe gratuite pentru laptopuri. Sunt utile mai ales programatorilor, dar și celor care vor să încerce aplicații autogăzduite fără să le instaleze direct în sistem.

Ce se întâmplă cu datele dintr-un container când îl șterg?

Dacă nu le-ai salvat într-un volum separat, dispar odată cu containerul. De aceea datele importante se țin în afara lui, de exemplu într-o bază de date.

Un container poate rula mai multe aplicații?

Tehnic da, dar practica obișnuită este o singură aplicație pe container. Astfel poți actualiza, opri sau înlocui fiecare piesă separat.

↑