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

Docker pour la production : créer des images légères et sécurisées

Docker pour la production : créer des images légères et sécurisées

Docker a transformé la livraison de logiciels, mais l'utilisation de conteneurs en production nécessite de la discipline. Les images volumineuses augmentent les coûts de stockage et les délais de déploiement, tandis que les vulnérabilités peuvent exposer votre environnement à des attaques. Ce guide présente les bonnes pratiques qui garantissent des images légères, sécurisées et versionnables.

Bonnes pratiques essentielles

  • Builds en plusieurs étapes, compilez le code en une seule étape et copiez uniquement les artefacts finaux.
  • Images de base minimalistes, préférez alpine ou distroless pour réduire la surface d'attaque.
  • N'incluez jamais d'informations d'identification, les fichiers .env, les clés ou les jetons ne doivent jamais être copiés sur l'image.
  • Exécuter en tant qu'utilisateur non root, créez un utilisateur dédié et configurez le conteneur pour l'utiliser.
  • Version sans latest, utilisez des balises sémantiques (v1.2.3) pour la traçabilité et le rollback.

Exemple Lean de Dockerfile multi-étapes (Node.js), 9 lignes

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"]

Liste de contrôle de sécurité des images

  • Scannez les vulnérabilités avec Trivy, Clair ou Snyk.
  • Vérifiez les calques inutiles (docker history).
  • Définir un utilisateur non root dans Dockerfile.
  • Supprimer les fichiers temporaires (npm cache clean --force).
  • Signez l'image à l'aide de Docker Content Trust pour garantir son intégrité.

Stratégie de gestion des versions

ÉtiquetteQuand utiliser
v1.2.3Version stable, compatible avec Semver.
v1.2.3-rc.1Libérer le candidat pour les tests.
v1.2.3-sha.<commit>Construction automatisée pour CI, traçable.

Intégration CI/CD simplifiée (GitHub Actions), 7 lignes

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:$

Conclusion

En appliquant ces pratiques, vous obtenez des images plus petites, plus sécurisées et facilement versionnables, réduisant ainsi les coûts opérationnels et atténuant le risque de vulnérabilités en production.


Quelles stratégies Docker avez-vous déjà adoptées ? Partagez dans les commentaires !

A lire aussi