Evoluzione e componenti
Docker è un ambiente di isolamento delle risorse necessarie ad un applicativo all'interno di un contenitore
- Da circa 2013, ideato da Solomon Hykes
- Contributo di Red Hat
- Richiede Linux a 64 bit Kernel 2.6+
- Licenza Apache (open)
- Scritto in linguaggio Go
- Virtualizzazione entro il sistema operativo
- Direzione: software indipendente dal sistema operativo
Macchine Virtuali e Contenitori
Macchine Virtuali: Virtualizzazione dell'Hardware
- Più sistemi operativi diversi
- Più flessibile
- Più maturo
Contenitori: Virtualizzazione dell'Ambiente Operativo
- Più efficienza
- Meno manutenzione di sistema
- Partenza molto più veloce
- Migliaia di immagini disponibili, con documentazione
NB: Il Kernel è quello dello host Linux
Tipi di Contenitori
- Process container - l’ambiente di esecuzione di un processo principale e possibilmente altri processi
- Network container - fornisce connettività, indirizzamento e risoluzione nomi ai contenitori di processo
- Data container - mantiene i dati in volumi e li persiste quando i contenitori di processo non sono attivi
Tutte le immagini da cui derivano i contenitori sono mantenuti in un repository sul computer locale
Docker
Docker è scritto nel linguaggio di programmazione Go
Molti dei suoi comportamenti sono dovuti al linguaggio Go
E’ distribuito da docker.com (o docker.io)
Ne esistono due versioni:
- enterprise - a sottoscrizione di licenza
- community - gratuito ed Open Source
Docker si basa su features architettoniche di Linux:
- cgroups - supporto kernel all’isolamento processi
- Union File System - FS composto da layers
La docker.com supporta il prodotto solo su Linux
Il Linux di riferimento è Ubuntu
E’ in fase di sviluppo un Linux di riferimento specifico per Docker indipendente dalle distribuzioni correnti
Immagini
Un contenitore è l'istanza run-time di un'immagine.
Un'immagine è la combinazione di un certo numero, variabile a seconda della specifica immagine, di strati software (Layers), integrati all'interno di uno Union File System.
Cgroups
Un cgroup (control group) è una feature che limita, traccia ed isola l’uso di risorse di una collezione di processi.
I Cgroups sono una parte integrale del kernel Linux
Forniscono l’implementazione nel system space dei contenitori dello user space
Componenti di Docker
- Dockerfile: specifica dei componenti necessari. File testuale di specifiche
- Image: risultato della compilazione del docker file. Serie di layers in un repository locale o remoto
- Container: istanza di realizzazione di una image
Più containers della stessa image sono istanze separate e indipendenti
Client-Server
Docker segue l'architettura Client-Server. Vi sono un eseguinile client e due server.
docker - client, Command Line Interface. Interfaccia con l’utente tramite comandi shell
dockerd - high-level server, interagisce con il client. Implementa il comportamento di Docker
containerd - low-level server, gestisce i container. Usato anche con contenitori non Docker, p.es. Kubernetes
Il server è gestito come servizio standard di Linux e si può controllare con il comando amministrativo:
sudo systemctl azione docker
ove azione può essere:
- status - stato del servizio e processi attivi
- start - far partire il servizio
- stop - fermare il servizio
- enable - configurare lo start automatico al boot
- disable - disabilitare lo start automatico al boot
Due componenti del server:
- docker.service - il servizio
- docker.socket - il socket Unix di collegamento
Il collegamento tra client e server avviene tramite un socket. In locale (default) questo è un socket Unix.