Aller au contenu

Construire l’image MariaDB

Faire grandir le premier Dockerfile instruction par instruction.

Dans ce chapitre : 8 étapes et 26 preuves de validation.

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.

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.

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
À ÉCRIRE DANSFichier srcs/requirements/mariadb/Dockerfile · remplace le placeholder

Avant de copier : remplacez <avant-derniere-stable> par vos valeurs.

FROM debian:<avant-derniere-stable>
Ce que fait chaque partie
  1. FROM définit la première couche de l’image.
  2. debian est une base autorisée, pas une image MariaDB prête.
  3. Le tag doit être une version vérifiée et explicite.
Résultat attendu

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.

Preuves de validation 0 / 3

Une case correspond à une preuve observée ou expliquée, pas simplement à une commande copiée.

Question de soutenance — Quand RUN est-il exécuté ?

Pendant docker build. ENTRYPOINT agit plus tard, au démarrage du container.

Objectif. Tu verras qu’un Dockerfile minimal produit déjà une image.

État du projet avant cette étape. Le Dockerfile contient uniquement FROM.

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.

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
À EXÉCUTER DANSDans la VM · racine du repository
docker build -t mariadb:stage-base srcs/requirements/mariadb
docker run --rm mariadb:stage-base cat /etc/os-release
Ce que fait chaque partie
  1. docker build exécute la recette.
  2. -t mariadb:stage-base nomme cette étape temporaire.
  3. Le dernier argument est le contexte de build.
  4. docker run crée un container éphémère depuis l’image.
  5. --rm supprime ce container quand cat se termine.
Résultat attendu

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é.

Preuves de validation 0 / 3

Une case correspond à une preuve observée ou expliquée, pas simplement à une commande copiée.

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.

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.

Ajoute le bloc RUN sous FROM. Ne copie encore ni configuration ni script.

Fichiers ou emplacements concernés

  • srcs/requirements/mariadb/Dockerfile
À ÉCRIRE DANSFichier 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
  1. RUN crée une nouvelle couche.
  2. apt-get update charge le catalogue dans cette couche de build.
  3. apt-get install ajoute MariaDB.
  4. --no-install-recommends limite les paquets accessoires.
  5. rm retire le cache APT devenu inutile.
Résultat attendu

Le fichier contient FROM puis un seul bloc RUN lisible.

Si cela échoue

Chaque antislash doit être le dernier caractère de sa ligne.

Preuves de validation 0 / 3

Une case correspond à une preuve observée ou expliquée, pas simplement à une commande copiée.

Question de soutenance — Quand RUN est-il exécuté ?

Pendant docker build. ENTRYPOINT agit plus tard, au démarrage du container.

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.

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.

Construis un nouveau tag puis affiche la version de MariaDB contenue dans l’image.

À EXÉCUTER DANSDans la VM · racine du repository
docker build -t mariadb:stage-packages srcs/requirements/mariadb
docker run --rm mariadb:stage-packages mariadbd --version
Ce que fait chaque partie
  1. Le nouveau tag distingue l’étape avec paquets.
  2. mariadbd --version vérifie le binaire installé.
  3. Le container est supprimé automatiquement après la sortie.
Résultat attendu

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.

Preuves de validation 0 / 3

Une case correspond à une preuve observée ou expliquée, pas simplement à une commande copiée.

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.

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.

É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
À ÉCRIRE DANS📄 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-resolve
Ce que fait chaque partie
  1. bind-address : écoute toutes les interfaces du container.
  2. datadir : chemin qui sera relié au volume nommé.
  3. socket : canal local utilisé pendant l’initialisation.
  4. skip-name-resolve : évite les recherches DNS de clients côté MariaDB.
Résultat attendu

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.

Preuves de validation 0 / 4

Une case correspond à une preuve observée ou expliquée, pas simplement à une commande copiée.

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.

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.

É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
À ÉCRIRE DANSFichier srcs/requirements/mariadb/tools/entrypoint.sh
#!/bin/sh
set -eu
exec "$@"
Ce que fait chaque partie
  1. #!/bin/sh choisit le shell du script.
  2. set -eu arrête le script sur erreur ou variable absente.
  3. exec remplace le script par la commande finale.
Résultat attendu

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.

À EXÉCUTER DANSDans la VM · racine du repository
chmod +x srcs/requirements/mariadb/tools/entrypoint.sh
Ce que fait chaque partie
  1. chmod +x ajoute le droit d’exécuter le script.
Résultat attendu

ls -l affiche un x pour entrypoint.sh.

Si cela échoue

Vérifie le chemin du fichier.

Preuves de validation 0 / 3

Une case correspond à une preuve observée ou expliquée, pas simplement à une commande copiée.

Question de soutenance — Quand RUN est-il exécuté ?

Pendant docker build. ENTRYPOINT agit plus tard, au démarrage du container.

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.

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.

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
À ÉCRIRE DANSFichier srcs/requirements/mariadb/Dockerfile · sous le bloc RUN
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
  1. Les sources de COPY sont relatives au contexte de build.
  2. chmod rend le script exécutable dans l’image.
  3. EXPOSE documente un port interne seulement.
  4. ENTRYPOINT est enregistré dans les métadonnées de l’image.
Résultat attendu

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.

Preuves de validation 0 / 4

Une case correspond à une preuve observée ou expliquée, pas simplement à une commande copiée.

Question de soutenance — Quand RUN est-il exécuté ?

Pendant docker build. ENTRYPOINT agit plus tard, au démarrage du container.

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.

Le tag inception distingue l’image de projet des tags pédagogiques. inspect permet de vérifier l’entrypoint sans encore lancer MariaDB.

Construis l’image finale, affiche-la puis inspecte son entrypoint. Ne démarre pas le service : il manque encore ses variables et secrets.

À EXÉCUTER DANSDans la VM · racine du repository
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
  1. build produit le tag final.
  2. image ls montre les étapes créées.
  3. inspect lit les métadonnées sans démarrer de container.
Résultat attendu

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.

Preuves de validation 0 / 3

Une case correspond à une preuve observée ou expliquée, pas simplement à une commande copiée.

Question de soutenance — Quand RUN est-il exécuté ?

Pendant docker build. ENTRYPOINT agit plus tard, au démarrage du container.