🐳 Docker
Docker è una piattaforma per l’esecuzione di applicazioni in container isolati. Questo cheat sheet contiene comandi per lavorare con immagini, container, reti, volumi, oltre a Docker Compose e Swarm.
📦 Comandi di base
| Comando | Esempio | Descrizione | 
|---|---|---|
| docker | Il comando principale della CLI Docker usato per eseguire sottocomandi e gestire container, immagini, reti e volumi | |
| docker version | Mostra la versione di Docker installata (client e server). Utile per la verifica dell’installazione | |
| docker version --format '{{.Client.APIVersion}}' | Mostra solo la versione API del client Docker | |
| docker version --format '{{.Server.Version}}' | Mostra solo la versione del server Docker (Engine) | |
| docker version --format '{{json .}}' | Mostra le informazioni complete sulla versione in formato JSON | |
| docker system info | Mostra informazioni generali sul sistema Docker: numero di container, immagini, risorse | |
| docker info | Mostra dati Docker: versioni, reti, numero di container e immagini | |
| docker info --format '{{json .}}' | Mostra info in formato JSON — utile per l’automazione | |
| docker info --format '{{.NCPU}} CPUs, {{.MemTotal}} bytes RAM' | Mostra numero di CPU e memoria totale | |
| docker info --format '{{.Driver}}' | Mostra il driver di storage utilizzato da Docker | |
| docker image pull | Scarica un’immagine da Docker Hub o da un altro registry. I container non possono essere eseguiti senza immagini | |
| docker pull ubuntu | Scarica l’ultima immagine disponibile di Ubuntu | |
| docker pull nginx:alpine | Scarica l’immagine leggera di Nginx basata su Alpine Linux | |
| docker pull redis:7 | Scarica l’immagine di Redis versione 7 | |
| docker container run | Crea ed esegui un nuovo container da un’immagine | |
| docker run -it ubuntu bash | Esegui Ubuntu con un terminale Bash interattivo | |
| docker run -d nginx | Esegui Nginx in modalità detached (in background) | |
| docker run -p 8080:80 nginx | Esegui Nginx e collega la porta 80 del container alla porta 8080 dell’host | |
| docker container ls | Elenca i container in esecuzione | |
| docker ps | Mostra solo i container in esecuzione | |
| docker ps -a | Mostra tutti i container, inclusi quelli fermati | |
| docker ps --format '{{.Names}}' | Mostra solo i nomi dei container | |
| docker container start | Avvia uno o più container fermati | |
| docker start container_name | Avvia un container per nome | |
| docker start $(docker ps -aq) | Avvia tutti i container | |
| docker start -ai container_name | Avvia un container e collega un terminale interattivo | |
| docker container stop | Ferma un container in esecuzione | |
| docker stop container_name | Ferma un container per nome | |
| docker stop $(docker ps -q) | Ferma tutti i container in esecuzione | |
| docker stop -t 5 container_name | Ferma un container concedendo 5 secondi per terminare i processi | |
| docker container restart | Riavvia un container | |
| docker restart container_name | Riavvia un container specifico | |
| docker restart $(docker ps -q) | Riavvia tutti i container in esecuzione | |
| docker restart -t 10 container_name | Riavvia un container con un ritardo di 10 secondi | |
| docker container rm | Rimuove un container | |
| docker rm container_name | Rimuove un container fermato specifico | |
| docker rm $(docker ps -aq) | Rimuove tutti i container fermati | |
| docker rm -f container_name | Forza la rimozione di un container in esecuzione | |
| docker image ls | Elenca le immagini scaricate | |
| docker images | Mostra tutte le immagini sull’host | |
| docker images -a | Mostra tutte le immagini, incluse le layer intermedie | |
| docker images --format '{{.Repository}}:{{.Tag}}' | Mostra solo nomi e tag delle immagini | |
| docker image rm | Rimuove una o più immagini dallo storage locale | |
| docker rmi test1:latest | Rimuove l’immagine con tag  | |
| docker rmi 1a2b3c4d5e6f | Rimuove un’immagine tramite ID | |
| docker rmi $(docker images -q) | Rimuove tutte le immagini (usare con cautela!) | 
🔁 Gestione dei container
| Comando | Esempio | Descrizione | 
|---|---|---|
| docker container exec | Esegui un comando all’interno di un container in esecuzione | |
| docker exec -it container bash | Avvia una shell bash interattiva all’interno del container chiamato  | |
| docker exec container ls /app | Esegui il comando  | |
| docker exec -d container touch /tmp/testfile | Esegui un comando nel container in modalità detached (senza attendere) | |
| docker container logs | Visualizza i log di un container | |
| docker logs container | Mostra tutti i log del container  | |
| docker logs -f container | Segui i log del container in tempo reale | |
| docker logs --tail 50 container | Mostra le ultime 50 righe di log | |
| docker inspect | Recupera informazioni dettagliate in JSON su un container o un’immagine | |
| docker inspect container | Mostra i dettagli del container  | |
| docker inspect --format '{{.NetworkSettings.IPAddress}}' container | Mostra l’indirizzo IP del container | |
| docker container stats | Mostra statistiche in tempo reale sull’utilizzo delle risorse dei container | |
| docker stats | Mostra CPU, memoria, rete e utilizzo disco di tutti i container | |
| docker stats container_name | Mostra statistiche solo per un container specifico | |
| docker stats --no-stream | Mostra uno snapshot unico delle statistiche ed esci | |
| docker container rename | Rinomina un container | |
| docker rename old_name new_name | Rinomina un container da  | |
| docker container cp | Copia file tra un container e l’host | |
| docker cp container:/src/file.txt ./file.txt | Copia un file dal container alla directory corrente dell’host | |
| docker cp ./config.yaml container:/app/config.yaml | Copia un file dall’host al container | |
| docker cp CONTAINER:/var/logs/app.log - | tar x -O | grep "ERROR" | Trasmetti un file di log dal container e filtra le righe con “ERROR” senza salvarlo su disco | |
| docker container top | Mostra i processi in esecuzione all’interno di un container | |
| docker top container | Mostra i processi del container chiamato  | |
| docker container pause | Metti in pausa tutti i processi di un container | |
| docker pause container | Metti in pausa il container  | |
| docker container unpause | Riprendi l’esecuzione di un container in pausa | |
| docker unpause container | Riprendi il container  | |
| docker container update | Aggiorna le impostazioni di un container senza riavvio | |
| docker update --memory 500m container | Limita l’uso della memoria del container a 500 MB | 
🧱 Immagini e Dockerfile
| Comando | Esempio | Descrizione | 
|---|---|---|
| docker buildx build | Crea un’immagine Docker da un Dockerfile | |
| docker build -t my_image . | Crea un’immagine con tag  | |
| docker build -t my_image:1.0 . | Crea un’immagine con tag di versione  | |
| docker build --no-cache -t my_image . | Crea un’immagine senza usare la cache per una build pulita | |
| docker container commit | Crea un’immagine dallo stato attuale di un container | |
| docker commit container my_img:v1 | Crea l’immagine  | |
| docker commit -m "Added config" container my_img:v2 | Crea un’immagine con un messaggio di commit | |
| docker commit -a "John Doe" container my_img:latest | Crea un’immagine specificando l’autore | |
| docker image tag | Aggiungi o modifica un tag di un’immagine | |
| docker tag my_image myrepo/my_image:latest | Aggiungi un tag per il push al registry  | |
| docker tag my_image:1.0 my_image:stable | Crea il tag  | |
| docker tag my_image my_image:backup | Aggiungi un tag  | |
| docker image push | Invia un’immagine a Docker Hub o a un altro registry | |
| docker push myrepo/my_image:latest | Invia l’immagine con tag  | |
| docker push myrepo/my_image:1.0 | Invia l’immagine con tag  | |
| docker push myrepo/my_image | Invia l’immagine con tag predefinito  | |
| docker login | Autenticati su Docker Hub o su un altro registry | |
| docker login | Inserisci nome utente e password interattivamente per Docker Hub | |
| docker login myregistry.local:5000 | Accedi a un registry privato | |
| docker login -u username -p password | Accedi con nome utente e password (non raccomandato) | |
| docker logout | Disconnettiti da Docker Hub o da un altro registry | |
| docker logout | Disconnettiti da Docker Hub | |
| docker logout myregistry.local:5000 | Disconnettiti da un registry privato | |
| HEALTHCHECK | Istruzione Dockerfile per controllare automaticamente lo stato di salute del container | |
| HEALTHCHECK --interval=30s --timeout=5s --retries=3 CMD curl -f http://localhost/ || exit 1 | Aggiungi un health check per verificare la disponibilità del servizio ogni 30 secondi | |
| docker inspect --format='{{json .State.Health}}' container_name | Controlla lo stato dell’healthcheck di un container in esecuzione | 
🔌 Reti e volumi
| Comando | Esempio | Descrizione | 
|---|---|---|
| docker network ls | Elenca tutte le reti Docker | |
| docker network ls | Mostra tutte le reti create | |
| docker network ls --filter driver=bridge | Mostra solo le reti con driver  | |
| docker network ls --format '{{.Name}}' | Mostra solo i nomi delle reti | |
| docker network create | Crea una nuova rete Docker | |
| docker network create my_net | Crea una rete chiamata  | |
| docker network create --driver bridge my_bridge_net | Crea una rete con driver  | |
| docker network create --subnet=192.168.10.0/24 my_custom_net | Crea una rete con una subnet specificata | |
| docker network connect | Collega un container a una rete | |
| docker network connect my_net container | Collega il container  | |
| docker network connect --alias db_net my_net container | Collega con alias  | |
| docker network disconnect | Disconnetti un container da una rete | |
| docker network disconnect my_net container | Disconnetti il container  | |
| docker volume ls | Elenca tutti i volumi Docker | |
| docker volume ls | Mostra tutti i volumi Docker | |
| docker volume ls --filter dangling=true | Mostra i volumi non utilizzati | |
| docker volume create | Crea un nuovo volume Docker | |
| docker volume create my_vol | Crea un volume chiamato  | |
| docker volume create --driver local --opt type=tmpfs my_tmp_vol | Crea un volume temporaneo usando tmpfs | |
| docker volume inspect | Mostra informazioni dettagliate su un volume | |
| docker volume inspect my_vol | Mostra i dettagli del volume  | |
| docker volume rm | Rimuove uno o più volumi | |
| docker volume rm my_vol | Rimuove il volume chiamato  | |
| docker volume rm $(docker volume ls -qf dangling=true) | Rimuove tutti i volumi non utilizzati | 
🧩 Plugin Docker
| Comando | Esempio | Descrizione | 
|---|---|---|
| docker plugin ls | Elenca i plugin Docker installati | |
| docker plugin ls | Mostra tutti i plugin e il loro stato | |
| docker plugin install | Installa un plugin Docker da un registry | |
| docker plugin install vieux/sshfs | Installa il plugin volume SSHFS | |
| docker plugin install store/weaveworks/net-plugin:latest_release | Installa il plugin di rete Weave | |
| docker plugin disable | Disabilita un plugin installato | |
| docker plugin disable vieux/sshfs | Disabilita il plugin SSHFS | |
| docker plugin enable | Abilita un plugin precedentemente disabilitato | |
| docker plugin enable vieux/sshfs | Abilita il plugin SSHFS | |
| docker plugin rm | Rimuove un plugin Docker | |
| docker plugin rm vieux/sshfs | Rimuove il plugin SSHFS | 
📋 Docker Compose
| Comando | Esempio | Descrizione | 
|---|---|---|
| docker compose up | Avvia i container definiti in docker-compose.yml | |
| docker compose up | Avvia tutti i servizi nella directory corrente in modalità interattiva | |
| docker compose up -d | Avvia i servizi in modalità detached (background) | |
| docker compose up --build | Compila le immagini prima di avviare i servizi | |
| docker compose down | Ferma e rimuove container, reti e volumi creati da up | |
| docker compose down | Ferma tutti i servizi in esecuzione e rimuovi le risorse associate | |
| docker compose down --volumes | Rimuovi anche i volumi creati da Compose | |
| docker compose down --rmi all | Rimuovi anche le immagini create da Compose | |
| docker compose logs | Visualizza i log di tutti i servizi o di quelli specificati | |
| docker compose logs | Mostra i log di tutti i servizi | |
| docker compose logs -f | Segui i log in tempo reale | |
| docker compose logs web | Mostra i log solo per il servizio  | |
| docker compose exec | Esegui un comando all’interno di un container di servizio in esecuzione | |
| docker compose exec web bash | Entra in una shell bash interattiva all’interno del container del servizio  | |
| docker compose exec db ls /var/lib/postgresql | Esegui il comando  | |
| docker compose exec -d worker touch /tmp/done | Esegui un comando all’interno del container  | |
| docker compose build | Crea o ricrea le immagini dei servizi | |
| docker compose build | Compila tutte le immagini definite in  | |
| docker compose build web | Compila solo l’immagine del servizio  | |
| docker compose build --no-cache | Compila le immagini senza usare la cache | |
| docker compose ps | Mostra lo stato di tutti i servizi e container | |
| docker compose ps -a | Mostra tutti i container, inclusi quelli fermati | |
| docker compose ps --services | Mostra solo i nomi dei servizi | |
| docker compose pull | Scarica/aggiorna le immagini dei servizi dal registry | |
| docker compose pull web | Scarica l’immagine solo per il servizio  | |
| docker compose pull --ignore-pull-failures | Continua a scaricare anche se alcune immagini falliscono | |
| docker compose restart | Riavvia tutti i servizi o quelli specificati | |
| docker compose restart db | Riavvia solo il servizio  | |
| docker compose restart -t 10 | Riavvia i servizi con un timeout di 10 secondi | |
| docker compose config | Mostra la configurazione finale di Compose in formato YAML | |
| docker compose config --services | Elenca tutti i servizi nella configurazione | |
| docker compose config --volumes | Elenca tutti i volumi definiti nella configurazione | |
| docker compose start | Avvia servizi fermati senza ricreare i container | |
| docker compose start web | Avvia il servizio  | |
| docker compose start db api | Avvia più servizi contemporaneamente | |
| docker compose stop | Ferma i servizi senza rimuovere i container | |
| docker compose stop web | Ferma il servizio  | |
| docker compose stop -t 5 | Ferma i servizi con un timeout di 5 secondi | 
📤 Esportazione e Importazione
| Comando | Esempio | Descrizione | 
|---|---|---|
| docker image save | Salva una o più immagini Docker in un archivio tar per successiva importazione o trasferimento | |
| docker save -o image.tar my_img:tag | Salva un’immagine Docker in un file tar | |
| docker save my_image > my_image.tar | Metodo alternativo per salvare un’immagine in un file | |
| docker save -o redis_latest.tar redis:latest | Salva un’immagine specifica di Redis in un file | |
| docker image load | Carica immagini Docker da un archivio tar precedentemente salvato | |
| docker load < image.tar | Carica un’immagine Docker da un file tar | |
| docker load --input redis_latest.tar | Carica un’immagine specificando il file come parametro | |
| docker load --quiet < my_image.tar | Carica un’immagine senza output di avanzamento | |
| docker container export | Esporta il filesystem di un container come archivio tar senza cronologia o metadati dell’immagine | |
| docker export container > file.tar | Esporta il filesystem di un container in un archivio | |
| docker export my_container > my_container_fs.tar | Esporta un container per nome | |
| docker export -o container_fs.tar container_id | Esporta per ID container usando il flag  | |
| docker image import | Crea una nuova immagine da un archivio tar di un filesystem | |
| docker import file.tar new_img | Importa un file archivio come nuova immagine Docker | |
| docker import https://example.com/image.tar my_new_image | Importa un’immagine direttamente da un URL | |
| docker import - my_image < file.tar | Importa da input standard | 
🧹 Pulizia e Diagnostica
| Comando | Esempio | Descrizione | 
|---|---|---|
| docker system df | Mostra l’utilizzo disco di Docker: volumi, immagini, container e cache di build | |
| docker system df -v | Output dettagliato con info su ciascuna immagine, container e volume | |
| docker system df --format '{{json .}}' | Mostra informazioni in formato JSON | |
| docker system prune | Rimuove tutti i dati Docker non utilizzati: container fermati, reti inutilizzate, immagini dangling e cache di build | |
| docker system prune -a | Rimuove immagini non utilizzate incluse quelle intermedie | |
| docker system prune --volumes | Rimuove volumi inutilizzati insieme ad altre risorse | |
| docker image prune | Rimuove immagini Docker non utilizzate incluse le layer dangling | |
| docker image prune -a | Rimuove tutte le immagini non utilizzate incluse quelle dangling | |
| docker image prune --filter "until=24h" | Rimuove immagini più vecchie di 24 ore | |
| docker container prune | Rimuove container fermati in base a filtri o tutti se non specificato | |
| docker container prune --filter "until=24h" | Rimuove container fermati da più di 24 ore | |
| docker container prune --force | Rimuove senza richiesta di conferma | 
🐝 Docker Swarm
| Comando | Esempio | Descrizione | 
|---|---|---|
| docker swarm init | Inizializza un nuovo cluster Docker Swarm sul nodo corrente | |
| docker swarm init --advertise-addr 192.168.1.100 | Inizializza il cluster specificando l’indirizzo IP | |
| docker swarm init --listen-addr 0.0.0.0:2377 | Inizializza con una porta di ascolto specificata | |
| docker service create | Crea un nuovo servizio nel cluster Swarm | |
| docker service create --name nginx nginx | Crea un servizio Nginx in Swarm | |
| docker service create --replicas 3 --name web webserver | Crea un servizio con 3 repliche | |
| docker service create --name redis --publish 6379:6379 redis | Crea un servizio con mapping delle porte | |
| docker stack deploy | Distribuisce uno stack di servizi nel cluster Swarm basato su un file Compose | |
| docker stack deploy -c docker-compose.yml mystack | Distribuisci lo stack da un file compose | |
| docker stack deploy --with-registry-auth -c compose.yml mystack | Distribuisci con inoltro delle credenziali di registry | |
| docker stack deploy -c swarm-compose.yml mystack | Usa un file compose alternativo per lo stack | |
| docker stack rm | Rimuove uno o più stack dal cluster Swarm | |
| docker stack rm mystack | Rimuove lo stack  | |
| docker stack rm | Rimuove tutti gli stack (non raccomandato) | |
| docker stack rm mystack && docker swarm leave --force | Rimuove uno stack e lascia Swarm | 
💼 Utilizzo avanzato di Docker
🚀 Comandi Docker professionali
| Comando | Esempio | Descrizione | 
|---|---|---|
| docker buildx | Strumento avanzato di build immagini che sostituisce docker build. Supporta multi-piattaforma, caching, build parallele ed esportazione in vari formati. Utile per CI/CD e sviluppo cross-platform | |
| docker buildx build --platform linux/arm64,linux/amd64 -t myimg:multi . | Compila un’immagine multi-piattaforma (ARM e x86 simultaneamente) | |
| docker buildx build --load -t localimg . | Compila un’immagine e caricala nella cache del Docker Engine locale | |
| docker buildx build --push --platform linux/amd64,linux/arm64 -t repo/app:latest . | Compila e invia un’immagine multi-piattaforma a un registry | |
| docker context | Gestisci i contesti Docker per lavorare con ambienti remoti o multipli. Consente passaggi rapidi tra Docker Engine locale e remoto | |
| docker context create myremote --docker "host=ssh://user@host" | Crea un contesto per connetterti a un host Docker remoto | |
| docker context use myremote | Passa al contesto remoto | |
| docker context ls | Elenca i contesti disponibili e quello attivo | |
| docker system events | Ascolta eventi Docker in tempo reale, filtrati per tipo (es. avvio container). Utile per monitoraggio e automazione | |
| docker events --filter 'event=start' | Mostra solo eventi di avvio container | |
| docker events --since 1h --until 10m | Mostra eventi dell’ultima ora fino a 10 minuti fa | |
| docker events --filter 'type=network' | Mostra solo eventi relativi alla rete | |
| docker events --filter 'image=nginx' | Mostra eventi relativi all’immagine  | |
| docker container update | Cambia i limiti di risorse e le impostazioni di un container in esecuzione senza riavvio | |
| docker update --cpus 2 --memory 1g my_container | Imposta limite a 2 CPU e 1 GB di RAM | |
| docker update --restart unless-stopped my_container | Imposta la policy di riavvio automatico su  | |
| docker update --pids-limit 200 my_container | Limita il numero di processi a 200 | |
| docker container diff | Mostra le modifiche al filesystem di un container rispetto alla sua immagine originale. Utile per debug e auditing | |
| docker diff my_container | Mostra tutte le modifiche al filesystem del container | |
| docker diff my_container | grep '^A' | Mostra solo i file aggiunti ( | |
| docker image history | Mostra la cronologia dei layer di un’immagine: comandi di build, dimensione di ogni layer e tempo di creazione. Utile per ottimizzazione e auditing | |
| docker history my_image | Mostra la cronologia dei layer di un’immagine | |
| docker history --no-trunc my_image | Mostra i comandi di build completi senza troncamento | |
| docker history --format "{{.CreatedBy}}: {{.Size}}" my_image | Mostra solo comandi di build e dimensioni dei layer | 
🛠 Buone pratiche Docker e automazione
- Minimizzare la dimensione dell’immagine 
 Usa immagini base come- alpineo- scratchper dimensioni minime.
 Per unire i layer, puoi usare- --squashdurante la build (richiede funzionalità sperimentali abilitate).
 Inoltre, rimuovi file temporanei e cache in un unico layer:- RUN apk add --no-cache curl && rm -rf /var/cache/apk/*
- Minimizzare il numero di layer 
 Combina comandi in un unico- RUNper ridurre il numero di layer e la dimensione finale dell’immagine:- RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
- Ottimizzare la build del Dockerfile 
 Usa build multi-stage così che solo i file necessari rimangano nell’immagine finale.
 Copia e installa le dipendenze prima, poi copia il codice — questo migliora la cache dei layer e velocizza le ricompilazioni.
- Separare segreti e configurazioni 
 Non archiviare mai file- .env, chiavi API o certificati privati dentro l’immagine.
 Usa per la configurazione:- docker secret(in Swarm)
 
- variabili d’ambiente (-e VAR=valueo.env)
 
- volumi esterni per configurazioni 
 
- Segreti di build (BuildKit) 
 Per passare segreti in modo sicuro durante la build, usa il flag- --secret:- docker buildx build --secret id=mysecret,src=./secret.txt .- Nel Dockerfile, il segreto è disponibile in - /run/secrets/mysecret:- RUN --mount=type=secret,id=mysecret cat /run/secrets/mysecret- 🛡 Questo impedisce che i segreti vengano salvati nei layer dell’immagine. 
- Docker senza root 
 Eseguire Docker senza privilegi root migliora la sicurezza e riduce il rischio di compromissione dell’host.
 Per abilitare:- dockerd-rootless-setuptool.sh install export PATH=/usr/bin:$PATH- Verifica: - docker info | grep Rootless- ⚠ Alcune funzionalità (es. inoltro porte <1024) non saranno disponibili. 
- Scansione delle immagini per vulnerabilità 
 Usa strumenti integrati:- docker scan my_image- Oppure la nuova CLI: - docker scout cves my_image- Questo aiuta a rilevare vulnerabilità nelle immagini base e nelle dipendenze. 
- Monitoraggio utilizzo risorse 
 Limita i container per memoria, CPU e numero di processi:- docker run --memory=512m --cpus="1.5" --pids-limit=200 myimage- Questo impedisce consumo eccessivo di risorse. 
 Puoi anche limitare l’I/O:- docker run --device-read-bps /dev/sda:1mb --device-write-bps /dev/sda:1mb myimage- Utile per container che non devono sovraccaricare il sottosistema disco. 
- Pulizia automatica 
 Rimuovi regolarmente immagini, container, volumi e reti inutilizzati:- docker system prune -af --volumes- ⚠ Attenzione: questo comando elimina tutte le risorse non utilizzate. - Per una pulizia selettiva usa: - docker image prune --filter "until=24h"
- Integrazione CI/CD 
 Integra build, test e deploy in GitHub Actions, GitLab CI, Jenkins pipelines.
 Esempio di step GitHub Actions:- - run: docker build -t myapp:${GITHUB_SHA} . - run: docker push myapp:${GITHUB_SHA}
- Logging e monitoraggio 
 Collega driver di log (- --log-driver) a sistemi centralizzati: ELK, Loki, Splunk.
 Usa Prometheus + cAdvisor per metriche dei container.
- Deployment in produzione 
 Separa configurazioni per sviluppo e produzione usando- docker-compose.override.yml.
 Per alta disponibilità e scalabilità usa:- Docker Swarm
 
- Kubernetes 
 
- Docker Swarm
🐞 Debugging e Profilazione dei Container Docker
| Comando | Esempio | Descrizione | 
|---|---|---|
| docker container exec | Esegue un comando all’interno di un container in esecuzione, fornendo accesso interattivo o la possibilità di avviare processi nell’ambiente isolato del container | |
| docker exec -it my_container bash | Avvia un terminale interattivo (bash) all’interno di un container in esecuzione | |
| docker exec -it my_container sh | Avvia una shell minimale all’interno del container (se bash non è disponibile) | |
| docker exec my_container ls /app | Esegui un comando all’interno del container senza modalità interattiva | |
| docker container logs | Mostra i log del container specificato, consentendo di visualizzare output ed eventi relativi al suo funzionamento per diagnostica e monitoraggio | |
| docker logs -f --tail 100 my_container | Visualizza le ultime 100 righe di log con streaming in tempo reale | |
| docker logs my_container | Mostra tutti i log disponibili del container | |
| docker logs --since 1h my_container | Mostra i log dell’ultima ora | |
| docker inspect | Restituisce informazioni dettagliate in formato JSON su un oggetto Docker (container, immagine, rete, ecc.), incluse configurazioni e stato | |
| docker inspect my_container | Ottieni info JSON complete sul container | |
| docker inspect --format '{{.State.Pid}}' my_container | Mostra il PID del processo principale del container sull’host | |
| docker inspect --format '{{.NetworkSettings.IPAddress}}' my_container | Mostra l’indirizzo IP del container | |
| nsenter(withstrace) | Utility Linux per entrare nei namespace di un altro processo (qui, il container). Usata con straceper tracciare le system call all’interno del container per il debug | |
| nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --mount --uts --ipc --net --pid strace -p 1 | Entra nei namespace del container e traccia le system call del processo 1 | |
| nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --mount --uts --ipc --net --pid bash | Apri una shell bash nei namespace del container | |
| nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --net netstat -tulnp | Visualizza le porte aperte all’interno del container | |
| tcpdump(inside container) | Strumento da console per catturare e analizzare traffico di rete. Usato nel container per diagnosticare problemi di rete, analizzare pacchetti e monitorare connessioni | |
| docker exec -it my_container tcpdump -i any | Cattura e analizza il traffico di rete nel container | |
| docker exec -it my_container tcpdump -nn port 80 | Cattura traffico solo sulla porta 80 | |
| docker exec -it my_container tcpdump -w /tmp/dump.pcap | Salva traffico su file per analisi successiva | |
| docker container stats | Mostra metriche di utilizzo risorse correnti (CPU, memoria, rete, disco) per uno o più container in tempo reale | |
| docker stats my_container | Mostra in tempo reale utilizzo di CPU, memoria, rete e disco del container | |
| docker stats | Mostra statistiche per tutti i container | |
| docker stats --no-stream | Mostra una sola volta le statistiche ed esci | |
| docker container top | Mostra la lista dei processi in esecuzione all’interno del container, simile a psin Linux, per analizzare l’attività del container | |
| docker top my_container | Mostra i processi in esecuzione nel container | |
| docker top my_container aux | Usa un formato alternativo come  | |
| docker top my_container -eo pid,cmd | Mostra solo PID e comando dei processi | |
| docker diff | Mostra le modifiche al filesystem del container rispetto alla sua immagine di base, indicando file aggiunti, modificati o eliminati | |
| docker diff my_container | Mostra le modifiche al filesystem del container rispetto all’immagine base | |
| docker diff my_container | grep '^A' | Mostra solo i file aggiunti ( | |
| docker diff my_container | grep '^C' | Mostra solo i file modificati ( | |
| docker cp | Copia file e directory tra un container e l’host, abilitando lo scambio dati e il backup | |
| — | — | — | 
| docker cp my_container:/path/to/file ./file | Copia un file dal container all’host | |
| docker cp ./config.yaml my_container:/app/config.yaml | Copia un file dall’host al container | |
| docker cp my_container:/var/log/app.log - | tar x -O | grep "ERROR" | Copia un file di log e filtra le righe di errore senza salvarlo su disco | 
💡 Per il debugging avanzato puoi usare
nsenter,strace,tcpdump,gdbe altri strumenti di basso livello.
💼 Uso Avanzato di Docker Compose
🚀 Comandi Professionali di Docker Compose
| Comando | Esempio | Descrizione | 
|---|---|---|
| docker compose up | Avvia e gestisce il ciclo di vita dei servizi specificati dal file docker-compose.yml con la possibilità di eseguirli in background | |
| docker compose up -d web db | Esegui solo i servizi  | |
| docker compose up --build | Ricompila le immagini prima di avviare i servizi | |
| docker compose up --remove-orphans | Rimuovi container non definiti nel file compose corrente | |
| docker compose build | Compila le immagini per i servizi come descritto nel file compose con controllo cache e parallelismo | |
| docker compose build --no-cache | Ricompila completamente le immagini senza usare cache | |
| docker compose build --parallel | Compila tutti i servizi in parallelo per velocizzare il processo | |
| docker compose build web | Compila l’immagine solo per il servizio  | |
| docker compose pull | Scarica le versioni più recenti delle immagini dal registry per tutti o per servizi specifici | |
| docker compose pull | Scarica le immagini per tutti i servizi | |
| docker compose pull db | Scarica l’immagine solo per il servizio  | |
| docker compose pull --ignore-pull-failures | Continua l’esecuzione ignorando gli errori durante il pull delle immagini | |
| docker compose restart | Riavvia tutti o specifici servizi senza ricreare i container | |
| docker compose restart | Riavvia tutti i servizi del progetto corrente | |
| docker compose restart worker | Riavvia solo il servizio  | |
| docker compose restart web db | Riavvia più servizi contemporaneamente | |
| docker compose exec | Esegue un comando all’interno di un container di servizio in esecuzione con modalità interattiva opzionale | |
| docker compose exec db psql -U user -d database | Esegui psql all’interno del container del servizio  | |
| docker compose exec web sh | Apri una shell nel container  | |
| docker compose exec api curl http://localhost:8080 | Esegui una richiesta curl dal container del servizio  | |
| docker compose config | Mostra la configurazione finale di Compose considerando tutti i file e le variabili d’ambiente | |
| docker compose config | Mostra configurazione unificata in formato YAML | |
| docker compose config --services | Elenca tutti i servizi | |
| docker compose config --environment | Mostra tutte le variabili d’ambiente usate dai servizi | |
| docker compose watch | Riavvia automaticamente i servizi quando cambiano i file sorgente, utile per lo sviluppo | |
| docker compose watch | Avvia il monitoraggio dei file e riavvia i servizi ai cambiamenti | |
| docker compose events | Trasmette eventi di Compose: avvio, stop, aggiornamento servizi | |
| docker compose events --json | Ricevi eventi in formato JSON | |
| docker compose rm | Rimuove i container dei servizi fermati | |
| docker compose rm web db | Rimuovi i container dei servizi  | |
| docker compose pause | Metti in pausa l’esecuzione dei servizi | |
| docker compose pause api | Metti in pausa il servizio  | |
| docker compose unpause | Riprendi l’esecuzione dei servizi in pausa | |
| docker compose unpause api | Riprendi il servizio  | |
| docker compose create | Crea i container senza avviarli | |
| docker compose create web db | Crea container per  | |
| docker compose images | Mostra l’elenco delle immagini usate dai servizi | |
| docker compose images | Mostra le immagini di tutti i servizi | |
| docker compose top | Mostra i processi in esecuzione all’interno dei container dei servizi | |
| docker compose top web | Mostra i processi nei container del servizio  | 
🛠 Buone Pratiche e Automazione con Docker Compose
- Separazione degli Ambienti 
 Usa file- docker-compose.override.ymlseparati per diversi ambienti —- development,- staging,- production. Questo aiuta a isolare configurazioni ed evitare conflitti tra impostazioni.
 Puoi anche combinare più file di configurazione usando il flag- -f:- docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d- Usa diversi file - .env(- .env.dev,- .env.prod, ecc.) per gestire le variabili d’ambiente.
- Archiviazione Sicura dei Segreti 
 Non includere dati sensibili (password, token) direttamente nei file Compose. Usa invece:- file .envper variabili d’ambiente (nota che i file.envnon sono cifrati e non dovrebbero essere commitati in repository pubblici)
 
- docker secrete- docker configper la gestione sicura di segreti e configurazioni in Docker Swarm
 
- volumi esterni per file di configurazione contenenti segreti
 
- sistemi esterni di gestione segreti (es. HashiCorp Vault, AWS Secrets Manager) 
 
- file 
- Ordine di Avvio con - depends_one- healthcheck
 Per fare in modo che i servizi attendano che le dipendenze siano pronte:- services: db: image: postgres healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 10s retries: 5 api: image: my_api depends_on: db: condition: service_healthy
- Minimizzare il Downtime Durante gli Aggiornamenti 
 Prima di aggiornare i servizi, esegui:- docker compose pull && docker compose up -d --remove-orphans- L’opzione - -desegue i container in background, e- --remove-orphansrimuove i container non definiti nelle configurazioni correnti.
 Per fermare e rimuovere completamente i vecchi container se necessario:- docker compose down --remove-orphans- Questo garantisce che vengano caricate immagini aggiornate e che i container non utilizzati siano rimossi senza downtime. 
- Hot Reload del Codice per lo Sviluppo 
 Usa- volumesper montare directory locali nei container. Questo permette l’applicazione immediata delle modifiche al codice senza ricompilare le immagini.
 Presta attenzione a problemi di permessi file e cache del filesystem, specialmente su Windows e macOS, per evitare problemi di performance.
- Hot Reload del Codice Senza Volume (Compose 2.22+) - develop: watch: - path: ./src action: sync target: /app
- Log Centralizzati dei Servizi 
 Reindirizza i log dei container a sistemi di monitoraggio e aggregazione log come ELK Stack, Loki, Prometheus e Fluentd per analisi e allerta semplici.
 Usa i driver di logging Docker (- --log-driver) per abilitare raccolta e processamento centralizzati dei log.
 Configura i driver di logging per i container in Compose:- services: api: image: my_api logging: driver: "json-file" options: max-size: "10m" max-file: "3"
- Riavvio Automatico dei Servizi 
 Configura la policy di riavvio in- docker-compose.yml:- restart: unless-stopped- Altre policy di riavvio includono: - no— nessun riavvio automatico (default)
 
- always— riavvia sempre il container
 
- on-failure— riavvia solo in caso di errori (opzionalmente con numero di retry)
 - In produzione, - unless-stoppedè la scelta ottimale per garantire la resilienza del servizio.
 Questo abilita il recupero automatico dei servizi dopo errori o riavvii dell’host.
- Profili di Servizio 
 Consentono di eseguire solo gruppi specifici di servizi:- services: db: image: postgres profiles: ["backend"] web: image: nginx profiles: ["frontend"]- Per eseguire solo il profilo frontend: - docker compose --profile frontend up
🐞 Debugging e Profilazione dei Servizi in Docker Compose
| Comando | Esempio | Descrizione | 
|---|---|---|
| docker compose exec | Esegui un comando all’interno di un servizio in esecuzione, fornendo accesso al container o avviando processi individuali | |
| docker compose exec web sh | Apri una shell all’interno del container del servizio  | |
| docker compose exec db psql -U user -d database | Esegui il comando psql all’interno del container del servizio  | |
| docker compose logs | Visualizza i log dei servizi per diagnostica e monitoraggio | |
| docker compose logs -f db | Visualizza i log del servizio  | |
| docker compose logs --tail=50 api | Mostra le ultime 50 righe di log del servizio  | |
| docker compose logs --since=1h web | Mostra i log dell’ultima ora per il servizio  | |
| docker inspect | Visualizza informazioni dettagliate sul container che esegue un servizio | |
| docker inspect $(docker compose ps -q web) | Ottieni JSON con info dettagliate sul container del servizio  | |
| docker container stats | Monitora l’utilizzo risorse dei container che eseguono servizi | |
| docker stats $(docker compose ps -q worker) | Traccia CPU, memoria e altre risorse del container del servizio  | |
| docker compose run --rm | Esegui un container temporaneo con le impostazioni del servizio, utile per il debug | |
| docker compose run --rm web sh | Avvia un container one-off per il servizio  | |
| docker container cp | Copia file tra host e container | |
| docker cp $(docker compose ps -q db):/dump.sql ./dump.sql | Copia un file dal container del servizio  | 
💡 Per un debug comodo di setup multi-servizio complessi, usa
docker compose run --rmper avviare container individuali con le reti e i volumi necessari senza influenzare i servizi principali.
📚 Risorse Aggiuntive
🚫 Ignorare File con .dockerignore
Aggiungi file e cartelle al file .dockerignore che non dovrebbero essere inclusi nell’immagine per ridurre la dimensione e velocizzare la build:
node_modules/
*.log
.env⚡ Semplificazione dei Comandi con Alias
Puoi creare alias per i comandi usati frequentemente per eseguirli più velocemente:
alias dcu="docker compose up -d"
alias dcd="docker compose down"
alias dcb="docker compose build"🧠 Consiglio: Suggerimenti sull’Uso di Docker
- Non cercare di memorizzare tutto — usa docker --helpodocker <command> --helpper esplorare i comandi.
 
- Esercitati regolarmente e sperimenta con progetti semplici.
 
- Tieni sotto controllo la dimensione delle immagini e rimuovi file non necessari tramite - .dockerignore.
🌐 Link Utili
📘 Documentazione Ufficiale Docker — guide complete e riferimenti su tutti gli argomenti Docker:
https://docs.docker.com/
📙 Docker Cheat Sheet — cheat sheet ufficiale completo di Docker:
https://dockerlabs.collabnix.com/docker/cheatsheet/
📗 Docker Hub — immagini e registry:
https://hub.docker.com/