Evoluzione e componenti

Solomon

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

Macchine Virtuali

Contenitori: Virtualizzazione dell'Ambiente Operativo

  • Più efficienza
  • Meno manutenzione di sistema
  • Partenza molto più veloce
  • Migliaia di immagini disponibili, con documentazione

Contenitori

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

Tipi di contenitori

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.

UFS

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

Cgroups

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

Comp

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

Cliser

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.

Socket