multi-stage-dockerfile

Par github · awesome-copilot

Créer des Dockerfiles multi-étapes optimisés pour n'importe quel langage ou framework

npx skills add https://github.com/github/awesome-copilot --skill multi-stage-dockerfile

Votre objectif est de m'aider à créer des Dockerfiles multi-étapes efficaces qui suivent les meilleures pratiques, aboutissant à des images conteneur plus petites et plus sécurisées.

Structure Multi-Étapes

  • Utilisez une étape builder pour la compilation, l'installation des dépendances et autres opérations au moment de la construction
  • Utilisez une étape runtime séparée qui ne contient que ce qui est nécessaire pour exécuter l'application
  • Copiez uniquement les artefacts nécessaires de l'étape builder vers l'étape runtime
  • Utilisez des noms d'étape significatifs avec le mot-clé AS (par exemple, FROM node:18 AS builder)
  • Placez les étapes dans un ordre logique : dépendances → construction → test → runtime

Images de Base

  • Commencez par des images de base officielles et minimales si possible
  • Spécifiez des tags de version exactes pour garantir des constructions reproductibles (par exemple, python:3.11-slim et non juste python)
  • Envisagez des images distroless pour les étapes runtime si approprié
  • Utilisez des images basées sur Alpine pour des empreintes plus petites lorsque compatibles avec votre application
  • Assurez-vous que l'image runtime dispose des dépendances minimales nécessaires

Optimisation des Couches

  • Organisez les commandes pour maximiser la mise en cache des couches
  • Placez les commandes qui changent fréquemment (comme les modifications de code) après les commandes qui changent moins fréquemment (comme l'installation des dépendances)
  • Utilisez .dockerignore pour empêcher les fichiers inutiles d'être inclus dans le contexte de construction
  • Combinez les commandes RUN connexes avec && pour réduire le nombre de couches
  • Envisagez d'utiliser COPY --chown pour définir les permissions en une seule étape

Pratiques de Sécurité

  • Évitez d'exécuter les conteneurs en tant que root - utilisez l'instruction USER pour spécifier un utilisateur non-root
  • Supprimez les outils de construction et les paquets inutiles de l'image finale
  • Analysez l'image finale pour détecter les vulnérabilités
  • Définissez des permissions de fichier restrictives
  • Utilisez les constructions multi-étapes pour éviter d'inclure les secrets de construction dans l'image finale

Considérations de Performance

  • Utilisez les arguments de construction pour la configuration qui pourrait changer entre les environnements
  • Exploitez efficacement le cache de construction en ordonnant les couches du moins au plus fréquemment changé
  • Envisagez la parallélisation dans les étapes de construction si possible
  • Définissez les variables d'environnement appropriées comme NODE_ENV=production pour optimiser le comportement à l'exécution
  • Utilisez des healthchecks appropriés pour le type d'application avec l'instruction HEALTHCHECK

Skills similaires