Să explorăm structura Docker și elementele sale fundamentale.
Se presupune că aveți cunoștințe de bază despre Docker. Dacă nu, vă recomand să consultați un articol introductiv pe această temă.
Probabil înțelegeți importanța Docker în fluxul de lucru DevOps. În spatele acestui instrument puternic, se află o arhitectură complexă și bine concepută, nu-i așa?
Dar înainte de a discuta despre aceasta, haideți să aruncăm o privire asupra sistemelor de virtualizare anterioare și actuale.
Virtualizarea tradițională versus noua generație
În trecut, se foloseau mașini virtuale (VM), fiecare necesitând un sistem de operare separat, ceea ce ocupa mult spațiu și complica gestionarea lor.
Acum, cu containerele Docker, se utilizează un singur sistem de operare, iar resursele sunt partajate între containere. Astfel, acestea sunt mai ușoare și se lansează rapid.
Structura Docker
Mai jos este prezentată o diagramă simplificată a arhitecturii Docker.
Permiteți-mi să vă explic componentele unei arhitecturi Docker.
Motorul Docker
Este componenta centrală a întregului ecosistem Docker. Motorul Docker este o aplicație care urmează un model client-server. Este instalat pe mașina gazdă. Motorul Docker este compus din trei părți:
- Server: este demonul Docker, numit dockerd. Acesta este responsabil pentru crearea și gestionarea imaginilor, containerelor, rețelelor etc.
- API REST: este utilizat pentru a comunica cu demonul Docker și a-i indica acțiunile de efectuat.
- Interfață de linie de comandă (CLI): este un client care permite introducerea comenzilor Docker.
Clientul Docker
Utilizatorii Docker interacționează cu sistemul prin intermediul clientului Docker. Atunci când sunt executate comenzi Docker, clientul le transmite demonului dockerd, care le procesează. Comenzile Docker utilizează API-ul Docker. Clientul Docker poate interacționa cu mai mulți demoni.
Registre Docker
Acestea sunt locațiile unde sunt stocate imaginile Docker. Pot fi registre publice sau private. Docker Hub este registrul public implicit unde sunt găzduite majoritatea imaginilor Docker. De asemenea, aveți posibilitatea de a crea și administra propriul registru privat.
Atunci când executați comenzi precum `docker pull` sau `docker run`, imaginea Docker necesară este descărcată din registrul configurat. Comanda `docker push` este utilizată pentru a încărca o imagine Docker în registrul configurat.
Obiecte Docker
În Docker, veți utiliza imagini, containere, volume și rețele, toate fiind considerate obiecte Docker.
Imagini
Imaginile Docker sunt șabloane doar în citire, care conțin instrucțiunile necesare pentru crearea unui container Docker. O imagine poate fi preluată dintr-un registru Docker și utilizată ca atare, sau se pot adăuga instrucțiuni suplimentare la o imagine de bază pentru a crea o imagine personalizată. Se pot construi imagini Docker folosind un fișier Docker. Acesta este un fișier care specifică instrucțiunile necesare pentru crearea și lansarea unui container, generând astfel o imagine Docker personalizată.
O imagine Docker are un strat de bază doar în citire și un strat superior care permite scrierea. Când editați un fișier Docker și reconstruiți imaginea, doar porțiunea modificată este reconstruită în stratul superior.
Containere
Când o imagine Docker este lansată, se creează un container Docker. Aplicațiile și mediul lor de execuție rulează în interiorul acestui container. Puteți folosi API-ul Docker sau CLI-ul pentru a porni, opri sau șterge containere Docker.
Mai jos este un exemplu de comandă pentru a lansa un container Ubuntu:
docker run -i -t ubuntu /bin/bash
Volumele
Datele persistente generate de Docker și folosite de containerele Docker sunt stocate în volume. Acestea sunt gestionate complet de Docker prin CLI-ul sau API-ul Docker. Volumele sunt compatibile atât cu containerele Windows, cât și cu cele Linux. În loc să stocați datele în stratul de scriere al unui container, este recomandat să utilizați volume. Conținutul volumului persistă independent de ciclul de viață al unui container, astfel utilizarea volumelor nu mărește dimensiunea containerului.
Puteți folosi flag-ul `-v` sau `–mount` pentru a lansa un container cu un volum. În exemplul de comandă de mai jos, se utilizează volumul `geekvolume` cu containerul `tipstrick.ro`.
docker run -d --name tipstrick.ro -v geekvolume:/app nginx:latest
Rețele
Rețelele Docker oferă o cale de comunicare între containerele izolate. Există cinci drivere de rețea principale în Docker:
- Bridge: este driverul de rețea implicit pentru containere. Utilizați această rețea când aplicația dvs. rulează în containere independente care comunică pe aceeași mașină gazdă.
- Host: acest driver elimină izolarea rețelei între containerele Docker și mașina gazdă. Se folosește atunci când nu aveți nevoie de izolare rețea între gazdă și container.
- Overlay: această rețea permite serviciilor Swarm să comunice între ele. Se folosește când containerele rulează pe gazde Docker diferite sau când serviciile Swarm sunt formate din mai multe aplicații.
- None: acest driver dezactivează conexiunile la rețea.
- Macvlan: acest driver atribuie adrese MAC containerelor, făcându-le să apară ca dispozitive fizice. Traficul este direcționat între containere prin adresele MAC. Această rețea este utilă când doriți ca containerele să arate ca dispozitive fizice, de exemplu, în timpul migrării dintr-o configurație de VM.
Concluzie
Sper că acest articol v-a oferit o imagine clară asupra arhitecturii Docker și a componentelor sale cheie. Vă încurajez să explorați mai departe Docker pentru a aprofunda cunoștințele și, dacă sunteți interesat de training practic, vă recomand acest curs Docker Mastery.
V-a plăcut articolul? Nu ezitați să îl împărtășiți cu alții!