TP 3 Volume et réseau
Objectif
On va monter notre webapp en réseau avec un redis "stateful".
On va donc créer à la main les éléments nécessaires pour avoir une application persistante.
Étapes
- Action : Créer un volume Docker nommé "redis_data".
Observation : Le volume "redis_data" apparaît dans la liste des volumes Docker (docker volume ls
).
- Action : Créer un réseau Docker nommé "my_app".
Observation : Le réseau "my_app" est listé parmi les réseaux Docker (docker network ls
).
- Action : Lancer un conteneur Redis en utilisant le volume "redis_data" et le connecter au réseau "my_app".
Observation : Le conteneur Redis est en cours d'exécution dans le réseau "my_app" (docker ps
), et le volume "redis_data" est monté correctement (docker inspect
).
- Action : Lancer l'application Flask "myfirstapp" construite dans le TP précédent dans le réseau "my_app", en utilisant "redis" comme nom d'hôte pour Redis dans les variables d'environnement, et exposer l'application sur le port 80.
Observation : L'application Flask est accessible viahttp://localhost:80
et peut communiquer avec le conteneur Redis.
- Action : Cliquer sur le bouton de l'application pour voir l'incrémentation.
Observation : On peut voir le contenu de la base redis avec la commandedocker exec -it redis redis-cli get counter
- Action : Détruire et recréer le conteneur redis pour confirmer que la base de données est bien persistée.
Observation : On peut voir le contenu de la base redis avec la commandedocker exec -it redis redis-cli get counter
Avancé
- Utiliser
docker exec
pour se connecter aux conteneurs en cours d'exécution et tester manuellement la connectivité réseau avec ping. - Idem avec des requêtes DNS.
- Identifier quelle stratégie de backup serait recommandée pour notre base redis.
- Ajouter les stratégies de restart=always et observer ce qui se passe quand on tue un process docker.
Solution
Afficher
- Créer un volume Docker :
docker volume create redis_data
- Créer un réseau Docker :
docker network create my_app
- Lancer Redis avec le volume et le réseau :
docker run -d --name redis --network my_app -v redis_data:/data redis
- Lancer l'application Flask dans le réseau, en exposant le port 80 :
docker run -d --name flask_app --network my_app -e REDIS_HOST=redis -p 80:3000 myfirstapp:1.0