- Comprendre comment créer une image Docker personnalisée à partir d'un
Dockerfile. - Manipuler l'image avec des commandes Docker.
- Lancer un conteneur à partir de cette image.
- Structure du projet :
Comme vu auparavant notre projet sera structurer en utilisant le principe de programmation modulaire. Ce projet contient une application streamlit. C'est une web app écrite en python qui permet la visualisation et l'interaction avec le script. C'est un façon de mise à dispostion d'un modèle de manière simple et rapide.
- Creation d'image personnalisé
Ouvrez le fichier Dockerfile. Ce fichier est appelé Dockerfile (comme son nom) permet de crée une image docker personnalisée. Il permet la construction des couches d'une image. Chaque ligne dois contenir une command.
Important La manière la optimale d'écire le docker file c'est de commencer avec les choses qui ne bouge pas souvant dans note projet. Exemple les requirements, les variables d'environement les config. Le code python écrit evoluera souvant on doit le laisser à la fin.
En effet docker utilise le cache pour construire les images. On doit tirer avantage de ça pour qu'à chaque fois on crée une image on utilisera le cache des couches déjà construite.
- Dockefile
Observer les command dans les lignes du Dockerfile et essayez de comprendre ce qu'on fait dans chaque une. Appyez vous sur cette documentation pour moieux comprendre les Dockerfile. Pour voir les autres commandes possibles réferez vous à cette page
- Build de l'image
Rendez vous sur la racinde du dossier si nous y êtes pas encore avec :
cd docker_tpConstruisez l'image Docker à partir du Dockerfile :
docker build -t mon-app-streamlit:1.0 .-
-t: permet de nommer et tagger l'image (mon-app-streamlit:1.0).
-
. : indique que le Dockerfile est dans le répertoire courant.
Observez le comportement à la création du docker. On remarque que l'execution ce fait en couche. Les premières couches provienne de notre image python déjà contruite. Les autres de nos commandes écrites dans le dockerfile.
à la fin du build vérfiez l'existance de l'image avec :
docker imagesQu'observez vous ?
- Lancement d'un Conteneur
docker run -p 8501:8501 --name mon-app-conteneur mon-app-streamlit:1.0-
-p 8501:8501 : mapper le port 8501 de votre machine au port 8501 du conteneur.
-
--name : nommer le conteneur.
Accédez à l'application : Ouvrez votre navigateur et accédez à http://localhost:8501.
Qu'aubservez vous dans le terminal ?
- Revenez sur le terminal et arrêtez l'execution du container avec en appyant sur ctrl+C.
- Lancement d'un en mode détaché Conteneur
docker run -d -p 8501:8501 --name mon-app-conteneur mon-app-streamlit:1.0Accédez à l'application encore une fois : Ouvrez votre navigateur et accédez à http://localhost:8501.
- Qu'elle est la différence entre les deux commande avec "-d" et sans ?
- Quel est la meilleur façon de mise en production ?
- Créez un autre container à partitr de la même image.
- Rappelez la différence entre image docker et container docker.
- Montoring des container
docker ps- Qu'observez vous ?
- Arret du container
docker stop mon-app-conteneur- Redémarrer le conteneur
docker start mon-app-conteneur- Supprimer le conteneur
docker rm -f mon-app-conteneur- Verifier si le container et bien arrêté.
- Exécuter un conteneur interactivement (pour debugger ou tester) :
docker run -it --rm mon-app-streamlit:1.0 /bin/bash- Ou on se trouve à ce moment par rapport au container ?
- Logs du container
- Executez la commande :
docker logs mon-app-conteneurQu'est ce que vous observez ?
7 Optionnel: Supression
- Supprimez le container avec :
docker rm -f mon-app-conteneur- Supprimez l'image avec :
docker rmi mon-app-streamlit:1.0