Architettura di Docker

Docker

Hykes

  • 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

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

ufs

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

Compon

  • 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

Cliser

  • 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

Socket

Il collegamento tra client e server avviene tramite un socket. In locale (default) questo è un socket Unix.

Tipi di Contenitori

Tipicont

  • 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..