⚠️ Traduction non officielle - Cette documentation est une traduction communautaire non officielle de Docker.

Écrire un Dockerfile

Explication

Un Dockerfile est un document textuel utilisé pour créer une image de conteneur. Il fournit des instructions au constructeur d'images sur les commandes à exécuter, les fichiers à copier, la commande de démarrage, etc.

Par exemple, le Dockerfile suivant produirait une application Python prête à l'emploi :

FROM python:3.12
WORKDIR /usr/local/app

# Installer les dépendances de l'application
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

# Copier le code source
COPY src ./src
EXPOSE 5000

# Configurer un utilisateur d'application pour que le conteneur ne s'exécute pas en tant qu'utilisateur root
RUN useradd app
USER app

CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8080"]

Instructions courantes

Certaines des instructions les plus courantes dans un Dockerfile incluent :

  • FROM <image> - spécifie l'image de base que la construction étendra.
  • WORKDIR <path> - cette instruction spécifie le "répertoire de travail" ou le chemin dans l'image où les fichiers seront copiés et les commandes seront exécutées.
  • COPY <host-path> <image-path> - cette instruction indique au constructeur de copier des fichiers de l'hôte et de les placer dans l'image du conteneur.
  • RUN <command> - cette instruction indique au constructeur d'exécuter la commande spécifiée.
  • ENV <name> <value> - cette instruction définit une variable d'environnement qu'un conteneur en cours d'exécution utilisera.
  • EXPOSE <port-number> - cette instruction définit une configuration sur l'image qui indique un port que l'image souhaite exposer.
  • USER <user-or-uid> - cette instruction définit l'utilisateur par défaut pour toutes les instructions suivantes.
  • CMD ["<command>", "<arg1>"] - cette instruction définit la commande par défaut qu'un conteneur utilisant cette image exécutera.

Pour lire toutes les instructions ou entrer dans les détails, consultez la référence Dockerfile.

Essayez-le

Tout comme vous l'avez vu avec l'exemple précédent, un Dockerfile suit généralement ces étapes :

  1. Déterminez votre image de base
  2. Installez les dépendances de l'application
  3. Copiez tout code source et/ou binaires pertinents
  4. Configurez l'image finale

Dans ce guide pratique rapide, vous allez écrire un Dockerfile qui construit une simple application Node.js. Si vous n'êtes pas familier avec les applications basées sur JavaScript, ne vous inquiétez pas. Ce n'est pas nécessaire pour suivre ce guide.

Configuration

Téléchargez ce fichier ZIP et extrayez le contenu dans un répertoire de votre machine.

Création du Dockerfile

Maintenant que vous avez le projet, vous êtes prêt à créer le Dockerfile.

  1. Téléchargez et installez Docker Desktop.

  2. Créez un fichier nommé Dockerfile dans le même dossier que le fichier package.json.

    Extensions de fichier Dockerfile

    Il est important de noter que le Dockerfile n'a aucune extension de fichier. Certains éditeurs ajouteront automatiquement une extension au fichier (ou se plaindront qu'il n'en a pas).

  3. Dans le Dockerfile, définissez votre image de base en ajoutant la ligne suivante :

    FROM node:20-alpine
  4. Maintenant, définissez le répertoire de travail en utilisant l'instruction WORKDIR. Cela spécifiera où les futures commandes s'exécuteront et le répertoire où les fichiers seront copiés à l'intérieur de l'image du conteneur.

    WORKDIR /app
  5. Copiez tous les fichiers de votre projet sur votre machine dans l'image du conteneur en utilisant l'instruction COPY :

    COPY . .
  6. Installez les dépendances de l'application en utilisant le gestionnaire de paquets et la CLI yarn. Pour ce faire, exécutez une commande en utilisant l'instruction RUN :

    RUN yarn install --production
  7. Enfin, spécifiez la commande par défaut à exécuter en utilisant l'instruction CMD :

    CMD ["node", "./src/index.js"]

    Et avec cela, vous devriez avoir le Dockerfile suivant :

    FROM node:20-alpine
    WORKDIR /app
    COPY . .
    RUN yarn install --production
    CMD ["node", "./src/index.js"]

Ce Dockerfile n'est pas encore prêt pour la production

Il est important de noter que ce Dockerfile ne suit pas encore toutes les meilleures pratiques (par conception). Il construira l'application, mais les constructions ne seront pas aussi rapides, ou les images aussi sécurisées, qu'elles pourraient l'être.

Continuez à lire pour en savoir plus sur la façon de faire en sorte que l'image maximise le cache de construction, s'exécute en tant qu'utilisateur non root et les constructions multi-étapes.

Conteneurisez rapidement de nouveaux projets avec docker init

La commande docker init analysera votre projet et créera rapidement un Dockerfile, un compose.yaml et un .dockerignore, vous aidant à vous lancer. Comme vous apprenez ici spécifiquement les Dockerfiles, vous ne l'utiliserez pas maintenant. Mais, en savoir plus ici.

Ressources supplémentaires

Pour en savoir plus sur l'écriture d'un Dockerfile, consultez les ressources suivantes :

Prochaines étapes

Maintenant que vous avez créé un Dockerfile et appris les bases, il est temps d'en apprendre davantage sur la construction, le marquage et la publication des images.