Outils pour utilisateurs

Outils du site


reseau:docker:creerimagedockerfile

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
reseau:docker:creerimagedockerfile [2026/06/21 12:07] – [Test de votre image] techer.charles_educ-valadon-limoges.frreseau:docker:creerimagedockerfile [2026/06/21 16:54] (Version actuelle) – [Test de votre image avec un fichier docker-compose.yml] techer.charles_educ-valadon-limoges.fr
Ligne 1: Ligne 1:
 ====== Activité : créer une image Docker avec un fichier Dockerfile ====== ====== Activité : créer une image Docker avec un fichier Dockerfile ======
 ===== Présentation ===== ===== Présentation =====
-Les images Docker disponibles sur Dockerhub, sont construites à partir d'une image de base dans laquelle est ajouté des paquets logiciels et des éléments de configuration et de personnalisation.+Les images Docker disponibles sur Docker Hub, sont construites à partir d'une image de base dans laquelle est ajouté des paquets logiciels et des éléments de configuration et de personnalisation.
  
-Pour cela, ces nouvelles image sont construites à partir d'un fichier appeél **Dockerfile**  décrivant toutes les opérations à effectuer.+Pour cela, ces nouvelles images sont construites à partir d'un fichier appelé **Dockerfile**  décrivant toutes les opérations à effectuer.
  
 ===== Créer une image personnalisée de l'image php===== ===== Créer une image personnalisée de l'image php=====
Ligne 20: Ligne 20:
 </code> </code>
  
-  * Depuis l'invite de commande **Powershell**, dans le dossier contenant le **fichier Dokerfile**, lancez la commande suivante pour créer : +  * Depuis l'invite de commande, le **terminal** pour Linux ou  **Powershell** pour Windows, dans le dossier contenant le **fichier Dokerfile**, lancez la commande suivante pour créer : 
-    * une image **appelée php** et **préfixée** par votre pseudo Docker :+    * une image **appelée php-mariadb** et **préfixée** par votre pseudo Docker :
  
 <code> <code>
-docker build -t charles/php-mariadb .+docker build -t ctecher/php-mariadb .
 </code> </code>
  
 ===== Test de votre image ===== ===== Test de votre image =====
-Pour pouvoir tester votre, vous devez mette en oeuvre :  +Pour pouvoir tester votre nouvelle image **php-mariadb**, vous devez mettre en œuvre  
-  * un **conteneur MariaDB** ; + 
-  * un **script bdd_testèsov.sql** de **création d'une base de données de test** ; +  * un **conteneur MariaDB** appelé **srvbdd**; 
-  * un **conteneur** avec l'image **php** nouvellement créée +  * un **script bdd\_phptest\_sov.sql** de **création** d'une base de données appelée **phptest** ; 
-  * un **script index.php** permettant de **tester la connexion** à la base de données.+  * un **conteneur** appelé **testphp** créé à partir de la nouvelle image **php-mariadb** ; 
 +  * un **script index.php** permettant de **tester la connexion** à la base de données **phptest**. 
 + 
 +<code file bdd_php-test_sov.sql> 
 +CREATE DATABASE phptest; 
 +USE phptest; 
 +CREATE TABLE produits ( 
 +    nom VARCHAR(50) 
 +); 
 +INSERT INTO produits (nom) VALUES ('fraises'); 
 +INSERT INTO produits (nom) VALUES ('melons'); 
 +</code> 
 + 
 +<code file index.php> 
 +<?php 
 +$host = 'srvbdd'; // nom du conteneur MariaDB (base de données) 
 +$db   = 'phptest'; 
 +$user = 'root'; 
 +$pass = 'Sio1234*'; 
 + 
 +try { 
 +    $pdo = new PDO("mysql:host=$host;dbname=$db;charset=utf8", $user, $pass); 
 +} catch (Exception $e) { 
 +    die("Erreur connexion : " . $e->getMessage()); 
 +
 + 
 +$stmt = $pdo->query("SELECT nom FROM produits"); 
 + 
 +echo "<h1>Contenu de la base de test</h1>"; 
 +echo "<table border='1'>"; 
 +echo "<tr><th>Nom</th></tr>"; 
 + 
 +while ($row = $stmt->fetch()) { 
 +    echo "<tr><td>" . htmlspecialchars($row['nom']) . "</td></tr>"; 
 +
 + 
 +echo "</table>"; 
 +?> 
 +</code> 
 + 
 +==== Création du conteneur mariadb appelé srvbdd==== 
 + 
 +  * création du dossier contenant le script **bdd\_php-test\_sov.sql** : 
 + 
 +<code shell> 
 +mkdir init 
 +cd init 
 +</code> 
 + 
 +  * copie du fichier **bdd\_php-test\_sov.sql** dans le dossier init. 
 + 
 +  * création du conteneur **srvbdd** avec : 
 +    * la définition du mot de passe du compte root, 
 +    * exécution automatique du contenu du fichier **bdd\_php-test\_sov.sql** :    
 + 
 + 
 +<code shell> 
 +docker run -d \ 
 +  --name srvbdd \ 
 +  -e MARIADB_ROOT_PASSWORD=Sio1234* \ 
 +  -e MARIADB_DATABASE=phptest \ 
 +  -p 3306:3306 \ 
 +  -v ./init:/docker-entrypoint-initdb.d \ 
 +  mariadb  
 +</code> 
 + 
 +<WRAP center round info> 
 +Explications : 
 +  * -e MARIADB_ROOT_PASSWORD=Sio1234* => mot de passe root. 
 +  * -e MARIADB_DATABASE=phptest => base de créée automatiquement à la création du conteneur srvbdd. 
 +  * -v init:/docker-entrypoint-initdb.d => montage du dossier contenant **bdd\_phptest\_sov.sql** qui sera **exécuté** au premier démarrage du conteneur. 
 +  * mariadb => image officielle MariaDB. 
 +</WRAP> 
 + 
 +<WRAP center round important> 
 +Important : 
 +  * Tous les scripts présents dans **/docker-entrypoint-initdb.d** ne sont exécutés qu’au premier démarrage (quand /var/lib/mysql est vide). 
 +  * Pour exécuter à nouveau des scripts d’initialisation, il faut : 
 +    * soit rajouter lors de la création du conteneur un volume pour le dossier **/var/lib/mysql**, dossier qui va contenir les fichier de la base de données MariaDB. Il faudra alors supprimer le contenu de ce dossier **/var/lib/mysql** pour  relancer l'initialisation avec tous les scripts contenus dans le dossier  **/docker-entrypoint-initdb.d**; 
 +    * soit supprimer le conteneur et le recréer. 
 +</WRAP> 
 + 
 +==== Création du conteneur Web appelé testphp==== 
 + 
 +  * création du dossier **www** contenant le script php **index.php** : 
 + 
 +<code shell> 
 +mkdir www 
 +cd www 
 +</code> 
 + 
 +  * copie du fichier **index.php** dans le dossier **www**. 
 + 
 +  * création du conteneur **testphp** avec : 
 +    * la mappage du dossier **www** avec le dossier de piblicatio **/var/www/html** du conteneyr ; 
 +    * le port réseau de l'hôte de votre choix. Par exemple 8080 ; 
 +    * le lien avec le conteneur **svrbdd** (l'utilisation de ce paramètre **link** sera explicité dans l'activité suivante) ; 
 +    * la nouvelle image que vous devez tester. Ici **ctecher/php-mariadb**  
 + 
 + 
 +<code shell> 
 +docker run -d \ 
 +  --name testphp \ 
 +  -p 8080:80 \ 
 +  --link srvbdd:srvbdd 
 +  -v ./www:/var/www/html \ 
 +  ctecher/php-mariadb  
 +</code> 
 + 
 +===== Test de votre image avec un fichier docker-compose.yml===== 
 +L'utilisation du fichier Docker-compose.yml sera explicité dans une prochaine activité. 
 + 
 +  * utilisation du dossier **init** contenant le script **bdd\_php-test\_sov.sql** ; 
 +  * utilisation du dossier **wws** contenant le fichier **index.html**. 
 + 
 +<code file Docker-compose.yml> 
 +services:  
 +  # base de données MariaDB  
 +  srvbdd:  
 +    image: mariadb 
 +    volumes: 
 +      - ./init:/docker-entrypoint-initdb.d/ 
 +    environment: 
 +      MARIADB_ROOT_PASSWORD: Sio1234* 
 + 
 +  # site Web php  
 +  testphp:  
 +    image: ctecher/php-mariadb 
 +    depends_on: 
 +      - srvbdd 
 +    ports: 
 +      - 8080:80 
 +    volumes: 
 +      - ./www:/var/www/html   
 +</code> 
 + 
 +  * lancement des conteneurs :  
 + 
 +<code> 
 +docker compose up -d 
 +</code> 
 + 
 +  * arrêt des conteneurs :  
 + 
 +<code> 
 +docker compose down 
 +</code> 
 ====== Retour Accueil Docker ====== ====== Retour Accueil Docker ======
  
   * [[reseau:docker:accueil|Docker]]   * [[reseau:docker:accueil|Docker]]
reseau/docker/creerimagedockerfile.1782036455.txt.gz · Dernière modification : 2026/06/21 12:07 de techer.charles_educ-valadon-limoges.fr