This is an old revision of the document!


Cursul 04 - Docker

Containere

Conceptul de container nu este unul nou, în mediul Linux având mai multe implementări. Printre primele este cunoscutul chroot(), ce permite unui proces să ruleze într-un mediu izolat, practic în propriul sistem de fișiere izolat. Un alt tip de container cunoscut este LXC, prescurtare de la LinuX Containers, și permite rularea unui întreg sistem de operare într-un container, ceea ce presupune o asemănare cu mașinile virtuale adevărate: se pot instala pachete software, se pot realiza operații de actualizare, se pot modifica configurații.

Mașini virtuale vs Containere

Există deseori o confuzie între containere și mașini virtuale, dar trebuie remarcat că ele sunt două concepte diferite. Un container nu are niciun program de emulare pentru componente hardware, precum are o mașină virtuală și este văzut ca un simplu proces. Spre deosebire, mașina virtuală conține un întreg sistem de operare incluzând procesoare virtuale, interfețe de rețea și presupune implicit un consum foarte mare de resurse, de aceea se evidențiază și diferența considerabilă de dimensiune între cele două. O diferență derivată din dimensiune este portabilitatea: implicit containerele pot fi migrate ușor pe orice platformă compatibilă (spre exemplu: orice Linux capabil să ruleze Docker). În final, un container nu reprezintă altceva decât un proces sau un grup de procese pe o mașină gazdă, care consideră că rulează pe propria mașină separată. Mașina gazdă știe că un container este de fapt un proces, dar containerul crede că el este o mașină separată în sine.

Docker

Conform documentației oficiale, Docker este o platformă pentru dezvoltare, livrare și rulare de aplicații. Containerele sunt:

  • efemere
  • de dimensiune redusă
  • specializate

Efemere înseamnă ca toate datele generate în cadrul rulării acelui container vor fi pierdute atunci când el nu mai există. Containerele sunt specializate pentru un singur scop specific în general, spre exemplu: rularea unei aplicații Java, rularea de teste automate, mediu de debug cu unelte specifice(nmap, tshark). Astfel un container va conține doar minimul necesar de pachete software, rezultând o dimensiune redusă.

Docker are în componență mai multe unelte: serviciul daemon ce rulează pe sistemul de operare gazdă, clientul cu interfață în linie de comandă, și un registru ce stochează imaginile Docker, dar acest registru este extern. Clientul se conectează la API-ul Docker ce rulează în cadrul serviciului daemon.

  1. Imagini Docker

Orice container Docker este pornit dintr-o imagine Docker. O imagine este echivalentă cu o instantanee a unei instanțe de mașină virtuală. Ea reprezintă un șablon read-only alcătuit dintr-un set de straturi. O imagine poate fi folosită de mai multe containere în paralel, dar nu va suferi nicio modificare în urma creării oricărui container pe baza acesteia. Este important de menționat că la crearea unui container se adaugă un nou strat la imaginea sursă, un strat ce poate fi scris și aparține exclusiv unui singur container. Prin faptul că toate operațiile din interiorul containerului se efectuează în acel strat propriu se explică păstrarea stării imaginii Docker.

Se poate construi o imagine Docker folosind un fișier numit Dockerfile, în care se descrie cum trebuie să arate imaginea: din ce imagine de bază pornește, ce fișiere sunt adăugate în interiorul său, ce pachete se doresc a fi instalate, etc. Detalii despre sintaxa unui astfel de fișier se pot obține consultând documentația oficială Docker, dar un exemplu succint este următorul:

       FROM ubuntu:20.04 
       COPY . /opt/devops-summer-school/ 
       WORKDIR /opt/devops-summer-school
       ENV http_proxy="http://10.220.72.89:8000"
       RUN apt-get update && apt install -y diffstat tshark
       EXPOSE 8163
       CMD [ "/bin/bash" ]
devops/cursuri/04.1626886504.txt.gz · Last modified: 2021/07/21 19:55 by oana.minciu.th
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0