Construire des services avec arguments de build et sans cache
Dans cette étape, nous allons explorer deux options avancées de construction avec Docker Compose : l'utilisation d'arguments de build et la construction sans cache.
Les arguments de build (build arguments) permettent de passer des variables au processus de construction Docker. Ceci est utile pour personnaliser la construction selon différents environnements ou configurations sans modifier le Dockerfile
lui-même.
Commencez par modifier notre Dockerfile
pour accepter un argument de build. Ouvrez le Dockerfile
pour édition :
nano ~/project/Dockerfile
Modifiez le contenu comme suit :
FROM ubuntu:latest
ARG MESSAGE="Hello from build argument!"
RUN apt-get update && apt-get install -y cowsay
CMD ["cowsay", "$MESSAGE"]
Nous avons ajouté une instruction ARG MESSAGE
pour définir un argument de build nommé MESSAGE
avec une valeur par défaut. Nous avons également modifié l'instruction CMD
pour utiliser cet argument.
Enregistrez le Dockerfile
en appuyant sur Ctrl + X
, puis Y
, et Entrée
.
Maintenant, modifions notre fichier docker-compose.yml
pour passer une valeur à cet argument de build. Ouvrez le fichier pour édition :
nano ~/project/docker-compose.yml
Modifiez le contenu comme suit :
version: "3.8"
services:
cow:
build:
context: .
args:
MESSAGE: "Custom message from Compose!"
Nous avons transformé la directive build:
en un objet avec context:
et args:
.
context: .
spécifie le contexte de build, c'est-à-dire le répertoire contenant le Dockerfile
.
args:
est un mapping d'arguments de build à passer au Dockerfile
. Nous passons la valeur "Custom message from Compose!"
à l'argument MESSAGE
.
Enregistrez le fichier docker-compose.yml
en appuyant sur Ctrl + X
, puis Y
, et Entrée
.
Maintenant, construisons l'image avec l'argument de build. Assurez-vous d'être dans le répertoire ~/project
.
cd ~/project
docker-compose build
Observez la sortie de la construction. Vous devriez voir que l'argument de build est utilisé pendant le processus.
Une fois la construction terminée, exécutons un conteneur à partir de cette image pour voir le résultat.
docker run project_cow
Vous devriez voir la sortie de cowsay
avec le message "Custom message from Compose!". Ceci confirme que l'argument de build a bien été transmis et utilisé.
Parfois, vous pourriez vouloir forcer Docker à reconstruire toutes les couches, en ignorant le cache. Ceci est utile lorsque vous suspectez des problèmes de cache ou souhaitez garantir une construction propre. Vous pouvez le faire en utilisant le flag --no-cache
avec la commande docker-compose build
.
Essayons de reconstruire l'image avec le flag --no-cache
.
docker-compose build --no-cache
Observez à nouveau la sortie de la construction. Cette fois, vous verrez que Docker n'utilise aucune couche mise en cache et reconstruit chaque étape du Dockerfile
. Ce processus prendra plus de temps qu'une construction avec cache.
Une fois la construction terminée, vous pouvez exécuter à nouveau le conteneur pour confirmer que le message est toujours celui passé via l'argument de build.
docker run project_cow
Vous devriez toujours voir "Custom message from Compose!". Le flag --no-cache
n'affecte que le processus de construction, pas la configuration définie dans docker-compose.yml
.