Docker: guida alle migliori pratiche e comandi più utilizzati

Conoscete quei comandi Docker che cercate continuamente perché non li avete mai memorizzati? Li abbiamo raccolti in una guida rapida, raggruppati per categoria: immagini, container, volumi, reti, log e Docker Compose. Include anche buone pratiche in produzione: immagini leggere, utente non-root, secret e manutenzione.

Principali comandi Docker – raggruppati per categoria per facilitare la consultazione quotidiana.

1. Gestione delle immagini

  • docker pull <immagine> – scarica un'immagine dal Docker Hub (o registry).
  • docker images – elenca le immagini locali.
  • docker rmi <immagine> – rimuove un'immagine.
  • docker build -t <nome>:<tag> . – crea un'immagine dal Dockerfile nella directory corrente.
  • docker tag <immagine> <repo>:<tag> – rinomina/tagga un'immagine.
  • docker push <repo>:<tag> – invia l'immagine al registry.

2. Container (esecuzione)

docker run <immagine> – crea ed esegue un container. Opzioni principali:

Flag Cosa fa
-d Esegue in background (detached)
-p 8080:80 Mappa la porta host:container
--name miaapp Definisce il nome del container
-v /host:/container Monta un volume
  • docker ps – elenca i container in esecuzione.
  • docker ps -a – elenca tutti i container (attivi e fermati).
  • docker stop <id|nome> – ferma un container.
  • docker start <id|nome> – avvia un container fermo.
  • docker restart <id|nome> – riavvia un container.
  • docker rm <id|nome> – rimuove un container.

3. Log, shell e ispezione

  • docker logs <id|nome> – visualizza i log del container.
  • docker logs -f <id|nome> – segue i log in tempo reale (tail -f).
  • docker exec -it <id|nome> sh – apre una shell interattiva nel container.
  • docker inspect <id|nome> – visualizza i dettagli completi in JSON.
  • docker stats – monitora l'utilizzo di CPU e memoria in tempo reale.

4. Volumi e dati

  • docker volume ls – elenca i volumi.
  • docker volume create <nome> – crea un volume.
  • docker volume rm <nome> – rimuove un volume.
  • docker system df – visualizza l'utilizzo disco (immagini, container, volumi).

5. Reti

  • docker network ls – elenca le reti.
  • docker network create <nome> – crea una rete.
  • docker network inspect <nome> – visualizza i dettagli della rete.
  • docker network connect <rete> <container> – connette il container alla rete.
  • docker network disconnect <rete> <container> – disconnette il container dalla rete.

6. Pulizia (housekeeping)

  • docker system prune – rimuove container fermati, reti e immagini non utilizzate.
  • docker system prune -a – idem, includendo tutte le immagini non utilizzate.
  • docker volume prune – rimuove i volumi non utilizzati.
Attenzione: docker system prune -a rimuove le immagini non collegate a nessun container attivo. Usate con cautela in ambienti condivisi.

7. Docker Compose (multi-container)

  • docker compose up -d – avvia i container definiti nel docker-compose.yml.
  • docker compose down – ferma e rimuove i container dello stack.
  • docker compose logs -f – segue i log di tutti i servizi.
  • docker compose ps – elenca i container del progetto.
  • docker compose exec <servizio> sh – apre una shell in un servizio.

8. Buone pratiche in produzione

Docker è diventato lo standard per impacchettare ed eseguire applicazioni. In produzione tuttavia, immagini mal configurate e container in esecuzione come root possono ampliare la superficie di attacco e complicare gli audit.

Immagini più leggere e a livelli

Utilizzate immagini base Alpine o distroless quando possibile e adottate multi-stage build per compilare in un passaggio e copiare solo il binario nel passaggio finale. Meno pacchetti = meno CVE e dimensioni ridotte. Fissate il tag dell'immagine base (es.: node:20-alpine) per evitare sorprese nei rebuild.

Eseguire come non-root

Create un utente dedicato nel Dockerfile e utilizzate l'istruzione USER prima del CMD. In Kubernetes o Docker Compose, evitate la modalità privileged e limitate le risorse CPU e memoria. Monitorate con strumenti di conformità come Trivy o Docker Scout per identificare le vulnerabilità note.

Secret e configurazione

Non inserite mai password o chiavi in testo nelle variabili d'ambiente del docker-compose.yml. Utilizzate Docker secrets, file montati come read-only o un orchestratore (Kubernetes Secrets, HashiCorp Vault). Effettuate la rotazione delle credenziali regolarmente e mantenete le immagini base aggiornate.

Domande Frequenti

I più utilizzati sono: docker run (creare un container), docker ps (elencare i container), docker logs (visualizzare i log), docker exec (eseguire un comando), docker compose up (avviare lo stack) e docker build (costruire l'immagine).

Utilizza docker logs <container> per visualizzare i log. Aggiungi -f per seguire in tempo reale e --tail 100 per vedere le ultime 100 righe.

docker run crea un singolo container. docker compose gestisce più container definiti in un file YAML, facilitando l'orchestrazione di applicazioni con più servizi.

Utilizza immagini leggere (Alpine/distroless), esegui come utente non-root, gestisci i segreti con Docker Secrets o variabili d'ambiente e mantieni le immagini aggiornate.

Hai bisogno di aiuto?