Construire les images de service
Dans l'étape précédente, vous avez défini vos services en utilisant des images Docker existantes dans le fichier docker-compose.yaml
. Dans cette étape, vous apprendrez à construire des images Docker personnalisées pour vos services en utilisant des Dockerfiles, puis à les intégrer dans votre fichier docker-compose.yaml
.
Commencez par créer un répertoire simple pour notre service web et un Dockerfile à l'intérieur. Accédez au répertoire du projet si vous n'y êtes pas déjà :
cd ~/project
Créez un répertoire nommé web
et accédez-y :
mkdir web
cd web
Maintenant, créez un Dockerfile nommé Dockerfile
dans le répertoire web
en utilisant l'éditeur nano
:
nano Dockerfile
Collez le contenu suivant dans le Dockerfile
:
FROM ubuntu:latest
RUN apt-get update && apt-get install -y nginx
COPY index.html /var/www/html/
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
Ce Dockerfile effectue les opérations suivantes :
FROM ubuntu:latest
: Part de l'image de base Ubuntu la plus récente.
RUN apt-get update && apt-get install -y nginx
: Met à jour la liste des paquets et installe Nginx.
COPY index.html /var/www/html/
: Copie un fichier index.html
(que nous créerons ensuite) dans le répertoire racine web de Nginx.
EXPOSE 80
: Expose le port 80 sur le conteneur.
CMD ["nginx", "-g", "daemon off;"]
: Spécifie la commande à exécuter au démarrage du conteneur, qui consiste à démarrer Nginx en premier plan.
Enregistrez le Dockerfile en appuyant sur Ctrl + X
, puis Y
, et Entrée
.
Maintenant, créons le fichier index.html
que le Dockerfile copie. Restez dans le répertoire ~/project/web
et créez le fichier :
nano index.html
Collez le contenu HTML simple suivant dans index.html
:
<!doctype html>
<html>
<head>
<title>Hello from Docker!</title>
</head>
<body>
<h1>Welcome to my Dockerized Nginx!</h1>
<p>This page is served from a custom Docker image.</p>
</body>
</html>
Enregistrez le fichier index.html
en appuyant sur Ctrl + X
, puis Y
, et Entrée
.
Maintenant, retournez au répertoire racine du projet où se trouve votre fichier docker-compose.yaml
:
cd ~/project
Nous devons modifier le fichier docker-compose.yaml
pour construire le service web
à partir du Dockerfile que nous venons de créer, au lieu d'utiliser une image pré-construite. Ouvrez le fichier docker-compose.yaml
pour le modifier :
nano docker-compose.yaml
Modifiez la définition du service web
pour utiliser l'instruction build
au lieu de image
:
version: "3.8"
services:
web:
build: ./web
ports:
- "80:80"
db:
image: postgres:latest
environment:
POSTGRES_PASSWORD: mysecretpassword
Ici, build: ./web
indique à Docker Compose de construire l'image pour le service web
en utilisant le Dockerfile situé dans le répertoire ./web
relatif au fichier docker-compose.yaml
.
Enregistrez le fichier docker-compose.yaml
modifié en appuyant sur Ctrl + X
, puis Y
, et Entrée
.
Maintenant, vous pouvez construire les images définies dans votre fichier docker-compose.yaml
en utilisant la commande docker-compose build
. Comme Docker Compose n'est pas pré-installé, vous devez d'abord l'installer.
sudo apt-get update
sudo apt-get install docker-compose-plugin -y
Après avoir installé le plugin Docker Compose, vous pouvez utiliser la commande docker compose
(notez l'espace au lieu d'un trait d'union dans les versions plus récentes).
docker compose build
Cette commande lira votre fichier docker-compose.yaml
et construira l'image pour le service web
basée sur le Dockerfile
dans le répertoire ./web
. Elle récupérera également l'image postgres:latest
pour le service db
si elle n'est pas déjà présente. Vous verrez une sortie indiquant le processus de construction pour l'image web
.
Une fois la construction terminée, vous pouvez lister les images Docker sur votre système pour voir la nouvelle image construite.
docker images
Vous devriez voir une image avec un nom lié à votre répertoire de projet et au nom du service (par exemple, project-web
) ainsi que l'image postgres
.