Basi
Eseguire Container
docker run nginx # run image docker run -d nginx # detached (background) docker run -p 8080:80 nginx # map port docker run --name web nginx # named container docker run -it ubuntu bash # interactive shell
Comandi Essenziali
docker psElenca container in esecuzione
docker ps -aElenca tutti i container (inclusi fermati)
docker imagesElenca immagini locali
docker pull nginxScarica immagine dal registro
docker infoInformazioni di sistema
Gestione Container
Ciclo di Vita
docker start <id>Avvia un container fermo
docker stop <id>Arresto corretto (SIGTERM)
docker kill <id>Arresto forzato (SIGKILL)
docker restart <id>Riavvia il container
docker rm <id>Rimuove container fermo
docker rm -f <id>Rimozione forzata (anche in esecuzione)
Ispezione e Debug
docker logs <id>Visualizza log del container
docker logs -f <id>Segui log (in tempo reale)
docker exec -it <id> bashShell nel container in esecuzione
docker inspect <id>Metadati dettagliati del container (JSON)
docker top <id>Processi in esecuzione nel container
docker statsUtilizzo risorse in tempo reale
Copia File
docker cp file.txt :/app/ # host → container docker cp :/app/log.txt ./ # container → host
Immagini
Build e Tagging
docker build -t myapp . # build from Dockerfile docker build -t myapp:v2 . # with tag docker tag myapp user/myapp:v2 # retag image
Pubblicazione
docker login docker push user/myapp:v2 docker pull user/myapp:v2
Gestione Immagini
docker imagesElenca tutte le immagini locali
docker rmi <image>Rimuove immagine
docker image pruneRimuove immagini dangling
docker system pruneRimuove tutti i dati inutilizzati
docker history <image>Mostra cronologia dei layer
Dockerfile
Istruzioni Comuni
FROM node:20Immagine base
WORKDIR /appImposta directory di lavoro
COPY . .Copia file nell'immagine
RUN npm installEsegue comando durante la build
CMD ["node", "app.js"]Comando default a runtime
EXPOSE 3000Documenta la porta in ascolto
ENV NODE_ENV=productionImposta variabile d'ambiente
ARG VERSION=latestVariabile di build
ENTRYPOINT ["python"]Eseguibile fisso (CMD = argomenti)
Esempio Dockerfile
FROM node:20-alpine WORKDIR /app COPY package*.json ./ RUN npm ci --production COPY . . EXPOSE 3000 CMD ["node", "server.js"]
Volumi
Storage Persistente
docker volume create mydata docker run -v mydata:/app/data nginx docker run -v $(pwd):/app nginx # bind mount
Comandi Volume
docker volume lsElenca volumi
docker volume inspect <v>Dettagli del volume
docker volume rm <v>Rimuove volume
docker volume pruneRimuove volumi inutilizzati
Reti
Basi di Rete
docker network create mynet docker run --network mynet --name api nginx docker run --network mynet --name db postgres
Comandi di Rete
docker network lsElenca reti
docker network inspect <n>Dettagli della rete
docker network connect <n> <c>Collega container alla rete
docker network rm <n>Rimuove rete

I container sulla stessa rete possono comunicare per nome

Docker Compose
Esempio compose.yaml
services: web: build: . ports: ["3000:3000"] depends_on: [db] db: image: postgres:16 environment: POSTGRES_PASSWORD: secret volumes: [pgdata:/var/lib/postgresql/data] volumes: pgdata:
Comandi Compose
docker compose upAvvia tutti i servizi
docker compose up -dAvvia in background
docker compose downFerma e rimuove i container
docker compose down -vRimuove anche i volumi
docker compose buildRicostruisce le immagini
docker compose logs -fSegui i log di tutti i servizi
docker compose psElenca i servizi in esecuzione
docker compose exec web bashShell in un servizio
Pattern Utili
Comandi di Pulizia
docker system prune -a # remove all unused docker container prune # remove stopped docker image prune -a # remove unused images
Ricette Rapide
Container temporaneodocker run --rm -it alpine sh
Verifica portadocker port
Variabili d'ambientedocker run -e KEY=val image
File envdocker run --env-file .env image
Restart policydocker run --restart unless-stopped image
Limite risorsedocker run --memory 512m --cpus 1 image