Comprendere Docker

Utilizzo Docker ormai da diversi mesi per strutturare il processo di sviluppo/consegna di progetti web. Offro ai lettori di Habrakhabr una traduzione dell'articolo introduttivo su docker - "Informazioni sulla finestra mobile".

Cos'è Docker?

Docker è una piattaforma aperta per lo sviluppo, la distribuzione e il funzionamento di applicazioni. Docker è progettato per distribuire le tue applicazioni più velocemente. Con docker puoi disaccoppiare la tua applicazione dalla tua infrastruttura e trattare l'infrastruttura come un'applicazione gestita. Docker ti aiuta a spedire il tuo codice più velocemente, testare più velocemente, spedire le applicazioni più velocemente e ridurre il tempo che intercorre tra la scrittura del codice e l'esecuzione del codice. Docker lo fa attraverso una piattaforma di virtualizzazione dei contenitori leggera, utilizzando processi e utilità che ti aiutano a gestire e ospitare le tue applicazioni.

Fondamentalmente, la finestra mobile consente di eseguire quasi tutte le applicazioni, isolate in modo sicuro in un contenitore. L'isolamento sicuro consente di eseguire più contenitori contemporaneamente sullo stesso host. La natura leggera del contenitore, che funziona senza il peso aggiuntivo di un hypervisor, ti consente di ottenere di più dal tuo hardware.

La piattaforma e gli strumenti di virtualizzazione dei container possono essere utili nei seguenti casi:

  • confezionare la tua applicazione (e i componenti che usi) in contenitori docker;
  • distribuzione e consegna di questi contenitori ai vostri team per lo sviluppo e il test;
  • disponendo questi contenitori nei vostri siti di produzione, sia nei data center che nel cloud.

Per cosa posso usare la finestra mobile?

Pubblica rapidamente le tue applicazioni

Docker è ottimo per organizzare il ciclo di sviluppo. Docker consente agli sviluppatori di eseguire contenitori locali con applicazioni e servizi. Che successivamente consente di integrarsi con il processo di integrazione continua e flusso di lavoro di distribuzione.

Ad esempio, i tuoi sviluppatori scrivono codice localmente e condividono il loro stack di sviluppo (un set di immagini Docker) con i colleghi. Quando sono pronti, inseriscono il codice e i contenitori nel sito di test ed eseguono tutti i test necessari. Dal sito di test possono inviare codice e immagini alla produzione.

Disposizione e apertura più facili

La piattaforma basata su container docker semplifica il trasferimento del carico utile. I contenitori Docker possono essere eseguiti sulla tua macchina locale, reale o virtuale in un data center o nel cloud.

La portabilità e la leggerezza della finestra mobile facilitano la gestione dinamica del carico di lavoro. Puoi utilizzare la finestra mobile per distribuire o arrestare l'applicazione o i servizi. La velocità del docker consente di eseguire questa operazione quasi in tempo reale.

Carichi più elevati e più carichi utili

Docker è leggero e veloce. Fornisce un'alternativa resiliente ed economica alle macchine virtuali basate su hypervisor. È particolarmente utile in ambienti con carico elevato, ad esempio quando si crea il proprio cloud o piattaforma come servizio. Ma è utile anche per applicazioni di piccole e medie dimensioni quando vuoi ottenere di più dalle risorse di cui disponi.

Componenti principali della finestra mobile

Docker è costituito da due componenti principali:

  • Docker: una piattaforma di virtualizzazione open source;
  • Docker Hub: la nostra piattaforma come servizio per la distribuzione e la gestione dei contenitori Docker.

Nota! Docker è distribuito con la licenza Apache 2.0.

Architettura Docker

Docker utilizza un'architettura client-server. Il client Docker comunica con il daemon Docker, che si assume l'onere di creare, eseguire e distribuire i contenitori. Sia il client che il server possono essere eseguiti sullo stesso sistema, è possibile connettere il client a un demone docker remoto. Il client e il server comunicano tramite un socket o un'API RESTful.

Comprendere Docker

Demone Docker

Come mostrato nel diagramma, il demone viene eseguito sul computer host. L'utente non interagisce direttamente con il server, ma utilizza a questo scopo il client.

Cliente Docker

Il client Docker, il programma docker, è l'interfaccia principale di Docker. Riceve comandi dall'utente e interagisce con il demone docker.

Finestra mobile interna

Per capire in cosa consiste la finestra mobile, è necessario conoscere tre componenti:

  • immagini
  • registro
  • contenitori

immagini

L'immagine Docker è un modello di sola lettura. Ad esempio, l'immagine può contenere il sistema operativo Ubuntu con Apache e un'applicazione su di esso. Le immagini vengono utilizzate per creare contenitori. Docker semplifica la creazione di nuove immagini, l'aggiornamento di quelle esistenti oppure il download di immagini create da altre persone. Le immagini sono componenti di una build docker.

Registro

Il registro Docker memorizza le immagini. Esistono registri pubblici e privati ​​da cui è possibile scaricare o caricare immagini. Un registro Docker pubblico lo è Hub Docker. C'è una vasta collezione di immagini archiviate lì. Come sai, le immagini possono essere create da te oppure puoi utilizzare immagini create da altri. I registri sono un componente della distribuzione.

contenitori

I contenitori sono simili alle directory. I contenitori contengono tutto ciò di cui l'applicazione ha bisogno per essere eseguita. Ogni contenitore viene creato da un'immagine. I contenitori possono essere creati, avviati, arrestati, migrati o eliminati. Ogni contenitore è isolato e fornisce una piattaforma sicura per l'applicazione. I contenitori sono componenti dell’opera.

Allora come funziona Docker?

Finora sappiamo che:

  • possiamo creare immagini in cui si trovano le nostre applicazioni;
  • possiamo creare contenitori da immagini per eseguire applicazioni;
  • Possiamo distribuire immagini tramite Docker Hub o un altro registro di immagini.

Vediamo come questi componenti si incastrano.

Come funziona l'immagine?

Sappiamo già che un'immagine è un modello di sola lettura da cui viene creato un contenitore. Ogni immagine è composta da una serie di livelli. Docker utilizza file system di unione per combinare questi livelli in un'unica immagine. Il file system di unione consente a file e directory di diversi file system (diversi rami) di sovrapporsi in modo trasparente, creando un file system coerente.

Uno dei motivi per cui la finestra mobile è leggera è perché utilizza livelli come questo. Quando modifichi l'immagine, ad esempio aggiornando un'applicazione, viene creato un nuovo livello. Quindi, senza sostituire l'intera immagine o ricostruirla, come potresti dover fare con una macchina virtuale, viene aggiunto o aggiornato solo il livello. E non devi distribuire l'intera nuova immagine, viene distribuito solo l'aggiornamento, rendendo più semplice e veloce la distribuzione delle immagini.

Al centro di ogni immagine c'è un'immagine di base. Ad esempio, Ubuntu, l'immagine di base di Ubuntu, o Fedora, l'immagine di base della distribuzione Fedora. Puoi anche utilizzare le immagini come base per creare nuove immagini. Ad esempio, se disponi di un'immagine Apache, puoi utilizzarla come immagine di base per le tue applicazioni web.

Nota! Docker in genere estrae immagini dal registro Docker Hub.

Le immagini Docker possono essere create da queste immagini di base; chiamiamo istruzioni per creare queste immagini. Ogni istruzione crea una nuova immagine o livello. Le istruzioni saranno le seguenti:

  • eseguire il comando
  • aggiungendo un file o una directory
  • creando una variabile d'ambiente
  • istruzioni su cosa eseguire quando viene avviato il contenitore di questa immagine

Queste istruzioni sono memorizzate in un file Dockerfile. Docker lo legge Dockerfile, quando crei l'immagine, esegue queste istruzioni e restituisce l'immagine finale.

Come funziona il registro del docker?

Il registro è un repository per le immagini docker. Una volta creata l'immagine, puoi pubblicarla nel registro pubblico di Docker Hub o nel tuo registro personale.

Con il client docker puoi cercare immagini già pubblicate e scaricarle sulla tua macchina docker per creare contenitori.

Docker Hub fornisce repository di immagini pubbliche e private. La ricerca e il download di immagini da archivi pubblici è disponibile per tutti. I contenuti degli archivi privati ​​non sono inclusi nei risultati della ricerca. E solo tu e i tuoi utenti potete ricevere queste immagini e creare contenitori da esse.

Come funziona un contenitore?

Un contenitore è costituito da un sistema operativo, file utente e metadati. Come sappiamo, ogni contenitore viene creato da un'immagine. Questa immagine indica alla finestra mobile cosa c'è nel contenitore, quale processo avviare, quando viene avviato il contenitore e altri dati di configurazione. L'immagine Docker è di sola lettura. Quando la finestra mobile avvia un contenitore, crea un livello di lettura/scrittura sopra l'immagine (utilizzando il file system union come indicato in precedenza) in cui è possibile eseguire l'applicazione.

Cosa succede quando si avvia il contenitore?

Oppure utilizzando il programma dockero utilizzando l'API RESTful, il client docker indica al daemon docker di avviare il contenitore.

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

Diamo un'occhiata a questo comando. Il client viene avviato utilizzando il comando docker, con opzione run, che dice che verrà lanciato un nuovo container. I requisiti minimi per eseguire un contenitore sono i seguenti attributi:

  • quale immagine utilizzare per creare il contenitore. Nel nostro caso ubuntu
  • il comando che desideri eseguire all'avvio del contenitore. Nel nostro caso /bin/bash

Cosa succede dietro le quinte quando eseguiamo questo comando?

Docker, in ordine, fa quanto segue:

  • scarica l'immagine di Ubuntu: la finestra mobile controlla la disponibilità delle immagini ubuntu sul computer locale e, se non è presente, scaricalo da Hub Docker. Se c'è un'immagine, la usa per creare un contenitore;
  • crea un contenitore: quando l'immagine viene ricevuta, la finestra mobile la utilizza per creare un contenitore;
  • inizializza il filesystem e monta il livello di sola lettura: il contenitore viene creato nel file system e l'immagine viene aggiunta al livello di sola lettura;
  • inizializza la rete/bridge: crea un'interfaccia di rete che consente alla finestra mobile di comunicare con la macchina host;
  • Impostazione dell'indirizzo IP: trova e imposta l'indirizzo;
  • Avvia il processo specificato: avvia la tua applicazione;
  • Elabora e produce output dall'applicazione: connette e registra l'input, l'output e il flusso di errori standard dell'applicazione in modo da poter monitorare le prestazioni dell'applicazione.

Ora hai un contenitore funzionante. Puoi gestire il tuo contenitore, interagire con la tua applicazione. Quando decidi di interrompere l'applicazione, elimina il contenitore.

Tecnologie utilizzate

Docker è scritto in Go e utilizza alcune funzionalità del kernel Linux per implementare le funzionalità di cui sopra.

Spazi dei nomi

Docker utilizza la tecnologia namespaces per organizzare spazi di lavoro isolati, che chiamiamo contenitori. Quando avviamo un contenitore, la finestra mobile crea un set di spazi dei nomi per quel contenitore.

Ciò crea un livello isolato, con ogni aspetto del contenitore in esecuzione nel proprio spazio dei nomi e senza accesso al sistema esterno.

Elenco di alcuni spazi dei nomi utilizzati da Docker:

  • pid: isolare il processo;
  • netto: per la gestione delle interfacce di rete;
  • ipc: per gestire le risorse IPC. (ICP: comunicazione interprocesso);
  • mnt: gestire i punti di montaggio;
  • utc: per isolare il kernel e controllare la generazione della versione (UTC: sistema di timesharing Unix).

Gruppi di controllo

Docker utilizza anche la tecnologia cgroups o gruppi di controllo. La chiave per eseguire un'applicazione in modo isolato è fornire all'applicazione solo le risorse che desideri fornire. Ciò garantisce che i contenitori siano buoni vicini. I gruppi di controllo consentono di condividere le risorse hardware disponibili e, se necessario, impostare limiti e restrizioni. Limitare, ad esempio, la possibile quantità di memoria per il contenitore.

File system dell'Unione

Union File Sysem o UnionFS è un file system che funziona creando livelli, rendendolo molto leggero e veloce. Docker utilizza UnionFS per creare i blocchi da cui viene costruito il contenitore. Docker può utilizzare diverse varianti di UnionFS tra cui: AUFS, btrfs, vfs e DeviceMapper.

Formati contenitore

Docker combina questi componenti in un wrapper che chiamiamo formato contenitore. Viene chiamato il formato predefinito libcontainer. Docker supporta anche il tradizionale formato contenitore su Linux utilizzando LXC. In futuro, Docker potrebbe supportare altri formati contenitore. Ad esempio, l'integrazione con BSD Jails o Solaris Zones.

Fonte: habr.com

Aggiungi un commento