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
alpineoudistrolesspour 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 /app/dist ./dist COPY /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
| Étiquette | Quand utiliser |
|---|---|
v1.2.3 | Version stable, compatible avec Semver. |
v1.2.3-rc.1 | Libé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
- Kubernetes en production : ce que personne ne vous dit avant de migrer
- CI/CD moderne : l'art de déployer en toute confiance
- Cloudflare Workers en production : ce qui change après hello world
- D1 en production : performances, limites et ce qui n'évolue pas seul
- Objets durables en production : à quoi ressemblera la facture et les limites qui surprennent
- Mise en œuvre d'indicateurs de fonctionnalités et déploiements progressifs en production
