Sobes.tech
Junior

Est-ce que toutes les commandes dans Dockerfile créent des couches?

sobes.tech IA

Réponse de l'IA

Oui. Chaque instruction dans un Dockerfile crée une nouvelle couche dans l’image, sauf par exemple ARG, LABEL, ENV. Ces instructions ajoutent uniquement des métadonnées ou des variables d’environnement, sans affecter le contenu du système de fichiers de la couche.

Les instructions importantes qui créent des couches :

  • FROM : Image de base à partir de laquelle la construction commence.
  • RUN : Exécuter des commandes dans le conteneur. Chaque instruction RUN est une couche séparée. Combiner des commandes en une seule instruction RUN avec && permet de réduire le nombre de couches.
  • COPY : Copier des fichiers et des répertoires de l’hôte vers le conteneur.
  • ADD : Semblable à COPY, mais peut également extraire des archives et télécharger des fichiers via URL.
  • WORKDIR : Modifier le répertoire de travail pour les instructions suivantes.
  • VOLUME : Créer un point de montage.

Exemple de démonstration des couches lors de la construction :

FROM ubuntu:latest

RUN apt-get update && apt-get install -y nginx

COPY index.html /var/www/html/

WORKDIR /app

CMD ["nginx", "-g", "daemon off;"]

Lors de la construction de ce Dockerfile, chaque instruction FROM, RUN, COPY, WORKDIR, CMD (bien que CMD et ENTRYPOINT ne créent techniquement pas une couche dans le système de fichiers, ils créent une couche de configuration) forme sa propre couche, qui est mise en cache par Docker. Les différents types d’instructions et leur impact sur les couches :

Instruction Crée une couche du système de fichiers ? Impact
FROM Oui Image de base
RUN Oui Exécution de commandes
COPY Oui Copier des fichiers
ADD Oui Copier des fichiers (avec fonctionnalités supplémentaires)
WORKDIR Oui Modifier le répertoire
ENV Non Définir des variables d’environnement
ARG Non Définir des arguments de construction
LABEL Non Ajouter des métadonnées
VOLUME Oui Définir des points de montage
USER Oui Choisir l’utilisateur
EXPOSE Non Déclarer des ports
ENTRYPOINT Non Configurer le fichier exécutable
CMD Non Configurer la commande pour le conteneur

Moins de couches rendent les images plus légères et la construction plus rapide grâce à un meilleur cache et à la réduction de la taille de l’image. L’optimisation du Dockerfile consiste souvent à minimiser le nombre d’instructions RUN et à ordonner les commandes pour maximiser l’utilisation du cache.