VM o Docker?

Cumu capisce chì avete bisognu di Docker è micca una VM? Avete bisognu di definisce esattamente ciò chì vulete isolà. Se vulete isolà un sistema cù risorse garantite è hardware virtuale, allora a scelta deve falà nantu à a VM. Sè avete bisognu di isolà l'applicazioni in esecuzione cum'è prucessi di sistema separati, avete bisognu di Docker.

Allora chì hè a diffarenza trà cuntenituri Docker è VM?

Macchina virtuale (VM) hè un urdinatore virtuale cù tutti i dispositi virtuali è un discu duru virtuale, nantu à quale un novu OS indipendente hè stallatu cù i drivers di i dispositi virtuali, a gestione di a memoria è altri cumpunenti. Vale à dì, avemu una astrazione di hardware fisicu chì vi permette di eseguisce assai computer virtuale in un computer.
Una VM installata pò piglià spaziu di discu in diverse manere:

  • spaziu di discu duru fissu, chì permette un accessu più veloce à u discu duru virtuale è evita a frammentazione di u schedariu;
  • allocazione di memoria dinamica. Quandu si stallanu l'applicazioni supplementari, a memoria serà attribuita dinamicamente per elli finu à ch'ella ghjunghje à a quantità massima assignata.

A più macchine virtuale nantu à u servitore, u più spaziu occupanu, è ancu bisognu di u sustegnu constantu di l'ambiente necessariu per a vostra applicazione per travaglià.

Docker hè un software per custruisce applicazioni basate nantu à cuntenituri. I cuntenituri è e macchine virtuali anu benefici simili, ma travaglianu in modu diversu. I cuntenituri occupanu menu spaziu, perchè overuse più risorse spartute di u sistema di l'ospiti cà a VM, perchè a cuntrariu di VM, furnisce virtualizazione à u livellu di u SO, micca hardware. Stu approcciu furnisce menu impronta di memoria, implementazione più veloce è scala più faciule.

U cuntinuu furnisce un mecanismu più efficiente per l'incapsulazione di l'applicazioni furnisce l'interfacce necessarie à u sistema host. Questa funzione permette à i cuntenituri di sparte u core di u sistema, induve ognuna di i cuntenituri corre cum'è un prucessu separatu di u SO principale, chì hà u so propiu settore di zoni di memoria (u so propiu spaziu di indirizzu virtuale). Siccomu u spaziu d'indirizzu virtuale di ogni containeru hè u so propiu, i dati chì appartenenu à e diverse zoni di memoria ùn ponu esse cambiati.
U SO nativu per Docker hè Linux (Docker pò ancu esse usatu in Windows è MacOS), usa i so vantaghji principali, chì permettenu di urganizà un kernel split. U lanciamentu di cuntenituri Docker in Windows si farà in una macchina virtuale Linux, perchè i cuntenituri sparte u SO di u sistema di l'ospiti è u SO principale per elli hè Linux.

Container - cumu si travaglia?

Cuntinutu hè una astrazione à u livellu di l'applicazione chì combina codice è dipendenze. I cuntenituri sò sempre creati da l'imaghjini, aghjunghjendu una capa superiore scrivibile è inizializza diversi parametri. Perchè un containeru hà a so propria capa di scrittura è tutti i cambiamenti sò almacenati in quella capa, parechji cuntenituri ponu sparte l'accessu à a stessa maghjina maestra.

Ogni cuntinuu pò esse cunfiguratu attraversu un schedariu in u prughjettu docker-compose inclusu in a suluzione principale, docker-compose.yml. Quì pudete stabilisce diversi parametri cum'è u nome di u containeru, i porti, l'identificatori, i limiti di risorse, e dipendenze trà altri cuntenituri. Se ùn specificate micca un nome di cuntainer in i paràmetri, allora Docker creà un novu containeru ogni volta, assignendu un nome à l'aleatoriu.

Quandu un cuntinuu hè cuminciatu da una maghjina, Docker munta u sistema di filesystem di lettura / scrittura sopra à qualsiasi strati sottu. Questu hè induve tutti i prucessi chì vulemu chì u nostru containeru Docker currispondenu.

Quandu Docker principia prima un containeru, a capa iniziale di lettura / scrittura hè viota. Quandu i cambiamenti accadenu, sò appiicati à quella capa; per esempiu, sè vo vulete mudificà un schedariu, quellu schedariu serà copiatu da a capa di sola lettura sottu à a capa di lettura-scrittura.
A versione di sola lettura di u schedariu esisterà sempre, ma hè avà oculata sottu a copia. I volumi sò usati per almacenà e dati, indipendentemente da u ciclu di vita di u cuntinuu. I volumi sò inizializzati quandu un containeru hè creatu.

Cumu hè l'imaghjina assuciata cù u cuntinuu?

Image - l'elementu principale per ogni cuntinuu. L'imaghjina hè creata da un Dockerfile aghjuntu à u prugettu è hè un inseme di sistemi di schedari (layers) stratificati l'un à l'altru è raggruppati, dispunibuli solu per leghje; u numeru massimu di strati hè 127.

À u core di ogni maghjina hè una maghjina di basa, chì hè specificatu da u cumandimu FROM - u puntu di ingressu quandu genera una maghjina Dockerfile. Ogni capa hè una capa di sola lettura è hè rapprisintata da un cumandamentu unicu chì modifica u sistema di schedari, scrittu in un Dockerfile.
Per cumminà sti strati in una sola imaghjina, Docker usa u sistema di file Union Advanced multi-layered (AuFS hè custruitu nantu à UnionFS), chì permette à diversi fugliali è cartulari da diverse strati di schedari si sovrapponenu in modu trasparente, creendu un sistema di fugliale assuciatu.

I strati cuntenenu metadati chì vi permettenu di almacenà l'infurmazioni rilativi nantu à ogni strata in runtime è in tempu di creazione. Ogni capa cuntene un ligame à a capa successiva, se a capa ùn hà micca ligame, allora questu hè a capa più alta in l'imaghjini.

Dockerfile pò cuntene cumandamenti cum'è:

  • FROM - puntu di entrata in a furmazione di l'imaghjini;
  • MAINTENIR - u nome di u pruprietariu di l'imaghjini;
  • RUN - esecuzione di cumanda durante l'assemblea di l'imaghjini;
  • ADD - cupiendu u schedariu di l'ospitu à una nova maghjina, se specificate un schedariu URL, Docker u scaricarà in u cartulare specificatu;
  • ENV - variabili ambientali;
  • CMD - principia a creazione di un novu containeru basatu annantu à l'imaghjini;
  • ENTRYPOINT - U cumandimu hè eseguitu quandu u cuntinuu hè iniziatu.
  • WORKDIR hè u cartulare di travagliu per eseguisce u cumandamentu CMD.
  • USER - Definisce l'UID per u cuntinuu creatu da l'imaghjini.
  • VOLUME - Munta u repertoriu host à u containeru.
  • EXPOSE hè un inseme di porti ascoltati in u containeru.

Cumu funziona UnionFS?

UnionFS - Service Stack File System (FS) per Linux è FreeBSD. Questu FS implementa u mecanismu di copia in scrittura (Copy-On-Write, COW). L'unità di travagliu di UnionFS hè una strata, ogni strata deve esse cunsiderata cum'è un sistema di fugliale separatu cumpletu cù una ghjerarchia di repertoriu da a radica stessa. UnionFS crea una muntagna di unione per altri filesystems è vi permette di unisce in modu trasparente i fugliali è i cartulari da diversi filesystems (chjamati rami) in un unicu filesystem ligatu, in modu trasparente à l'utilizatore.

U cuntenutu di i cartulari cù i stessi percorsi seranu affissati inseme in un repertoriu cumminatu (in u stessu spaziu di nomi) di u sistema di fugliale resultanti.

UnionFS combina strati basati nantu à i seguenti principii:

  • unu di i strati diventa una strata di livellu più altu, u sicondu è i strati successivi diventanu strati di livellu più bassu;
  • l'uggetti di strati sò accessibili à l'utilizatore "da cima à fondu", i.e. se l'ughjettu dumandatu hè in a capa "superiura", hè tornatu, indipendentemente da a presenza di un oggettu cù u listessu nome in a capa "inferiore"; altrimenti, l'ughjettu di a capa "in fondu" hè tornatu; se l'ughjettu dumandatu ùn hè nè quì nè quì, l'errore "No such file or directory" hè tornatu;
  • a capa di travagliu hè a "top", vale à dì, tutte l'azzioni di l'utilizatori per cambià i dati sò riflesse solu nantu à a capa di livellu superiore, senza affettà u cuntenutu di i strati di livellu più bassu.

Docker hè a tecnulugia più cumuna per aduprà cuntenituri in u travagliu di l'applicazione. Hè diventatu u standard in questa zona, custruendu nantu à i cgroups è namespaces furniti da u kernel Linux.

Docker ci permette di implementà rapidamente l'applicazioni è di fà u megliu usu di u sistema di fugliali sparte u kernel OS trà tutti i cuntenituri, in esecuzione cum'è prucessi OS separati.

Source: www.habr.com

Add a comment