Capisce Docker

Aghju utilizatu Docker per parechji mesi per strutturà u prucessu di sviluppu / consegna di prughjetti web. Offre à i lettori Habrakhabr una traduzzione di l'articulu introduttivu nantu à docker - "Capisce u docker".

Cosa hè docker?

Docker hè una piattaforma aperta per sviluppà, furnisce è operare applicazioni. Docker hè pensatu per furnisce e vostre applicazioni più rapidamente. Cù docker, pudete disaccoppià a vostra applicazione da a vostra infrastruttura è trattà l'infrastruttura cum'è una applicazione gestita. Docker vi aiuta à spedite u vostru codice più veloce, à pruvà più veloce, à spedite l'applicazioni più veloce è à riduce u tempu trà scrive u codice è u codice in esecuzione. Docker faci questu per mezu di una piattaforma di virtualizazione di cuntainer ligera, utilizendu prucessi è utilità chì vi aiutanu à gestisce è furnisce e vostre applicazioni.

À u so core, docker permette di eseguisce quasi ogni applicazione, isolata in modu sicuru in un containeru. L'isolazione sicura permette di eseguisce parechji cuntenituri nantu à u stessu òspite à u stessu tempu. A natura ligera di u cuntinuu, chì corre senza u pesu supplementu di un ipervisore, vi permette di ottene più di u vostru hardware.

A piattaforma è e strumenti di virtualizazione di u containeru ponu esse utili in i seguenti casi:

  • imballà a vostra applicazione (è i cumpunenti chì utilizate) in cuntenituri docker;
  • distribuzione è consegna di sti cuntenituri à i vostri squadre per u sviluppu è a prova;
  • mettendu sti cuntenituri in i vostri siti di produzzione, sia in centri di dati sia in i nuvuli.

Per chì possu aduprà docker?

Publicate rapidamente e vostre applicazioni

Docker hè grande per urganizà u ciculu di sviluppu. Docker permette à i sviluppatori di eseguisce cuntenituri lucali cù applicazioni è servizii. Chì sussegwentemente vi permette di integrà cù u prucessu di l'integrazione cuntinua è u flussu di travagliu di implementazione.

Per esempiu, i vostri sviluppatori scrivenu u codice in u locu è sparte a so pila di sviluppu (un set di imagine Docker) cù i culleghi. Quandu sò pronti, spinghjenu u codice è i cuntenituri à u situ di teste è eseguinu ogni teste necessariu. Da u situ di prova, ponu mandà u codice è l'imaghjini à a produzzione.

Piuttostu più faciule di stenderà è stenderà

A piattaforma basata in cuntainer docker facilita a portà a vostra carica. I cuntenituri Docker ponu eseguisce nantu à a vostra macchina lucale, sia reale sia in una macchina virtuale in un centru di dati, o in u nuvulu.

A portabilità è a natura ligera di docker facilita a gestione dinamica di a vostra carica di travagliu. Pudete aduprà docker per implementà o chjude a vostra applicazione o servizii. A velocità di docker permette di fà questu in quasi tempu reale.

Carichi più alti è più carichi utili

Docker hè ligeru è veloce. Fornisce un'alternativa resiliente è rentabile à e macchine virtuali basate in ipervisori. Hè soprattuttu utile in ambienti di carica alta, per esempiu, quandu creanu a vostra propria nuvola o piattaforma-as-service. Ma hè ancu utile per l'applicazioni chjuche è mediu quandu vulete ottene più di e risorse chì avete.

Componenti principali di Docker

Docker hè custituitu da dui cumpunenti principali:

  • Docker: una piattaforma di virtualizazione open source;
  • Docker Hub: A nostra piattaforma-as-a-service per a distribuzione è a gestione di cuntenituri Docker.

Nota ! Docker hè distribuitu sottu a licenza Apache 2.0.

L'architettura Docker

Docker usa una architettura client-server. U cliente Docker cumunicà cù u daemon Docker, chì assume a carica di creà, eseguisce è distribuisce i vostri cuntenituri. Sia u cliente è u servitore ponu esse in u stessu sistema, pudete cunnette u cliente à un daemon docker remoto. U cliente è u servitore cumunicanu via un socket o una API RESTful.

Capisce Docker

Demone Docker

Comu mostra in u diagramma, u daemon corre nantu à a macchina host. L'utilizatore ùn interagisce micca direttamente cù u servitore, ma usa u cliente per questu.

Client Docker

U cliente Docker, u prugramma docker, hè l'interfaccia principale per Docker. Riceve cumandamenti da l'utilizatore è interagisce cù u daemon docker.

Dentru docker

Per capisce ciò chì docker hè custituitu, avete bisognu di sapè di trè cumpunenti:

  • imagine
  • registru
  • cuntenenu

Images

L'imagine Docker hè un mudellu di sola lettura. Per esempiu, l'imaghjini pò cuntene u sistema operatore Ubuntu cù Apache è una applicazione nantu à questu. L'imaghjini sò usati per creà cuntenituri. Docker facilita a creazione di novi imaghjini, aghjurnà quelli esistenti, o pudete scaricà imaghjini creati da altre persone. L'imaghjini sò cumpunenti di un docker build.

U registru

U registru Docker guarda l'imaghjini. Ci sò registri publichi è privati ​​da quale pudete scaricà o caricate l'imaghjini. Un registru publicu Docker hè Hub Docker. Ci hè una grande cullizzioni d'imaghjini guardati quì. Comu sapete, l'imaghjini ponu esse creati da voi o pudete utilizà l'imaghjini creati da l'altri. I registri sò un cumpunente di distribuzione.

Contenidors

I cuntenituri sò simili à i cartulari. I contenitori cuntenenu tuttu ciò chì l'applicazione hà bisognu à eseguisce. Ogni cuntinuu hè creatu da una maghjina. I cuntenituri ponu esse creati, iniziati, firmati, migrati o sguassati. Ogni cuntainer hè isolatu è furnisce una piattaforma sicura per l'applicazione. I cuntenituri sò cumpunenti di u travagliu.

Allora cumu funziona Docker?

Finu à avà sapemu chì:

  • pudemu creà imagine in quale si trovanu e nostre applicazioni;
  • pudemu creà cuntenituri da l'imaghjini per eseguisce l'applicazioni;
  • Pudemu distribuisce l'imaghjini attraversu Docker Hub o un altru registru d'imaghjini.

Videmu cumu sti cumpunenti sò inseme.

Cumu funziona l'imaghjini?

Sapemu digià chì una maghjina hè un mudellu di sola lettura da quale hè creatu un containeru. Ogni imagine hè custituita da un inseme di livelli. Docker usa sistema di schedari unione per unisce questi livelli in una sola imagina. U sistema di schedari Union permette à i schedarii è i cartulari da diversi sistemi di schedarii (rami diversi) si sovrapponenu in modu trasparente, creendu un sistema di schedari coherente.

Unu di i mutivi per chì docker hè ligeru hè perchè usa strati cum'è questu. Quandu cambiate l'imaghjini, cum'è l'aghjurnamentu di una applicazione, una nova capa hè creata. Dunque, senza rimpiazzà tutta l'imaghjini o ricustruisce, cum'è pudete avè da fà cù una macchina virtuale, solu a capa hè aghjuntu o aghjurnata. È ùn hè micca bisognu di distribuisce tutta a nova maghjina, solu l'aghjurnamentu hè distribuitu, facendu più faciule è più veloce di distribuisce l'imaghjini.

À u core di ogni imagine hè una maghjina basica. Per esempiu, ubuntu, l'imaghjini di basa di Ubuntu, o fedora, l'imaghjini di basa di a distribuzione Fedora. Pudete ancu aduprà l'imaghjini cum'è una basa per creà novi imagine. Per esempiu, sè vo avete una maghjina apache, pudete aduprà cum'è una maghjina di basa per e vostre applicazioni web.

Nota ! Docker tipicamente tira l'imaghjini da u registru Docker Hub.

L'imaghjini di Docker ponu esse creati da queste imaghjini di basa; chjamemu i passi per creà queste struzzioni d'imaghjini. Ogni struzzione crea una nova imagina o livellu. L'istruzzioni seranu i seguenti:

  • esegui cumandamentu
  • aghjunghje un schedariu o cartulare
  • criendu una variabile d'ambiente
  • struzzioni nantu à ciò chì corre quandu u cuntinuu di sta maghjina hè lanciata

Queste struzzioni sò guardati in un schedariu Dockerfile. Docker leghje questu Dockerfile, quandu custruite l'imaghjini, eseguisce queste struzzioni è torna l'imaghjini finali.

Cumu funziona u registru docker?

U registru hè un repository per l'imaghjini docker. Una volta chì l'imaghjini hè creatu, pudete pubblicà in u registru publicu Docker Hub o in u vostru registru persunale.

Cù u cliente docker, pudete cercà l'imaghjini digià publicati è scaricate à a vostra macchina docker per creà cuntenituri.

Docker Hub furnisce repositori d'imaghjini publichi è privati. A ricerca è a scaricamentu di l'imaghjini da i repositori publichi hè dispunibule per tutti. U cuntenutu di i magazzini privati ​​ùn sò micca inclusi in i risultati di ricerca. È solu voi è i vostri utilizatori pudete riceve queste imagine è creà cuntenituri da elli.

Cumu funziona un containeru?

Un cuntinuu hè custituitu da un sistema operatore, schedarii d'utilizatori è metadati. Comu sapemu, ogni cuntinuu hè creatu da una maghjina. Questa maghjina dice à docker ciò chì hè in u cuntinuu, chì prucessu per inizià, quandu u cuntinuu principia, è altre dati di cunfigurazione. L'imaghjini di Docker hè di sola lettura. Quandu u docker principia un cuntinuu, crea una capa di lettura / scrittura in cima di l'imaghjini (aduprendu u sistema di fugliale di l'unione cum'è dichjaratu prima) in quale l'applicazione pò esse eseguita.

Chì succede quandu u cuntinuu principia?

O cù u prugramma docker, o utilizendu l'API RESTful, u cliente docker dice à u daemon docker per inizià u cuntinuu.

$ sudo docker run -i -t ubuntu /bin/bash

Fighjemu un ochju à stu cumandamentu. U cliente hè lanciatu cù u cumandimu docker, cù opzione run, chì dice chì un novu containeru serà lanciatu. I requisiti minimi per gestisce un containeru sò i seguenti attributi:

  • quale imagine aduprà per creà u cuntinuu. In u nostru casu ubuntu
  • u cumandamentu chì vulete eseguisce quandu u cuntinuu hè cuminciatu. In u nostru casu /bin/bash

Chì succede sottu à u cappucciu quandu eseguimu stu cumandamentu?

Docker, in ordine, face i seguenti:

  • scarica l'immagine ubuntu: docker verifica a dispunibilità di l'imaghjini ubuntu nantu à a macchina lucale, è s'ellu ùn hè micca quì, scaricallu da Hub Docker. Se ci hè una maghjina, l'utiliza per creà un cuntinuu;
  • crea un containeru: quandu l'imaghjini hè ricevutu, docker l'utiliza per creà un containeru;
  • inizializza u sistema di filesystem è monta u livellu di sola lettura: u cuntinuu hè creatu in u sistema di fugliale è l'imaghjini hè aghjuntu à u livellu di sola lettura;
  • inizializza a reta / ponte: crea una interfaccia di rete chì permette à docker di cumunicà cù a macchina host;
  • Stabbilimentu di l'indirizzu IP: trova è stabilisce l'indirizzu;
  • Accumincia u prucessu specificatu: lancia a vostra applicazione;
  • Prucessa è produce output da a vostra applicazione: cunnetta è registra l'input standard di a vostra applicazione, output, è u flussu d'errore in modu chì pudete seguità cumu funziona a vostra applicazione.

Avà avete un containeru di travagliu. Pudete gestisce u vostru containeru, interagisce cù a vostra applicazione. Quandu decide di piantà l'applicazione, sguassate u cuntinuu.

Tecnulugia aduprate

Docker hè scrittu in Go è usa alcune funzioni di u kernel Linux per implementà a funziunalità sopra.

Spazi di nomi

Docker usa a tecnulugia namespaces per urganizà spazii di travagliu isolati, chì chjamemu cuntenituri. Quandu avemu principiatu un containeru, docker crea un settore di spazii di nomi per quellu containeru.

Questu crea una capa isolata, cù ogni aspettu di u cuntinuu in u so propiu spaziu di nomi è ùn avè micca accessu à u sistema esternu.

Lista di certi spazii di nomi chì docker usa:

  • pid: per isolà u prucessu;
  • riti: per a gestione di l'interfaccia di rete;
  • ipc: per gestisce e risorse IPC. (ICP: Comunicazione InterProccess);
  • mnt: per gestisce i punti di muntagna;
  • utc: per isolà u kernel è a generazione di versione di cuntrollu (UTC: Unix timesharing system).

Gruppi di cuntrollu

Docker usa ancu a tecnulugia cgroups o gruppi di cuntrollu. A chjave per eseguisce una applicazione in isolamentu hè di furnisce l'applicazione cù solu e risorse chì vulete furnisce. Questu assicura chì i cuntenituri seranu boni vicini. I gruppi di cuntrollu permettenu di sparte e risorse hardware dispunibili è, se ne necessariu, stabiliscenu limiti è restrizioni. Per esempiu, limità a quantità pussibule di memoria per u cuntinuu.

Union File System

Union File Sysem o UnionFS hè un sistema di fugliale chì travaglia creendu strati, facendu assai ligere è veloce. Docker usa UnionFS per creà i blocchi da quale u cuntinuu hè custruitu. Docker pò aduprà parechje varianti di UnionFS cumpresi: AUFS, btrfs, vfs è DeviceMapper.

Formati di cuntainer

Docker combina questi cumpunenti in un wrapper chì chjamemu u formatu di cuntainer. U furmatu predeterminatu hè chjamatu libcontainer. Docker sustene ancu u formatu tradiziunale di cuntainer in Linux usendu LXC. In u futuru, Docker pò sustene altri formati di container. Per esempiu, integrazione cù BSD Jails o Solaris Zones.

Source: www.habr.com

Add a comment