Impara a utilizzare Docker per containerizzare le tue applicazioni e semplificare il deployment.
Docker ha rivoluzionato il modo in cui gli sviluppatori costruiscono, distribuiscono e eseguono le applicazioni. Con i container, il classico problema "funziona sulla mia macchina" diventa finalmente un ricordo del passato. In questa guida pratica vediamo come sfruttare Docker nel flusso di lavoro quotidiano.
Prima di sporcarci le mani, è importante chiarire alcuni concetti chiave:
Un Dockerfile per una app Laravel:
FROM php:8.3-fpm-alpine
# Installa dipendenze sistema
RUN apk add --no-cache
postgresql-dev
git
unzip
&& docker-php-ext-install pdo pdo_pgsql
# Installa Composer
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
WORKDIR /var/www/html
# Copia dipendenze prima del codice (cache layer)
COPY composer.json composer.lock ./
RUN composer install --no-dev --optimize-autoloader --no-interaction
# Copia il resto dell'applicazione
COPY . .
RUN php artisan config:cache
&& php artisan route:cache
&& php artisan view:cache
EXPOSE 9000
CMD ["php-fpm"]
Un docker-compose.yml completo per un progetto Laravel:
services:
app:
build: .
volumes:
- .:/var/www/html
depends_on:
- db
- redis
environment:
DB_HOST: db
REDIS_HOST: redis
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- .:/var/www/html
- ./docker/nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- app
db:
image: postgres:16-alpine
environment:
POSTGRES_DB: myapp
POSTGRES_USER: user
POSTGRES_PASSWORD: secret
volumes:
- db_data:/var/lib/postgresql/data
redis:
image: redis:7-alpine
volumes:
db_data:
I comandi Docker che userai ogni giorno:
# Avvia tutti i servizi in background
docker compose up -d
# Visualizza i log in tempo reale
docker compose logs -f app
# Esegui un comando in un container running
docker compose exec app php artisan migrate
# Entra nella shell di un container
docker compose exec app sh
# Ricostruisci l'image dopo modifiche al Dockerfile
docker compose build --no-cache app
# Ferma e rimuovi container (mantiene i volumi)
docker compose down
# Ferma e rimuovi tutto, inclusi i volumi
docker compose down -v
Riduci drasticamente la dimensione dell'image finale con i multi-stage build:
# Stage 1: build delle dipendenze Node
FROM node:20-alpine AS frontend
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
# Stage 2: build PHP
FROM php:8.3-fpm-alpine AS backend
COPY --from=frontend /app/public/build /var/www/html/public/build
# ... resto della configurazione PHP
# Stage 3: image finale minimale
FROM php:8.3-fpm-alpine AS production
COPY --from=backend /var/www/html /var/www/html
# Solo i file necessari, niente tool di build
latest in produzione — Specifica sempre la versione esatta dell'image.dockerignore — Escludi node_modules, .git, log, .env dall'imageDocker semplifica enormemente la gestione degli ambienti di sviluppo e rende il deploy prevedibile e riproducibile. Una volta che hai containerizzato la tua app, scalare su Kubernetes o migrare su un nuovo server diventa un'operazione di pochi minuti.
Inizia con docker compose up e non tornerai più indietro.