CodeGym /Cours /Docker SELF /Instructions principales du Dockerfile

Instructions principales du Dockerfile

Docker SELF
Niveau 13 , Leçon 2
Disponible

3.1 Instruction FROM

Alors, pour rappel, un Dockerfile, c’est un fichier texte qui contient des instructions pour créer une image Docker. Chaque instruction dans un Dockerfile effectue une tâche spécifique et crée une nouvelle couche dans l’image. Dans cette leçon, on va détailler les instructions principales de Dockerfile : FROM, RUN, COPY et CMD, qui sont essentielles pour créer des images Docker fonctionnelles et efficaces.

L’instruction FROM définit l’image de base à partir de laquelle sera créée la nouvelle image. C’est la première instruction de n’importe quel Dockerfile, et elle détermine le point de départ pour construire l’image.

Synthaxe


FROM <image>[:<tag>] [AS <name>]

Où :

  • <image> : le nom de l’image de base.
  • <tag> : (optionnel) la version de l’image de base. Par défaut, c’est latest.
  • AS <name> : (optionnel) attribution d’un nom pour cette étape de build (utilisé dans le multi-stage build).

Exemples

Utilisation de l’image de base Ubuntu :

dockerfile


FROM ubuntu:20.04

Utilisation de l’image officielle Node.js :

dockerfile


FROM node:14

Utilisation d’un multi-stage build pour optimiser :

dockerfile


FROM node:14 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
        
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html

Dans cet exemple, deux images de base sont utilisées. La première (node:14) est utilisée pour construire l’application, et la seconde (nginx:alpine) sert à créer un serveur léger qui va servir les fichiers statiques.

Grâce à l’utilisation du multi-stage build, l’image finale contient seulement le minimum nécessaire de fichiers et de programmes (dans ce cas Nginx et les fichiers statiques construits), ce qui la rend plus légère et plus rapide à déployer.

3.2 Instruction RUN

L'instruction RUN exécute des commandes dans le conteneur et crée une nouvelle couche dans l'image. Cette instruction est utilisée pour installer des packages, configurer l'environnement et exécuter d'autres commandes nécessaires à la préparation de l'image.

Syntaxe :


RUN <command>

Où :

  • <command>: la commande qui sera exécutée dans le conteneur.

Exemples :

Installation des packages dans une image Ubuntu :

dockerfile


RUN apt-get update && apt-get install -y curl git

Compilation de code :

dockerfile


RUN gcc -o myapp myapp.c

Combiner plusieurs commandes

Pour réduire le nombre de couches, diminuer la taille de l'image et accélérer la construction, il est recommandé de combiner plusieurs commandes dans une seule instruction RUN.

dockerfile


RUN apt-get update \
    && apt-get install -y curl git \
    && rm -rf /var/lib/apt/lists/*

3.3 Instruction COPY

Instruction COPY copie des fichiers et des répertoires depuis le contexte de build vers le système de fichiers du conteneur. C'est utile pour transférer le code source, les fichiers de configuration et d'autres ressources dans le conteneur.

Syntaxe :


COPY <src> <dest>

Où :

  • <src>: chemin vers les fichiers ou répertoires dans le contexte de build.
  • <dest>: chemin de destination dans le conteneur.

Exemples :

Copie de tout le contenu du répertoire actuel dans le répertoire de travail du conteneur :

dockerfile


COPY . /app

Copie de fichiers individuels :

dockerfile


COPY package.json /app/package.json
COPY server.js /app/server.js

Utilisation de .dockerignore

Pour exclure les fichiers inutiles du processus de copie, on peut utiliser un fichier .dockerignore, qui fonctionne de manière similaire à .gitignore.

Texte


node_modules
dist
*.log

3.4 Instruction CMD

L'instruction CMD définit une commande qui sera exécutée au démarrage du conteneur. Contrairement à RUN, qui s'exécute au moment de la construction, CMD s'exécute lorsque le conteneur démarre à partir de l'image créée.

Syntaxe :


CMD ["executable","param1","param2"]

Ou


CMD command param1 param2

Où :

  • ["executable","param1","param2"]: forme exec, préférable pour garantir un bon traitement des signaux.
  • command param1 param2: forme shell, qui exécute la commande dans un shell.

Exemples :

Lancer une application Node.js :

dockerfile


CMD ["node", "app.js"]

Lancer un script shell :

dockerfile


CMD /usr/bin/myscript.sh

Différence entre CMD et ENTRYPOINT

CMD définit une commande par défaut, qui peut être remplacée au démarrage du conteneur. ENTRYPOINT définit une commande immuable qui sera toujours exécutée au démarrage du conteneur.

Exemple d'utilisation de ENTRYPOINT :

dockerfile


ENTRYPOINT ["python", "script.py"]
CMD ["arg1"]

Dans cet exemple, ENTRYPOINT lance le script Python, tandis que CMD fournit des arguments qui peuvent être modifiés au démarrage du conteneur.

Exemple Dockerfile avec les instructions principales

dockerfile

        
# Utiliser une image de base Node.js
FROM node:14
        
# Définir le répertoire de travail
WORKDIR /app
        
# Copier les fichiers package.json et package-lock.json
COPY package*.json ./
        
# Installer les dépendances
RUN npm install
        
# Copier le code source de l'application
COPY . .
        
# Exposer le port utilisé par l'application
EXPOSE 3000
        
# Définir la commande pour démarrer l'application
CMD ["node", "app.js"]
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION