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
mysqlau conteneur
🌞 Vérifier que le conteneur est actif
- utilisez une commande
docker psoudocker 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
rootdu 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.mdqui explique comment s'en servir -
récupérez la ligne
docker runduREADME.mdofficiel, il :- lance l'image
phpmyadmin - partage le port
80avec-ppour accéder à l'interface de PHPMyAdmin depuis votre PC - utilise
--linkpour pouvoir joindre le serveur MySQL (qui a sa propre adresse IP)
- lance l'image
-
il faut changer le nom du conteneur qui est indiqué dans l'option
--link- nous c'est
mysqlson nom
- nous c'est
# 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 ledocker runde la doc) - connectez-vous avec l'utilisateur
rootet le mot de passe que vous avez choisi plus tôt - pour le compte-rendu, faites juste un
curldepuis un shell :
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 runqu'on veut - tout lancer d'un coup avec une
docker compose up - tous les conteneurs définis dans un
composesont 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 :
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
curlpour 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