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.

Docker - Commands

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 :

  1. Forme Shell : CMD command param1 param2
  2. 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