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.

Hai bisogno di aiuto?