Construire les images avant de démarrer les conteneurs
Dans les étapes précédentes, nous avons utilisé des images Docker pré-construites depuis Docker Hub (comme nginx:latest). Cependant, vous aurez souvent besoin de construire vos propres images Docker personnalisées pour vos applications.
Docker Compose peut automatiquement construire les images définies dans votre fichier docker-compose.yml avant de démarrer les services. Cela se fait généralement en spécifiant un contexte de build au lieu d'un nom d'image pour un service.
Modifions notre fichier docker-compose.yml pour construire une simple image Nginx personnalisée.
D'abord, créez un nouveau répertoire nommé nginx_custom dans ~/project.
cd ~/project
mkdir nginx_custom
Maintenant, créez un Dockerfile dans le répertoire nginx_custom.
nano ~/project/nginx_custom/Dockerfile
Ajoutez le contenu suivant au Dockerfile :
FROM nginx:latest
RUN echo '<h1>Hello from Custom Nginx!</h1>' >/usr/share/nginx/html/index.html
Ce Dockerfile part de l'image officielle nginx:latest puis remplace le fichier index.html par défaut par un contenu personnalisé.
Ensuite, modifiez votre fichier ~/project/docker-compose.yml pour utiliser ce Dockerfile afin de construire l'image du service web. Ouvrez le fichier pour l'éditer :
nano ~/project/docker-compose.yml
Modifiez la définition du service web pour utiliser build au lieu de image :
version: "3.8"
services:
web:
build: ./nginx_custom
ports:
- "80:80"
Maintenant, lorsque vous exécuterez docker compose up, Docker Compose construira d'abord l'image définie par le Dockerfile dans le répertoire ./nginx_custom puis démarrera un conteneur utilisant cette nouvelle image.
Assurez-vous d'être dans le répertoire ~/project et exécutez :
cd ~/project
docker compose up -d
Vous verrez une sortie indiquant que Docker Compose construit l'image puis crée et démarre le conteneur.
Pour vérifier que la page Nginx personnalisée est servie, utilisez curl :
curl http://localhost
Vous devriez voir le résultat <h1>Hello from Custom Nginx!</h1>, confirmant que l'image a été construite et que le conteneur fonctionne avec le contenu personnalisé.
Pour nettoyer, arrêtez les services en cours d'exécution :
cd ~/project
docker compose down