Docker - Instructions Commands
Bonjour là-bas, futurs magiciens de Docker ! Je suis ravi de vous guider dans cette excitante aventure à travers le monde des commandes Docker. En tant que quelqu'un qui enseigne l'informatique depuis des années, je peux vous dire que Docker est comme une baguette magique pour les développeurs. Il rend nos vies tellement plus faciles ! Alors, mettons nos manches et plongons dans le fascinant royaume des commandes d'instruction Docker.
Instruction CMD
L'instruction CMD est comme le personnage principal dans un film - c'est l'étoile du spectacle när il s'agit de conteneurs Docker. Elle indique à Docker quelle commande exécuter lorsque votre conteneur démarre.
Syntaxe de Base
CMD ["executable", "param1", "param2"]
Reprenons cela avec un exemple simple :
FROM ubuntu
CMD ["echo", "Hello, Docker World!"]
Dans ce cas, lorsque vous exécutez votre conteneur, il affichera "Hello, Docker World!" dans la console. C'est comme si votre conteneur vous faisait un signe de la main dès qu'il se réveille !
Instructions CMD Multiples
Voici une petite question piège : Que se passe-t-il si vous avez plusieurs instructions CMD dans votre Dockerfile ?
FROM ubuntu
CMD ["echo", "First command"]
CMD ["echo", "Second command"]
Si vous avez deviné que les deux commandes s'exécutent, je crains que vous ayez fallen dans un piège commun ! En réalité, seule la dernière instruction CMD sera exécutée. C'est comme dans une pièce de théâtre - seule la dernière action compte !
Forme Shell vs. Forme Exec
CMD peut être écrit en deux formes :
- Forme Shell :
CMD command param1 param2
- Forme Exec :
CMD ["executable", "param1", "param2"]
La forme Exec est préférée car elle est plus explicite et évite les problèmes de parsing du shell.
ENTRYPOINT
Si CMD est le personnage principal, ENTRYPOINT est le réalisateur de notre film Docker. Il définit la commande principale du conteneur, qui ne peut pas être remplacée lorsque le conteneur démarre.
Syntaxe de Base
ENTRYPOINT ["executable", "param1", "param2"]
Voyons un exemple :
FROM ubuntu
ENTRYPOINT ["echo", "Hello from"]
CMD ["Docker"]
Lorsque vous exécutez ce conteneur, il affichera "Hello from Docker". Mais voici où cela devient intéressant ! Si vous exécutez le conteneur avec des arguments supplémentaires, ils remplaceront la CMD mais pas l'ENTRYPOINT.
docker run myimage World
Cela affichera "Hello from World". C'est comme si ENTRYPOINT mettait en place la scène, et CMD (ou les arguments d'exécution) étaient les acteurs qui jouent dessus !
ENV
ENV est comme le département de costumes de notre production Docker. Il définit les variables d'environnement qui peuvent être utilisées dans tout le conteneur.
Syntaxe de Base
ENV key=value
Voici un exemple pratique :
FROM ubuntu
ENV MY_NAME="Docker Enthusiast"
CMD ["sh", "-c", "echo Hello, $MY_NAME!"]
Cela affichera "Hello, Docker Enthusiast!" lorsque le conteneur démarre. C'est comme donner à votre conteneur un étiquette de nom !
Instructions ENV Multiples
Contrairement à CMD, vous pouvez avoir plusieurs instructions ENV, et elles toutes prennent effet :
FROM ubuntu
ENV MY_NAME="Docker Enthusiast"
ENV MY_DOG=Rex MY_CAT=Fluffy
CMD ["sh", "-c", "echo Hello, $MY_NAME! Your pets are $MY_DOG and $MY_CAT."]
Ce conteneur vous saluera et vous présentera vos animaux de compagnie !
WORKDIR
WORKDIR est comme le concepteur de décors pour notre production Docker. Il définit le répertoire de travail pour toutes les commandes qui suivent dans le Dockerfile.
Syntaxe de Base
WORKDIR /path/to/directory
Voyons-le en action :
FROM ubuntu
WORKDIR /app
COPY . .
CMD ["ls", "-l"]
Ce Dockerfile définit le répertoire de travail à /app
, copie le contenu du répertoire actuel dedans, et liste le contenu lorsque le conteneur démarre. C'est comme dire à votre conteneur : "Hey, installez-vous dans ce répertoire !"
Instructions WORKDIR Multiples
Vous pouvez utiliser WORKDIR plusieurs fois pour changer de répertoires :
FROM ubuntu
WORKDIR /app
WORKDIR src
WORKDIR scripts
RUN pwd
Cela affichera /app/src/scripts
. C'est comme donner à votre conteneur une visite de sa nouvelle maison !
Mettre Tout Ensemble
Maintenant que nous avons rencontré toutes nos commandes d'instruction Docker, voyons comment elles travaillent ensemble dans un scénario du monde réel. Imaginez que nous créons une simple application web Python :
FROM python:3.9-slim
# Définir les variables d'environnement
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# Définir le répertoire de travail
WORKDIR /app
# Installer les dépendances
COPY requirements.txt .
RUN pip install -r requirements.txt
# Copier le projet
COPY . .
# Commande pour exécuter l'application
ENTRYPOINT ["python"]
CMD ["app.py"]
Ce Dockerfile configure un environnement Python, installe les dépendances, copie notre code d'application, et spécifie comment exécuter l'application. C'est comme une recette pour créer le parfait environnement pour notre application Python !
Résumé des Commandes
Voici un tableau de réference rapide des commandes que nous avons couvertes :
Commande | Description | Exemple |
---|---|---|
CMD | Spécifie la commande à exécuter lorsque le conteneur démarre | CMD ["python", "app.py"] |
ENTRYPOINT | Définit la commande principale du conteneur | ENTRYPOINT ["python"] |
ENV | Définit les variables d'environnement | ENV MY_VAR=value |
WORKDIR | Définit le répertoire de travail | WORKDIR /app |
Souvenez-vous, ces commandes sont comme les blocs de construction de votre conteneur Docker. Mixez-les et combinez-les pour créer le parfait environnement pour votre application !
Et voilà, mes chers étudiants ! Nous avons traversé le pays des commandes d'instruction Docker, de la star du CMD au réalisateur ENTRYPOINT, du costume ENV au concepteur de décors WORKDIR. J'espère que ce guide a éclairé votre chemin dans vos aventures Docker. Souvenez-vous, la pratique fait toujours parfait, alors n'ayez pas peur d'expérimenter avec ces commandes. Bon Dockering !
Credits: Image by storyset