Architettura di Docker
Docker
- Ambiente di isolamento delle risorse necessarie ad un applicativo all'interno di un contenitore
- Da circa 2013, Solomon Hykes
- Contributo di Red Hat
- Richiede Linux a 64 bit Kernel 2.6+
- Licenza Apache (open)
- Scritto in Go
- Virtualizzazione entro il sistema operativo
- Direzione: software indipendente dal sistema operativo
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
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
Union File System
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.
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 - 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
Collegamento Locale
Il collegamento tra client e server avviene tramite un socket. In locale (default) questo è un socket Unix.
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
Tutti i contenitori sono mantenuti in un repository locale..