Skip to content

TP1 Part 1 : Just run things ffs

Dans cette section on commence doucement : des ptits docker run sans prétention, jusqu'à l'écriture d'un compose.yml.

1. Une ptite db MySQL

Servez vous du mémo de commandes Docker pour faire cette partie

🌞 Lancez un conteneur mysql en version 8.4

  • utilisez une commande docker run
  • précisez une seule option : donnez le nom mysql au conteneur

🌞 Vérifier que le conteneur est actif

  • utilisez une commande docker ps ou docker ps -a
  • vous devriez voir un conteneur inactif
Tip

Ajouter l'option -a permet de voir les conteneurs inactifs. docker ps affiche seulement les conteneurs actifs par défaut.

🌞 Consulter les logs du conteneur

  • vous devriez voir un message qui indique qu'on doit spécifier une variable d'environnement
Info

En effet, le conteneur officiel MySQL est conçu pour forcer l'utilisateur à définir soit un mot de passe pour l'utilisateur root de la base de données, soit définir un utilisateur spécifique et son mot de passe.
Cela empêche que le serveur MySQL puisse démarrer alors qu'aucun moyen de s'y connecter n'a été défini.
Comme souvent avec les conteneurs, la conf se fait en définissant une variable d'environnement pour le conteneur : en ajoutant -e au moment du docker run.


Tout est indiqué explicitement dans le README de cette image officielle

  • si vous lisez un peu, vous verrez que c'est indiqué explicitement qu'il faut définir une variable d'environnement

🌞 Supprimer le conteneur inactif

  • utilisez une commande docker rm

🌞 Lancer un nouveau conteneur MySQL

  • toujours avec le nom mysql
  • cette fois, en ajoutant une variable d'environnement
  • vous devez définir un mot de passe pour l'utilisateur root du serveur MySQL
Tip

Vous pouvez ajouter l'option -d à un docker run pour que le conteneur se lance en fond (en mode daemon).


2. Un PMA pour accompagner la DB

Pour tester que la db fonctionne, on va sortir l'artillerie lourde un peu, pour continuer à bosser notre sujet Docker :)

On va déployer un ptit PHPMyAdmin : une app web codée en PHP, qui permet de se connecter à un serveur MySQL et l'administrer depuis une WebUI moche mais pratique.

🌞 Lancer un conteneur PHPMyAdmin

  • pareil y'a une image officielle disponible, avec son README.md qui explique comment s'en servir
  • récupérez la ligne docker run du README.md officiel, il :

    • lance l'image phpmyadmin
    • partage le port 80 avec -p pour accéder à l'interface de PHPMyAdmin depuis votre PC
    • utilise --link pour pouvoir joindre le serveur MySQL (qui a sa propre adresse IP)
  • il faut changer le nom du conteneur qui est indiqué dans l'option --link

    • nous c'est mysql son nom
# Commande du README officiel
docker run --name phpmyadmin -d --link mysql_db_server:db -p 8080:80 phpmyadmin

# On adapte avec le nom de notre conteneur, pour nous c'est donc 
docker run --name phpmyadmin -d --link mysql:db -p 8080:80 phpmyadmin

🌞 Visitez l'interface web de PHPMyAdmin

  • ouvrez un navigateur, et RDV sur http://localhost:8080 (si vous avez pris le docker run de la doc)
  • connectez-vous avec l'utilisateur root et le mot de passe que vous avez choisi plus tôt
  • pour le compte-rendu, faites juste un curl depuis un shell :
curl http://localhost:8080
Warning

Pas obligé de me mettre le retour du curl en entier dans le compte-rendu. Les premières lignes me suffisent à comprendre que c'est OK, enlevez le reste please 🐈


3. Compose

➜ Bon les commandes docker run à rallonge, ça va deux minutes, surtout si on commence à foutre le bordel avec des --link qui ajoute de la complexité.

docker compose à la rescousse : il permet de :

  • définir dans un fichier texte (format YML) les docker run qu'on veut
  • tout lancer d'un coup avec une docker compose up
  • tous les conteneurs définis dans un compose sont automatiquement "linked"
Note

C'est le feu de pouvoir faire ça : en plus d'être pratique, de pas avoir à retenir ou noter des commandes immenses, bah c'est du YML, c'est un simple fichier texte... donc on le fout dans git !
Et on le versionne avec le reste du code :)

🌞 Créer un fichier compose.yml qui a le contenu suivant :

  • créez un nouveau répertoire, et placez ce fichier seul dedans
services:
  db:
    image: <IMAGE_MYSQL>
    environment:
      - MYSQL_ROOT_PASSWORD=<TON_PASSWORD>

  pma:
    image: phpmyadmin
    ports:
      - "8080:80"
Note

Historiquement, ce fichier s'appelait docker-compose.yml. Maintenant, les nouvelles versions supportent un fichier nommé juste compose.yml.
Beaucoup moins chiant à taper, et plus clair, donc on go sur ça ! Plus proche du langage naturel aussi, on dit souvent "un compose" entre nous.
Ha et en passant : la "référence" de la doc officielle sur compose est vraiment top ! pour trouver vite un truc.

🌞 Remplacer par les bonnes valeurs :

  • dans le fichier compose.yml, remplace : <IMAGE_MYSQL> et <TON_PASSWORD> pour faire comme dans l'exo précédent

    • MySQL en version 8.4
    • mot de passe de ton choix

🌞 Lancer la stack compose

  • dans un shell toujours, déplacez vous dans le dossier qui contient le fichier compose.yml
  • lancez la commande :
docker compose up
Tip

L'option -d peut aussi s'utiliser ici : docker compose up -d pour tout lancer en fond.
On peut ensuite utiliser docker compose ps ou encore docker compose logs pour obtenir des infos que sur cette stack :)
Toutes les commandes docker compose ne fonctionne que si vous avez un fichier compose.yml dans le dossier courant.

🌞 Visitez l'interface Web de PHPMyAdmin

  • confirmez que ça fonctionne bien en vous authentifiant
  • un curl pour le compte-rendu svp :)
Note

Notez la disparition complète du --link : c'est automatique avec docker compose.
De plus, on a déclaré le conteneur MySQL avec le nom db dans le fichier compose.yml. Ce nom est joignable à travers le réseau pour tous les autres conteneurs.
Genre là, PMA, pour se connecter au conteneur de base de données, il se connecte à l'addresse IP db (c'est un nom qui sera résolu automatiquement par docker compose)


Une fois terminé, une bonne pause, et passez à la suite : Part 2 : Dev environment