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:08] – [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** avec l'image **php** nouvellement créée ; +
-  * un **script index.php** permettant de **tester la connexion** à la base de données.+
  
-<code file bdd_test_sov.sql+  * un **conteneur MariaDB** appelé **srvbdd**; 
-CREATE DATABASE test+  * un **script bdd\_phptest\_sov.sql** de **création** d'une base de données appelée **phptest** 
- +  * un **conteneur** appelé **testphp** créé à partir de la nouvelle image **php-mariadb** ; 
-USE test;+  * 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 ( CREATE TABLE produits (
     nom VARCHAR(50)     nom VARCHAR(50)
 ); );
- 
 INSERT INTO produits (nom) VALUES ('fraises'); INSERT INTO produits (nom) VALUES ('fraises');
 INSERT INTO produits (nom) VALUES ('melons'); INSERT INTO produits (nom) VALUES ('melons');
 </code> </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.1782036538.txt.gz · Dernière modification : 2026/06/21 12:08 de techer.charles_educ-valadon-limoges.fr