📝 BLOG

Docker e Containerizzazione: Concetti Base e Utilizzo

Docker impacchetta le applicazioni in container per un deployment consistente e portabile. Questa guida copre i fondamenti di Docker, la scrittura di Dockerfile e la gestione dei container.

Ultimo aggiornamento:

Preparato da: Gsetsoft

Docker e Containerizzazione: Concetti Base e Utilizzo

Cos'è Docker?

Docker è una piattaforma che impacchetta applicazioni e le loro dipendenze in container. I container sono ambienti di runtime leggeri e isolati.

VM vs Container: Le macchine virtuali eseguono un sistema operativo completo (GB). I container condividono il kernel del SO host e occupano MB.

Coerenza: Risolve il problema 'funziona sulla mia macchina'. Gli ambienti di sviluppo, test e produzione usano lo stesso container.

Portabilità: I container funzionano su qualsiasi piattaforma compatibile con Docker (Linux, Windows, Mac, cloud).

Concetti Fondamentali di Docker

Image: Modello per un container. Archiviata come layer di sola lettura. Costruita da un Dockerfile.

Container: Istanza in esecuzione di un'immagine. Ogni container viene eseguito come processo isolato.

Dockerfile: File di testo che definisce come costruire un'immagine. Contiene istruzioni come FROM, RUN, COPY, CMD.

Registry: Repository che archivia e distribuisce immagini. Docker Hub è il registry pubblico più popolare.

Volume: Storage usato per persistere i dati del container. I dati vengono conservati anche se il container viene eliminato.

Scrittura di un Dockerfile

FROM node:18-alpine: Usate Node.js 18 (Alpine Linux) come immagine base. Alpine è un'immagine base di piccole dimensioni.

WORKDIR /app: Impostate la directory di lavoro su /app. Tutti i comandi successivi vengono eseguiti in questa directory.

COPY package*.json ./: Copiate package.json e package-lock.json. Installate le dipendenze con RUN npm install.

COPY . .: Copiate tutto il codice sorgente. Create il build di produzione con RUN npm run build.

EXPOSE 3000: Specificate che il container ascolta sulla porta 3000. Definite il comando da eseguire all'avvio del container con CMD ["npm", "start"].

Comandi Base di Docker

docker build -t myapp:1.0 .: Costruite l'immagine da Dockerfile. Taggate l'immagine con nome:versione usando -t.

docker run -p 3000:3000 myapp:1.0: Eseguite il container. Mappate la porta host alla porta del container con -p.

docker ps: Elencate i container in esecuzione. docker ps -a: Elencate tutti i container (inclusi quelli fermati).

docker stop <container_id>: Fermate il container. docker rm <container_id>: Rimuovete il container.

docker images: Elencate le immagini locali. docker rmi <image_id>: Rimuovete l'immagine.

Docker Compose

Docker Compose è uno strumento per definire e gestire applicazioni multi-container. Configurato con file docker-compose.yml.

Servizi: Ogni servizio è un container. Definite servizi come web (frontend), api (backend), db (database).

Volumes: Definite volumes per la persistenza dei dati. networks: Create networks per la comunicazione inter-servizio.

docker compose up: Avviate tutti i servizi. docker compose down: Fermate e rimuovete tutti i servizi.

docker compose up -d: Eseguite in modalità detached (background). docker compose logs -f: Seguite i log.

Migliori Pratiche

Immagini piccole: Usate immagini base Alpine o distroless. Rimuovete le dipendenze di build dall'immagine finale con multi-stage build.

Layer caching: COPY le dipendenze (che cambiano raramente) prima, il codice (che cambia frequentemente) dopo. Questo ottimizza il build cache.

.dockerignore: Ignorate i file inutili (node_modules, .git, logs). Questo riduce il build context.

Sicurezza: Usate utente non-root invece di root. Create un utente con RUN adduser --disabled-password appuser.

Health check: Usate l'istruzione HEALTHCHECK per eseguire il controllo di salute del container. Docker riavvia automaticamente i container unhealthy.

La tua scelta sulla privacy

I cookie essenziali gestiscono sicurezza e sessioni. Contiamo le visite di base; con il consenso attiviamo analisi aggiuntive. Informativa cookie