Construire l’image MariaDB
Faire grandir le premier Dockerfile instruction par instruction.
Dans ce chapitre : 8 étapes et 26 preuves de validation.
Étape 23 — Écrire seulement FROM
Section intitulée « Étape 23 — Écrire seulement FROM »Objectif. Tu construiras une image qui ne contient encore que Debian.
État du projet avant cette étape. Le repository est prêt. Le Dockerfile MariaDB est vide.
Comprendre le changement
Section intitulée « Comprendre le changement »FROM choisit l’image de base. C’est la seule image prête autorisée par le sujet. À ce stade, MariaDB n’est pas encore installée.
Faire une seule chose
Section intitulée « Faire une seule chose »Vérifie la stable et l’avant-dernière stable sur la page officielle Debian ou Alpine. Écris ensuite une seule ligne FROM avec un tag explicite, jamais latest.
Fichiers ou emplacements concernés
srcs/requirements/mariadb/Dockerfile
Avant de copier : remplacez <avant-derniere-stable> par vos valeurs.
FROM debian:<avant-derniere-stable>Ce que fait chaque partie
- FROM définit la première couche de l’image.
- debian est une base autorisée, pas une image MariaDB prête.
- Le tag doit être une version vérifiée et explicite.
Le Dockerfile contient une seule ligne FROM valide.
Si cela échoue
Ne copie pas littéralement <avant-derniere-stable> et n’utilise pas debian:latest.
Prouver que c’est correct
Section intitulée « Prouver que c’est correct »Question de soutenance — Quand RUN est-il exécuté ?
Pendant docker build. ENTRYPOINT agit plus tard, au démarrage du container.
Étape 24 — Construire la couche de base
Section intitulée « Étape 24 — Construire la couche de base »Objectif. Tu verras qu’un Dockerfile minimal produit déjà une image.
État du projet avant cette étape. Le Dockerfile contient uniquement FROM.
Comprendre le changement
Section intitulée « Comprendre le changement »docker build lit le Dockerfile puis récupère la base si nécessaire. -t donne un nom temporaire à l’image. Le dossier final est le contexte envoyé au builder.
Faire une seule chose
Section intitulée « Faire une seule chose »Construis cette première étape depuis la racine, puis demande à l’image d’afficher son système. MariaDB doit encore être absente.
Fichiers ou emplacements concernés
srcs/requirements/mariadb/Dockerfile
docker build -t mariadb:stage-base srcs/requirements/mariadb
docker run --rm mariadb:stage-base cat /etc/os-releaseCe que fait chaque partie
- docker build exécute la recette.
- -t mariadb:stage-base nomme cette étape temporaire.
- Le dernier argument est le contexte de build.
- docker run crée un container éphémère depuis l’image.
- --rm supprime ce container quand cat se termine.
Le build réussit et cat affiche la distribution choisie.
Si cela échoue
Une erreur invalid reference format signifie généralement que le placeholder du tag n’a pas été remplacé.
Prouver que c’est correct
Section intitulée « Prouver que c’est correct »Question de soutenance — Quand RUN est-il exécuté ?
Pendant docker build. ENTRYPOINT agit plus tard, au démarrage du container.
Étape 25 — Ajouter uniquement l’installation MariaDB
Section intitulée « Étape 25 — Ajouter uniquement l’installation MariaDB »Objectif. Tu comprendras ce que RUN ajoute pendant le build.
État du projet avant cette étape. L’image de base fonctionne mais ne contient aucun serveur de base de données.
Comprendre le changement
Section intitulée « Comprendre le changement »RUN exécute une commande pendant la construction et enregistre son résultat dans une nouvelle couche. apt installe le paquet de la distribution, pas une image MariaDB prête.
Faire une seule chose
Section intitulée « Faire une seule chose »Ajoute le bloc RUN sous FROM. Ne copie encore ni configuration ni script.
Fichiers ou emplacements concernés
srcs/requirements/mariadb/Dockerfile
Avant de copier : remplacez <avant-derniere-stable> par vos valeurs.
FROM debian:<avant-derniere-stable>
RUN apt-get update \
&& apt-get install -y --no-install-recommends mariadb-server ca-certificates \
&& rm -rf /var/lib/apt/lists/*Ce que fait chaque partie
- RUN crée une nouvelle couche.
- apt-get update charge le catalogue dans cette couche de build.
- apt-get install ajoute MariaDB.
- --no-install-recommends limite les paquets accessoires.
- rm retire le cache APT devenu inutile.
Le fichier contient FROM puis un seul bloc RUN lisible.
Si cela échoue
Chaque antislash doit être le dernier caractère de sa ligne.
Prouver que c’est correct
Section intitulée « Prouver que c’est correct »Question de soutenance — Quand RUN est-il exécuté ?
Pendant docker build. ENTRYPOINT agit plus tard, au démarrage du container.
Étape 26 — Reconstruire et vérifier le paquet
Section intitulée « Étape 26 — Reconstruire et vérifier le paquet »Objectif. Tu prouveras que RUN a réellement modifié l’image.
État du projet avant cette étape. FROM et RUN sont présents ; COPY et ENTRYPOINT n’existent pas encore.
Comprendre le changement
Section intitulée « Comprendre le changement »Un nouveau build réutilise la couche FROM puis exécute la nouvelle couche RUN. Un run avec mariadbd –version teste le binaire sans démarrer le serveur.
Faire une seule chose
Section intitulée « Faire une seule chose »Construis un nouveau tag puis affiche la version de MariaDB contenue dans l’image.
docker build -t mariadb:stage-packages srcs/requirements/mariadb
docker run --rm mariadb:stage-packages mariadbd --versionCe que fait chaque partie
- Le nouveau tag distingue l’étape avec paquets.
- mariadbd --version vérifie le binaire installé.
- Le container est supprimé automatiquement après la sortie.
Une ligne de version MariaDB apparaît.
Si cela échoue
command not found signifie que le paquet n’a pas été installé ou que le build a utilisé un mauvais fichier.
Prouver que c’est correct
Section intitulée « Prouver que c’est correct »Question de soutenance — Quand RUN est-il exécuté ?
Pendant docker build. ENTRYPOINT agit plus tard, au démarrage du container.
Étape 27 — Créer la configuration MariaDB copiée par l’image
Section intitulée « Étape 27 — Créer la configuration MariaDB copiée par l’image »Objectif. Le premier fichier COPY du Dockerfile pointera vers un vrai fichier.
État du projet avant cette étape. Le Dockerfile veut copier conf/50-server.cnf, mais ce fichier est encore vide.
Comprendre le changement
Section intitulée « Comprendre le changement »MariaDB utilisera /var/lib/mysql pour ses données et /run/mysqld pour son socket local. bind-address sera expliqué et testé quand WordPress rejoindra le réseau.
Faire une seule chose
Section intitulée « Faire une seule chose »Écris la configuration proposée. Pour l’instant, retiens seulement le chemin des données : /var/lib/mysql.
Fichiers ou emplacements concernés
srcs/requirements/mariadb/conf/50-server.cnf
[mariadbd]
bind-address = 0.0.0.0
port = 3306
datadir = /var/lib/mysql
socket = /run/mysqld/mysqld.sock
skip-name-resolveCe que fait chaque partie
- bind-address : écoute toutes les interfaces du container.
- datadir : chemin qui sera relié au volume nommé.
- socket : canal local utilisé pendant l’initialisation.
- skip-name-resolve : évite les recherches DNS de clients côté MariaDB.
MariaDB écoute sur 3306 dans le réseau Docker.
Si cela échoue
Si WordPress reçoit connection refused, vérifiez que cette configuration est copiée, que mariadbd démarre et que les deux services partagent le réseau.
Prouver que c’est correct
Section intitulée « Prouver que c’est correct »Question de soutenance — Quand RUN est-il exécuté ?
Pendant docker build. ENTRYPOINT agit plus tard, au démarrage du container.
Étape 28 — Créer un script de démarrage provisoire
Section intitulée « Étape 28 — Créer un script de démarrage provisoire »Objectif. Le deuxième fichier COPY existera et permettra de construire l’image.
État du projet avant cette étape. Le Dockerfile copie tools/entrypoint.sh. L’initialisation complète viendra après la création de Compose.
Comprendre le changement
Section intitulée « Comprendre le changement »Un entrypoint est le programme lancé quand le container démarre. Pour l’instant, le script se contente de transmettre la commande reçue avec exec ; il sera enrichi progressivement.
Faire une seule chose
Section intitulée « Faire une seule chose »Écris ce petit script et rends-le exécutable. C’est volontairement provisoire : l’objectif immédiat est seulement de construire l’image.
Fichiers ou emplacements concernés
srcs/requirements/mariadb/tools/entrypoint.sh
#!/bin/sh
set -eu
exec "$@"Ce que fait chaque partie
- #!/bin/sh choisit le shell du script.
- set -eu arrête le script sur erreur ou variable absente.
- exec remplace le script par la commande finale.
Le fichier contient exactement trois lignes utiles et possède le droit d’exécution.
Si cela échoue
Vérifie chmod +x et les fins de ligne Unix.
chmod +x srcs/requirements/mariadb/tools/entrypoint.shCe que fait chaque partie
- chmod +x ajoute le droit d’exécuter le script.
ls -l affiche un x pour entrypoint.sh.
Si cela échoue
Vérifie le chemin du fichier.
Prouver que c’est correct
Section intitulée « Prouver que c’est correct »Question de soutenance — Quand RUN est-il exécuté ?
Pendant docker build. ENTRYPOINT agit plus tard, au démarrage du container.
Étape 29 — Ajouter COPY et ENTRYPOINT
Section intitulée « Étape 29 — Ajouter COPY et ENTRYPOINT »Objectif. Tu relieras enfin la recette aux deux fichiers créés.
État du projet avant cette étape. La base contient MariaDB ; la configuration et le script existent à côté du Dockerfile.
Comprendre le changement
Section intitulée « Comprendre le changement »COPY place ces fichiers dans l’image. ENTRYPOINT désigne le script exécuté au futur démarrage. EXPOSE documente 3306 sans publier ce port vers la VM.
Faire une seule chose
Section intitulée « Faire une seule chose »Ajoute les lignes finales sous le bloc RUN. Vérifie les chemins relatifs au contexte mariadb.
Fichiers ou emplacements concernés
srcs/requirements/mariadb/Dockerfile
COPY conf/50-server.cnf /etc/mysql/mariadb.conf.d/50-server.cnf
COPY tools/entrypoint.sh /usr/local/bin/mariadb-entrypoint
RUN chmod +x /usr/local/bin/mariadb-entrypoint
EXPOSE 3306
ENTRYPOINT ["/usr/local/bin/mariadb-entrypoint"]Ce que fait chaque partie
- Les sources de COPY sont relatives au contexte de build.
- chmod rend le script exécutable dans l’image.
- EXPOSE documente un port interne seulement.
- ENTRYPOINT est enregistré dans les métadonnées de l’image.
Le Dockerfile relie maintenant installation, configuration et démarrage.
Si cela échoue
COPY failed signifie que le fichier source ou le contexte de build ne correspond pas au chemin écrit.
Prouver que c’est correct
Section intitulée « Prouver que c’est correct »Question de soutenance — Quand RUN est-il exécuté ?
Pendant docker build. ENTRYPOINT agit plus tard, au démarrage du container.
Étape 30 — Construire l’image MariaDB finale
Section intitulée « Étape 30 — Construire l’image MariaDB finale »Objectif. Tu produiras la première vraie image du projet.
État du projet avant cette étape. Le Dockerfile contient maintenant FROM, RUN, COPY, EXPOSE et ENTRYPOINT.
Comprendre le changement
Section intitulée « Comprendre le changement »Le tag inception distingue l’image de projet des tags pédagogiques. inspect permet de vérifier l’entrypoint sans encore lancer MariaDB.
Faire une seule chose
Section intitulée « Faire une seule chose »Construis l’image finale, affiche-la puis inspecte son entrypoint. Ne démarre pas le service : il manque encore ses variables et secrets.
docker build -t mariadb:inception srcs/requirements/mariadb
docker image ls mariadb
docker image inspect mariadb:inception --format '{{json .Config.Entrypoint}}'Ce que fait chaque partie
- build produit le tag final.
- image ls montre les étapes créées.
- inspect lit les métadonnées sans démarrer de container.
mariadb:inception existe et son entrypoint est /usr/local/bin/mariadb-entrypoint.
Si cela échoue
Si l’entrypoint est vide, la dernière instruction du Dockerfile n’a pas été prise en compte.
Prouver que c’est correct
Section intitulée « Prouver que c’est correct »Question de soutenance — Quand RUN est-il exécuté ?
Pendant docker build. ENTRYPOINT agit plus tard, au démarrage du container.