Annunciato per la prima volta nel 2013 a Santa Clara durante l’annuale conferenza per sviluppatori Python, Docker è diventato uno strumento maturo utilizzato da molti webmaster e sviluppatori per creare, testare e distribuire applicazioni più rapidamente.
I più famosi CMS come WordPress, Drupal e Joomla possono essere installati su Docker funzionante sul vostro PC, permettendovi di risparmiare tempo nello sviluppo e nelle fasi di prova ed evitando tutti gli inconvenienti che possono nascere invece con le virtualizzazioni.
Distribuzione più rapida del software, risparmio economico e trasferimenti ottimizzati sui siti di produzione sono solo alcuni dei vantaggi più evidenti dell'uso di Docker.
Ne parliamo con Mauro Cicolella, consulente IT, sviluppatore dall'esperienza decennale, che cura il canale Youtube EmmeCiLab dedicato all'Informatica e alla Matematica.
3. In principio era il "ferro"
www.emmecilab.net
dimensionate con una stima a priori
costi elevati
difficoltà a scalare (verticalmente)
difficoltà a replicare le configurazioni
tempi di ripristino lunghi in caso di guasti
spreco di risorse (spesso utilizzate in
minima percentuale)
assenza di isolamento tra le applicazioni
aka "bare metal"
Tutti i servizi e le applicazioni giravano
su macchine fisiche
4. Un sistema operativo (guest) in esecuzione
all'interno di un altro sistema operativo (host)
L'hardware fisico è accessibile al guest OS della
VM tramite uno strato software detto
hypervisor
Ciascuna VM vede l'hardware come se fosse a
sua completa disposizione (in realtà è condiviso)
Le VM possono comunicare tra loro e con l'host
solo se esplicitamente stabilito creando delle
apposite network
Consente il consolidamento dei server fisici
Virtualizzazione
www.emmecilab.net
Tanti "computer" su un solo hardware
https://www.researchgate.net/figure/illustration-of-the-concept-of-Virtualization-7_fig1_269636339
7. Vantaggi e svantaggi della virtualizzazione
Esecuzione SO differenti
Ogni macchina virtuale può eseguire un
sistema operativo diverso (anche da
quello dell'host)
Isolamento VM
Ciascuna macchina virtuale vive in
un proprio spazio e dispone di un
proprio sistema operativo
Emulazione varie CPU
L'emulazione può riguardare anche
diverse architetture hardware
www.emmecilab.net
Risorse ingenti
Per ogni applicazione isolata
occorre virtualizzare hardware e
sistema operativo
Numero esiguo di VM
Le macchine virtuali occupano molto
spazio per cui possono essere
ospitate in un numero ridotto per
disco
Prestazioni non al top
L'esecuzione di più sistemi operativi in
contemporanea limita le performance
rispetto ad un sistema tradizionale
(unico sistema operativo)
8. Docker
www.emmecilab.net
nasce principalmente per venire incontro agli
sviluppatori con la diffusione del modello a
microservizi
incapsula le applicazioni all'interno di
contenitori isolati detti "container"
i container possono convivere su una stessa
macchina (fisica o virtuale)
sfrutta le funzionalità di isolamento del kernel
Linux
i container sono isolati ma condividono lo
stesso kernel diversamente dalle macchine
virtuali
10. Impiego limitato di risorse
Non dovendo virtualizzare il SO
sono richieste minori risorse in
termini di RAM e CPU
Rapido avvio
Non è richiesto il boot di un
nuovo sistema operativo
rispetto a quello host
Portabilità
Le immagini Docker includono sia
l'applicazione che la relativa
configurazione semplificando la
portabilità su hardware differenti
Vantaggi di Docker
www.emmecilab.net
Leggerezza
Le immagini hanno dimensioni
ridotte perchè non si portano dietro
il fardello del sistema operativo
Scalabilità
E' possibile creare più container e
distribuirli su più nodi per garantire
affidabilità e bilanciamento del carico
Cross platform
Può girare su Windows, Linux e
macOS, ma anche su architetture
ARM (Raspberry &C)
11. Minore grado di isolamento
L'isolamento è minore rispetto alla
virtualizzazione per cui in certi ambiti
occorre utilizzare le VM
Dipendenza dal SO host
Data la condivisione i container
dipendono dal sistema operativo
installato sulla macchina
Rispetto architettura CPU
Occorre realizzare immagini
diverse per architetture differenti
(AMD, ARM ecc.)
C'è qualche svantaggio
www.emmecilab.net
Ma in genere il gioco vale la candela
13. Container
www.emmecilab.net
Ciò che effettivamente "gira" sul computer
istanza di un'immagine
copia identica dell'immagine (alla creazione)
dispone di un layer "scrivibile" (stato)
analogia con i concetti di classi e oggetti nella
OOP
il filesystem è "effimero" ovvero segue il ciclo
di vita del container (necessità di volumi)
può essere isolato o interagire in modo
controllato con altri container e con l'host
14. bind mounts (cartelle condivise sull'host)
si usano soprattutto in fase di sviluppo
modificabili da chiunque
Persistenza dei dati
www.emmecilab.net
I dati "importanti" non vanno mai memorizzati nel container
(database, documenti, media ecc.)
Salvataggio sull'host o filesystem di rete
volumi (gestiti direttamente da Docker in
un'area specifica del fs)
il loro ciclo di vita è indipendente da quello
dei container (vanno rimossi esplicitamente)
i volumi vanno dichiarati nel Dockerfile e
possono essere condivisi tra i container
15. Networking
www.emmecilab.net
i container sono isolati
di default non possono comunicare
è possibile esporre delle porte di rete per un
accesso controllato dall'esterno (saranno
accessibili solo tramite tali porte)
si possono definire delle network separate tra
di loro (la comunicazione è consentita solo tra
i container della network di appartenenza)
se necessario possono accedere a più
network
16. Dockerfile
www.emmecilab.net
"Programma" per la costruzione di immagini
Definisce la struttura dell'immagine
e i passi per realizzarla
FROM ubuntu:latest
RUN apt-get update && apt-get upgrade -y
RUN apt-get install nginx -y
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
Semplice file di testo che utilizza
un'opportuna sintassi
17. docker-compose.yml
docker-compose up
docker-compose build
docker-compose down
docker-compose
start/stop
Docker Compose
www.emmecilab.net
Gestire un'infrastruttura Docker con un file e qualche comando
Tool per definire una serie di container che devono essere
avviati contemporaneamente, presentano delle dipendenze e
necessitano o meno di network e volumi
18. file di testo in formato YAML
contiene delle proprietà
definisce i services (container)
definisce le network
espone le porte
definisce i volumi
definisce le variabili d'ambiente
stabilisce le dipendenze (ordine
di avvio)
imposta la politica di riavvio
docker-compose.yml
www.emmecilab.net
leggibilità
portabilità
dimensioni contenute
19. Un esempio vale più di mille parole
www.emmecilab.net
Installiamo WordPress
20. Sviluppare e rilasciare software tramite container
di Serena Sensini
Risorse utili
www.emmecilab.net
Canale YouTube EmmeCiLab
https://www.youtube.com/c/EmmeCiLab
Documentazione ufficiale
https://docs.docker.com/