2025-2026
Nous n’allons pas utiliser les machines virtuelles pour ce TP, mais directement vos machines physiques.
Pour toutes les commandes (et sous-commandes) de la CLI Docker, il
est possible d’utiliser l’option --help pour avoir de
l’aide.
Sans doute que seul le premier groupe à faire ce TP (le G2) aura besoin de faire ces étapes, vérifiez tout de même.
Installez les paquets docker.io et
docker-compose.
Créez le fichier /etc/docker/daemon.json avec le
contenu suivant :
{
"registry-mirrors": ["http://172.18.[13].32:5000"]
}Redémarrez le service docker.
Ajoutez l’utilisateur user au group
docker avec la commande adduser.
Déconnectez-vous et reconnectez-vous, pour que votre ajout au groupe soit pris en compte.
Assurez-vous d’appartenir au groupe docker.
Exécutez docker ps pour vous assurer de pouvoir
interagir avec Docker.
Listez les images de conteneurs déjà disponibles localement.
Démarrez un conteneur qui instancie l’image
hello-world. Qu’observez-vous ?
Démarrez un conteneur qui instancie l’image debian.
Qu’observez-vous ?
Démarrez un conteneur qui instancie l’image debian
en lui associant un terminal.
htop et
exécutez-le. Qu’observez-vous ?htop. Retrouvez le
processus htop qui tourne dans le
conteneur et comparez son PID avec celui qui est affiché dans
le conteneur. Pourquoi les valeurs sont différentes ?exit ou
Ctrl+D.Avec la même commande, démarrez à nouveau un conteneur qui
instancie l’image debian en lui associant un terminal.
htop est-il déjà installé ? Pourquoi ?En utilisant la commande suivante, redémarrez le conteneur dans
lequel vous avez installé htop et constatez que
htop est bien présent :
docker start -i -a <container id>-i et -a ?Démarrez un conteneur qui instancie l’image
traefik/whoami en lui attachant le terminal et en
supprimant automatiquement le conteneur lors de son arrêt.
Dans un autre terminal, utilisez la commande suivante pour accéder au service exposé dans le conteneur :
curl http://localhost:80/Relancez le conteneur, mais en exposant le port du conteneur, soit en laissant Docker choisir le port, soit en précisant explicitement le port à utiliser.
curl.
Qu’observez-vous ?--verbose comme dernière option de la commande
docker run.En reprenant l’exemple du cours, démarrez un conteneur qui
instancie l’image nginx et qui sert avec un serveur HTTP
les fichiers HTML dans un dossier sur l’hôte. Affichez les pages web
depuis votre navigateur.
Vos machines n’ont pas la version la plus récente de Python… En
utilisant la version 3.14 de l’image python, exécutez dans
un conteneur le script Python suivant :
import sys
short_version = ".".join(map(str, sys.version_info[:3]))
print(f"Python {short_version}")$(pwd), où se trouve le script) avec le
dossier /app dans le conteneur.-w pour
indiquer quel doit être le répertoire de travail du processus lancé dans
le conteneur.docker run correspondent à la commande à lancer dans le
conteneur. Dans notre cas, on voudra lancer
python script.py.En partant de l’image debian:trixie, écrivez un
fichier Dockerfile qui décrit une image avec PHP installé
et dont le processus à lancer est le serveur inclus dans PHP.
php.php -S 0.0.0.0:8080./site.Une fois l’image construite, vous pouvez la tester en faisant servir par PHP un fichier avec le code PHP suivant :
<?php phpinfo(); ?>Décompressez l’archive des sources de WordPress et partagez le dossier obtenu avec un conteneur instanciant votre image avec PHP.
Note 1 : le serveur HTTP inclus dans PHP est conçu pour du développement, pas de la production. Pour de la production, on préfera passer par un vrai serveur HTTP, tel que Apache ou Nginx.
Note 2 : des images Docker php et
wordpress prêtes à l’emploi existent déjà… 🙂
WordPress a besoin d’une base de données pour fonctionner. On va avoir besoin d’un deuxième conteneur qui va faire tourner un serveur MariaDB.
mariadb,
écrivez un fichier docker-compose.yml qui va orchestrer un
conteneur de votre image PHP qui sert Nextcloud et un conteneur MariaDB.
Vous aurez sans doute besoin de consulter la documentation de
l’image mariadb pour trouver quelles variables
d’environnement définir pour créer une base de données, un utilisateur
et son mot de passe.
Sans doute que vous ne souhaitez pas perdre les données stockées
dans la base de données si vous arrêtez le conteneur… Comme suggéré par
la documentation de l’image mariadb, faites en sorte que le
dossier /var/lib/mysql dans le conteneur corresponde à un
dossier de l’hôte.
Sur les machines de la salle réseau, la version de
docker-compose n’est pas la plus récente, et il nécessaire
d’ajouter
version: "2.0"au début du fichier docker-compose.yml pour que ça
fonctionne.
compose n’est pas reconnu comme une commande de
docker, essayez directement le programme
docker-compose.docker-compose.yml.mariadb,
ajoutez à votre fichier docker-compose.yml un conteneur qui
instancie l’image adminer pour explorer les bases de
données sur le serveur SQL.flask-redis et nginx-nodejs-redis.