Administration Système et Devops – TP 3

Prise en main de Docker

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.

1. Installation de Docker

Sans doute que seul le premier groupe à faire ce TP (le G2) aura besoin de faire ces étapes, vérifiez tout de même.

  1. Installez les paquets docker.io et docker-compose.

  2. Créez le fichier /etc/docker/daemon.json avec le contenu suivant :

    {
      "registry-mirrors": ["http://172.18.[13].32:5000"]
    }
  3. Redémarrez le service docker.

  4. Ajoutez l’utilisateur user au group docker avec la commande adduser.

  5. Déconnectez-vous et reconnectez-vous, pour que votre ajout au groupe soit pris en compte.

  6. Assurez-vous d’appartenir au groupe docker.

  7. Exécutez docker ps pour vous assurer de pouvoir interagir avec Docker.

2. Premières manipulations de conteneurs

  1. Listez les images de conteneurs déjà disponibles localement.

  2. Démarrez un conteneur qui instancie l’image hello-world. Qu’observez-vous ?

  3. Démarrez un conteneur qui instancie l’image debian. Qu’observez-vous ?

  4. Démarrez un conteneur qui instancie l’image debian en lui associant un terminal.

  5. Avec la même commande, démarrez à nouveau un conteneur qui instancie l’image debian en lui associant un terminal.

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

  8. Dans un autre terminal, utilisez la commande suivante pour accéder au service exposé dans le conteneur :

    curl http://localhost:80/
  9. 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.

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

  11. 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}")

3. Construire son image

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

  2. Une fois l’image construite, vous pouvez la tester en faisant servir par PHP un fichier avec le code PHP suivant :

    <?php phpinfo(); ?>
  3. 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à… 🙂

4. Plusieurs images

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.

  1. En utilisant votre image PHP et l’image mariadb, écrivez un fichier docker-compose.yml qui va orchestrer un conteneur de votre image PHP qui sert Nextcloud et un conteneur MariaDB.
  2. Démarrez les deux conteneurs et accédez à la page d’accueil de WordPress depuis votre navigateur.
  3. Comme suggéré par la documentation de l’image 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.

Pour les plus rapides

  1. Améliorez votre image PHP pour utiliser Nginx comme serveur HTTP.
  2. Explorez et essayez quelques exemples du dépôt awesome-compose, notamment flask-redis et nginx-nodejs-redis.