6.1 Immagini (Images)
Per lavorare efficacemente con Docker, dobbiamo capire alcuni termini chiave: immagini, container
e registri
. Vediamoli insieme per capire a cosa servono e come interagiscono fra di loro.
Immagine Docker — è un template da cui vengono creati i container. Un'immagine contiene tutti i componenti necessari per eseguire un'applicazione: il sistema operativo, l'applicazione, librerie e dipendenze, così come i file di configurazione. Facendo un'analogia con l'OOP: l'immagine Docker è una classe, mentre il container è un'istanza di quella classe. Le immagini vengono create tramite un Dockerfile — un file di testo che descrive i passi per creare un'immagine.
Caratteristiche principali delle immagini:
- Struttura a strati: le immagini sono composte da diversi strati. C'è uno strato base e ogni nuovo strato rappresenta una modifica rispetto al precedente. Questo permette di risparmiare spazio e ridurre i tempi di caricamento.
- Riutilizzabilità: la stessa immagine può essere utilizzata per creare molti container.
- Portabilità: le immagini possono essere trasferite tra diversi sistemi, rendendole ideali per lo sviluppo, il test e il deployment delle applicazioni in ambienti differenti.
Esempi di utilizzo delle immagini:
Creazione di un'immagine personalizzata: puoi creare la tua immagine scrivendo un Dockerfile, dove specifichi le configurazioni della tua applicazione e le sue dipendenze.
FROM ubuntu:latest
RUN apt-get update && apt-get install -y python3
COPY . /app
CMD ["python3", "/app/app.py"]
Utilizzo di un'immagine già pronta: puoi usare immagini disponibili su Docker Hub per avviare rapidamente applicazioni standard, come web server o database.
docker pull nginx
Questo comando scarica l'immagine nginx dal registro pubblico Docker Hub.
6.2 Contenitori (Containers)
Un contenitore Docker è un'istanza in esecuzione di un'immagine. I contenitori isolano le applicazioni e le loro dipendenze in un ambiente di esecuzione separato, permettendo loro di funzionare indipendentemente dal sistema host e da altri contenitori. I contenitori sono leggeri, poiché utilizzano il kernel del sistema operativo host invece di creare un kernel separato, come fanno le macchine virtuali.
Caratteristiche principali dei contenitori:
- Isolamento: i contenitori isolano le applicazioni, garantendo il loro funzionamento indipendente e prevenendo i conflitti di dipendenze.
- Leggerezza: i contenitori consumano meno risorse rispetto alle macchine virtuali, poiché non richiedono un sistema operativo separato.
- Avvio rapido: i contenitori si avviano e si fermano molto più rapidamente rispetto alle macchine virtuali, rendendoli ideali per ambienti dinamici e scalabilità.
Esempi di utilizzo dei contenitori:
Avvio di un contenitore: puoi avviare un contenitore da un'immagine usando il comando docker run.
docker run -d -p 80:80 --name mynginx nginx
Gestione dei contenitori: Docker fornisce comandi per la gestione dei contenitori: start, stop, restart, rm ed exec.
docker stop mynginx
docker rm mynginx
Scoprirete tutti i comandi e i loro parametri nelle prossime lezioni.
6.3 Registri (Registries)
Registro Docker — è uno storage per immagini Docker. I registri permettono a sviluppatori e organizzazioni di salvare, gestire e distribuire immagini di container. Esistono registri pubblici e registri privati.
Caratteristiche principali dei registri:
- Registri pubblici: come Docker Hub, offrono accesso a una moltitudine di immagini create dalla community e dagli sviluppatori ufficiali.
- Registri privati: vengono utilizzati per salvare e gestire immagini all’interno di un’organizzazione, garantendo controllo degli accessi e sicurezza.
- Integrazione con CI/CD: i registri si integrano facilmente con sistemi di continuous integration e deployment, automatizzando il processo di creazione e distribuzione delle immagini.
Esempi di utilizzo dei registri:
1. Docker Hub: il registro pubblico (e il più popolare) di immagini Docker. Fornisce accesso a molte immagini pronte all’uso (e spesso testate, come si può vedere dalle statistiche di download).
docker pull nginx
docker push myusername/myimage:tag
2. Registro privato: puoi configurare e utilizzare un registro proprio usando Docker Registry.
docker run -d -p 5000:5000 --name registry registry:2
docker tag myimage localhost:5000/myimage
docker push localhost:5000/myimage
Interazione tra immagini, container e registri
Questi tre componenti sono strettamente collegati e costituiscono la base del lavoro con Docker:
- Creazione dell'immagine: lo sviluppatore crea un’immagine con Dockerfile e la salva localmente.
- Caricamento dell'immagine nel registro: l’immagine viene caricata in un registro (ad esempio, Docker Hub o registro privato), dove viene salvata e resa disponibile per altri utenti o sistemi.
- Esecuzione del container: l’utente scarica l’immagine dal registro e avvia un container, che isola l’applicazione e ne garantisce l’esecuzione.
6.4 Orchestrazione (Orchestration)
Orchestrazione — è il processo di gestione di molti container in un ambiente distribuito. Gli strumenti di orchestrazione aiutano ad automatizzare il deployment, il scaling e la gestione dei container.
- Kubernetes: la piattaforma di orchestrazione container più popolare, che permette di gestire un cluster di container su diversi nodi.
- Docker Swarm: una piattaforma di orchestrazione integrata in Docker per creare e gestire cluster Docker.
- Funzioni di orchestrazione: scaling automatico, autoriparazione, gestione delle reti e bilanciamento del carico.
6.5 Reti (Networks)
Le reti in Docker permettono ai container di interagire tra di loro e con il mondo esterno. Docker offre diversi tipi di reti per vari scenari di utilizzo.
- Bridge: la rete predefinita creata da Docker. I container nella rete bridge possono interagire tra di loro.
- Host: il container utilizza le interfacce di rete della macchina host, ottenendo accesso diretto ad esse.
- Overlay: viene utilizzata per creare reti tra diversi demoni Docker. Necessaria per l'orchestrazione.
- None: disabilita tutte le interfacce di rete del container. Utile per compiti isolati.
6.6 Volumi (Volumes)
I volumi (Volumes) sono un meccanismo per la memorizzazione persistente dei dati dei container. Permettono di salvare i dati al di fuori del container, così che le informazioni non vadano perse durante un riavvio o eliminazione del container.
- Creazione di un volume: i volumi vengono creati usando il comando docker volume create.
- Montaggio di un volume: i volumi vengono collegati ai container tramite il flag
-v
durante l'avvio. - Vantaggi: i volumi offrono un metodo comodo per salvare e scambiare dati tra i container, oltre a una migliore performance rispetto alle directory associate (bind mounts).
Importante!
Un volume è come un disco rigido virtuale che si può collegare a una macchina virtuale o a un container. Di solito è memorizzato nel sistema operativo host come un normale file.
GO TO FULL VERSION