🐳 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 comealpineoscratchper 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 unicoRUNper 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:$PATHVerifica:
docker info | grep Rootless⚠ Alcune funzionalità (es. inoltro porte <1024) non saranno disponibili.
Scansione delle immagini per vulnerabilità
Usa strumenti integrati:docker scan my_imageOppure la nuova CLI:
docker scout cves my_imageQuesto 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 myimageQuesto 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 myimageUtile 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 usandodocker-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 (with strace) |
Utility Linux per entrare nei namespace di un altro processo (qui, il container). Usata con strace per 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 ps in 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 filedocker-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 -dUsa 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 secretedocker 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_onehealthcheck
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_healthyMinimizzare il Downtime Durante gli Aggiornamenti
Prima di aggiornare i servizi, esegui:docker compose pull && docker compose up -d --remove-orphansL’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-orphansQuesto garantisce che vengano caricate immagini aggiornate e che i container non utilizzati siano rimossi senza downtime.
Hot Reload del Codice per lo Sviluppo
Usavolumesper 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: /appLog 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 indocker-compose.yml:restart: unless-stoppedAltre 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/