Le Dockerfile đł
Un Dockerfile est un fichier de configuration qui définit comment construire une image Docker. Il contient une série d'instructions qui sont exécutées dans l'ordre pour créer un environnement reproductible. Voici une liste des éléments les plus courants dans un Dockerfile, leur utilité et les options associées.
1. FROM
â đŠ DĂ©finir l'image de base
L'instruction FROM
définit l'image de base à utiliser pour construire l'image Docker.
FROM ubuntu:20.04
Options courantes :
<image>:<tag>
: Spécifie une image et un tag (par exemple,alpine:latest
).AS <name>
: Définit un alias pour une image intermédiaire utilisée dans un build multi-étape.
Exemple :
FROM node:18 AS builder
2. RUN
â ⥠ExĂ©cuter des commandes
L'instruction RUN
exécute des commandes durant la construction de l'image.
RUN apt-get update && apt-get install -y curl
Options courantes :
--mount=type=cache,target=<dir>
: Permet de mettre en cache certains fichiers pour optimiser le build.
Exemple :
RUN --mount=type=cache,target=/root/.cache apt-get update
3. COPY
â đ Copier des fichiers locaux
COPY
permet de copier des fichiers ou dossiers locaux dans l'image.
COPY . /app
Options courantes :
--chown=<user>:<group>
: Change le propriétaire des fichiers copiés.--from=<stage>
: Permet de copier des fichiers dâun autre build stage.
Exemple :
COPY --from=builder /app/dist /app
4. ADD
â đŠ Ajouter des fichiers avec extraction automatique
ADD
est similaire Ă COPY
, mais il supporte aussi l'extraction des archives.
ADD my-archive.tar.gz /app
Remarque : COPY
est souvent préféré à ADD
, sauf si l'on a besoin d'extraire un fichier compressé automatiquement.
5. WORKDIR
â đ DĂ©finir le rĂ©pertoire de travail
Définit le répertoire de travail pour les instructions suivantes.
WORKDIR /app
6. ENV
â đ DĂ©finir des variables d'environnement
Permet de dĂ©finir des variables dâenvironnement accessibles dans le conteneur.
ENV NODE_ENV=production
7. EXPOSE
â đ Documenter les ports utilisĂ©s
EXPOSE
indique les ports sur lesquels le conteneur va écouter.
EXPOSE 3000
8. CMD
â đ DĂ©finir la commande par dĂ©faut
CMD
définit la commande exécutée lorsque le conteneur démarre.
CMD ["node", "app.js"]
9. ENTRYPOINT
â đŻ DĂ©finir un point dâentrĂ©e
ENTRYPOINT
permet de définir une commande fixe qui sera toujours exécutée.
ENTRYPOINT ["/entrypoint.sh"]
10. VOLUME
â đŸ DĂ©clarer un volume
VOLUME
permet de persister des données en dehors du cycle de vie du conteneur.
VOLUME /data
11. ARG
â đ§ DĂ©finir des variables pour le build
ARG
permet de passer des variables au moment du build.
ARG APP_VERSION=1.0.0
12. LABEL
â đ·ïž Ajouter des mĂ©tadonnĂ©es
LABEL
permet dâajouter des informations descriptives Ă lâimage.
LABEL maintainer="mon-email@example.com"
13. HEALTHCHECK
â â€ïž VĂ©rifier la santĂ© du conteneur
HEALTHCHECK
permet de définir une commande pour vérifier si un conteneur est toujours fonctionnel.
HEALTHCHECK --interval=30s --timeout=10s --retries=3 \
CMD curl -f http://localhost:3000 || exit 1
14. USER
â đ€ Changer lâutilisateur dâexĂ©cution
USER
permet dâexĂ©cuter le conteneur avec un utilisateur spĂ©cifique.
USER 1000:1000
15. ONBUILD
â đ ExĂ©cuter une commande pour les builds dĂ©rivĂ©s
ONBUILD
permet dâexĂ©cuter une commande lorsque lâimage est utilisĂ©e comme base pour une autre.
ONBUILD COPY . /app
đ Exemple complet dâun Dockerfile
FROM node:18
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
đŻ Conclusion
Un Dockerfile bien structurĂ© permet dâoptimiser la crĂ©ation dâimages Docker et dâamĂ©liorer leur maintenabilitĂ©. Lâutilisation judicieuse des instructions permet de rendre les builds plus rapides, lĂ©gers et sĂ©curisĂ©s.
Si vous avez des questions ou des suggestions, nâhĂ©sitez pas Ă laisser un commentaire ! đđł
Un Dockerfile est un fichier de configuration qui définit comment construire une image Docker. Il contient une série d'instructions qui sont exécutées dans l'ordre pour créer un environnement reproductible. Voici une liste des éléments les plus courants dans un Dockerfile, leur utilité et les options associées.
1. FROM
â DĂ©finir l'image de base
L'instruction FROM
définit l'image de base à utiliser pour construire l'image Docker.
FROM ubuntu:20.04
Options courantes :
<image>:<tag>
: Spécifie une image et un tag (par exemple,alpine:latest
).AS <name>
: Définit un alias pour une image intermédiaire utilisée dans un build multi-étape.
Exemple :
FROM node:18 AS builder
2. RUN
â ExĂ©cuter des commandes
L'instruction RUN
exécute des commandes durant la construction de l'image.
RUN apt-get update && apt-get install -y curl
Options courantes :
--mount=type=cache,target=<dir>
: Permet de mettre en cache certains fichiers pour optimiser le build.
Exemple :
RUN --mount=type=cache,target=/root/.cache apt-get update
3. COPY
â Copier des fichiers locaux
COPY
permet de copier des fichiers ou dossiers locaux dans l'image.
COPY . /app
Options courantes :
--chown=<user>:<group>
: Change le propriétaire des fichiers copiés.--from=<stage>
: Permet de copier des fichiers dâun autre build stage.
Exemple :
COPY --from=builder /app/dist /app
4. ADD
â Ajouter des fichiers avec extraction automatique
ADD
est similaire Ă COPY
, mais il supporte aussi l'extraction des archives.
ADD my-archive.tar.gz /app
Remarque : COPY
est souvent préféré à ADD
, sauf si l'on a besoin d'extraire un fichier compressé automatiquement.
5. WORKDIR
â DĂ©finir le rĂ©pertoire de travail
Définit le répertoire de travail pour les instructions suivantes.
WORKDIR /app
Remarque : Il est prĂ©fĂ©rable dâutiliser WORKDIR
plutĂŽt que RUN cd /app && ...
pour éviter des erreurs de contexte.
6. ENV
â DĂ©finir des variables d'environnement
Permet de dĂ©finir des variables dâenvironnement accessibles dans le conteneur.
ENV NODE_ENV=production
7. EXPOSE
â Documenter les ports utilisĂ©s
EXPOSE
indique les ports sur lesquels le conteneur va écouter.
EXPOSE 3000
Remarque : EXPOSE
ne publie pas réellement le port, il sert juste à la documentation. Il faut utiliser docker run -p 3000:3000
pour exposer un port.
8. CMD
â DĂ©finir la commande par dĂ©faut
CMD
définit la commande exécutée lorsque le conteneur démarre.
CMD ["node", "app.js"]
Remarque : CMD
est souvent utilisé pour exécuter un programme par défaut. Si un argument est fourni lors du docker run
, il remplace CMD
.
9. ENTRYPOINT
â DĂ©finir un point dâentrĂ©e
ENTRYPOINT
permet de définir une commande fixe qui sera toujours exécutée.
ENTRYPOINT ["/entrypoint.sh"]
Différence entre CMD
et ENTRYPOINT
CMD
peut ĂȘtre remplacĂ© en ligne de commande (docker run mon-image bash
).ENTRYPOINT
force lâexĂ©cution dâune commande spĂ©cifique (utilisĂ© par exemple pour des conteneurs commenginx
).
10. VOLUME
â DĂ©clarer un volume
VOLUME
permet de persister des données en dehors du cycle de vie du conteneur.
VOLUME /data
11. ARG
â DĂ©finir des variables pour le build
ARG
permet de passer des variables au moment du build.
ARG APP_VERSION=1.0.0
Utilisation avec docker build
:
docker build --build-arg APP_VERSION=2.0.0 .
12. LABEL
â Ajouter des mĂ©tadonnĂ©es
LABEL
permet dâajouter des informations descriptives Ă lâimage.
LABEL maintainer="mon-email@example.com"
13. HEALTHCHECK
â VĂ©rifier la santĂ© du conteneur
HEALTHCHECK
permet de définir une commande pour vérifier si un conteneur est toujours fonctionnel.
HEALTHCHECK --interval=30s --timeout=10s --retries=3 \
CMD curl -f http://localhost:3000 || exit 1
14. USER
â Changer lâutilisateur dâexĂ©cution
USER
permet dâexĂ©cuter le conteneur avec un utilisateur spĂ©cifique.
USER 1000:1000
15. ONBUILD
â ExĂ©cuter une commande pour les builds dĂ©rivĂ©s
ONBUILD
permet dâexĂ©cuter une commande lorsque lâimage est utilisĂ©e comme base pour une autre.
ONBUILD COPY . /app
Exemple complet dâun Dockerfile
FROM node:18
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
Conclusion
Un Dockerfile bien structurĂ© permet dâoptimiser la crĂ©ation dâimages Docker et dâamĂ©liorer leur maintenabilitĂ©. Lâutilisation judicieuse des instructions permet de rendre les builds plus rapides, lĂ©gers et sĂ©curisĂ©s.