Docker
Produção
Imagens
Segurança
DevOps
Containerização

Docker per la produzione: creazione di immagini leggere e sicure

Docker per la produzione: creazione di immagini leggere e sicure

Docker ha trasformato la distribuzione del software, ma l'utilizzo dei contenitori in produzione richiede disciplina. Le immagini di grandi dimensioni aumentano i costi di archiviazione e i tempi di distribuzione, mentre le vulnerabilità possono esporre il tuo ambiente ad attacchi. Questa guida presenta le migliori pratiche che garantiscono immagini leggere, sicure e con possibilità di versione.

Buone pratiche essenziali

  • Build in più fasi, compila il codice in una fase e copia solo gli artefatti finali.
  • Immagini di base minimaliste, preferisci alpine o distroless per ridurre la superficie di attacco.
  • Non includere mai le credenziali, .env file, chiavi o token non devono mai essere copiati nell'immagine.
  • Esegui come utente non root, crea un utente dedicato e configura il contenitore per utilizzarlo.
  • Versione senza latest, utilizza tag semantici (v1.2.3) per tracciabilità e rollback.

Esempio snello di Dockerfile multi-fase (Node.js), 9 righe

FROM node:20-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm ci --only=production COPY . . RUN npm run build # gera artefatos estáticos FROM gcr.io/distroless/nodejs20 WORKDIR /app COPY --from=builder /app/dist ./dist COPY --from=builder /app/node_modules ./node_modules USER nonroot EXPOSE 3000 CMD ["dist/index.js"]

Lista di controllo per la sicurezza delle immagini

  • Scansiona le vulnerabilità con Trivy, Clair o Snyk.
  • Controlla i livelli non necessari (docker history).
  • Definisci utente non root in Dockerfile.
  • Rimuovi file temporanei (npm cache clean --force).
  • Firma l'immagine utilizzando Docker Content Trust per garantirne l'integrità.

Strategia di versione

EtichettaQuando utilizzare
v1.2.3Rilascio stabile, compatibile con semver.
v1.2.3-rc.1Rilascio del candidato per il test.
v1.2.3-sha.<commit>Compilazione automatizzata per CI, tracciabile.

Integrazione CI/CD semplificata (azioni GitHub), 7 righe

name: Build & Push Docker Image on: push: branches: [main] jobs: docker: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Build image run: docker build -t myapp:$ . - name: Login to Docker Hub uses: docker/login-action@v2 with: username: $ password: $ - name: Push image run: docker push myapp:$

Conclusione

Applicando queste pratiche si ottengono immagini più piccole, più sicure e facilmente modificabili, riducendo i costi operativi e mitigando il rischio di vulnerabilità in produzione.


Quali strategie Docker avete già adottato? Condividi nei commenti!

Leggi anche