🖨️ Version PDF
Déjà abordé dans le cours et la présentation.
Dans cette page, vous allez pouvoir utiliser Docker en étant guidé pas à pas avec des exercices simples.
Analogie : Comme un conteneur de transport, il isole son contenu sans révéler son environnement externe.
Fonctionnement :
Avantages :
Compatibilité :
docker-cli
docker daemon
Lien vers la page d’installation de Docker Desktop / WSL 2
Lien vers la documentation de Docker
Dans votre terminal, vous pouvez voir la version de votre Docker :
Lancer le premier conteneur
docker container run hello-world
Résultat attendu :
Hello from Docker! This message shows that your installation appears to be working correctly.
Docker télécharge automatiquement l’image hello-world depuis Docker Hub (si elle n’est pas déjà locale). Le conteneur s’exécute, affiche un message, puis s’arrête !
Sur le site DockerHub, l’image HelloWorld
Lister les images locales
docker image ls
Colonnes importantes :
docker image pull ubuntu:latest
Ce que vous devez voir :
Lancer un conteneur Ubuntu en mode interactif
docker container run -it ubuntu:latest bash
Options :
J’ai ajouté un ls pour voir les répertoires de mon container Ubuntu actif.
Attention, il faudra ouvrir un autre terminal pour lister votre container actif, sinon, il n’y aura rien. Ensuite pour quitter votre Ubuntu, vous pourrez faire un exit !
exit
docker container ls
Quitter un conteneur (pour quitter votre Ubuntu comme je l’ai précisé plus haut):
Dans ce cas, le conteneur s’arrête automatiquement.
docker container ls --all
Sur cette copie d’écran vous voyez que la seconde commande permet d’afficher tous les containers y compris ceux qui ne sont pas actif mais présents. J’ai encadré les noms (NAME) généré pour chaque image car on peut utiliser les ID ou les NAME.
docker container start <NOM_OU_ID>
Exemple :
docker container start practical_murdock
Piège : il faut remplacer practical_murdock par le NAME donné aléatoirement par Docker !
practical_murdock
NAME
docker container stop <NOM_OU_ID>
docker container rm <NOM_OU_ID>
Autre exemple en utilisant le NAMES :
-it
-d
--detach
--name <NOM>
--rm
-e "VAR=valeur"
Exemple avec options combinées :
docker container run -it --rm --name mon_ubuntu -e "MA_VAR=coucou" ubuntu:latest bash
Afficher les détails d’un conteneur :
docker container inspect <NOM_OU_ID>
Affiche un JSON avec toutes les informations (statut, réseau, etc.).
docker image inspect hello-world
Supprimer les images
Si vous souhaitez supprimer plusieurs images en même temps, vous pouvez écrire les ID d’image ou les noms d’image séparés par des espaces les uns derrière les autres.
docker rmi Image Image
docker container run <IMAGE>
docker container stop <NOM>
docker container rm <NOM>
docker image pull <IMAGE>
docker container inspect <NOM>
Remarque : Comme vous êtes sous Windows, vous pouvez aussi utiliser Docker Desktop pour visualiser les conteneurs et images via une interface graphique.
Ce TP s’effectue sous Windows avec Docker Desktop et WSL2 (Ubuntu) activé.
Votre application Spring Boot doit déjà être packagée en .jar (fichier exécutable). Dans IntelliJ, Eclipse, VSC ou Spring Initializr, créez un projet simple que vous nommez demo-docker.
Une fois le projet généré, compilez-le avec Maven ou Gradle :
mvn clean package -DskipTests
Cela devrait créer votre fichier .jar dans le dossier target/, vous devriez voir ceci :
target/demo-docker-0.0.1-SNAPSHOT.jar
Dans le dossier racine du projet (au même niveau que pom.xml), créez un fichier nommé **Dockerfile** :
créez un fichier nommé **Dockerfile**
nano Dockerfile
Vous pouvez aussi utiliser un éditeur différent.
Dans votre fichier DockerFile, insérez les lignes ci-dessous :
# choisir une image Java (OpenJDK ou autre) FROM openjdk:17-jdk-slim # définir le répertoire de travail WORKDIR /app # copier le JAR dans le conteneur COPY target/demo-docker-0.0.1-SNAPSHOT.jar app.jar # exposer le port par défaut de Spring Boot (vous pouvez le modifier) EXPOSE 8080 # définir la commande de démarrage (pour nous c'est le app.jar) ENTRYPOINT ["java", "-jar", "app.jar"]
Quelques explications :
Depuis le terminal WSL ou PowerShell, placez-vous dans le dossier du projet et exécutez :
docker build -t springboot-demo:latest .
Si vous disposez d’un compte sur DockerHub, vous pouvez y déposer (on dit publier) votre image pour que d’autres la récupère ou tout simplement pour tester. On voit ceci un peu plus loin dans cette page… ;)
Exécutez le conteneur et redirigez le port :
docker run -p 8080:8080 -d springboot-demo:latest
Ensuite, vérifiez que tout fonctionne correctement :
docker ps
Testez sur votre navigateur à l’adresse : http://localhost:8080
Pour afficher les logs de l’application en cours :
docker logs <nom_du_conteneur>
par exemple : docker logs springboot-demo
docker logs springboot-demo
Pour arrêter votre conteneur : docker stop <nom_du_conteneur>
docker stop <nom_du_conteneur>
docker build -t nom_image .
docker run -p 8080:8080 nom_image
docker stop id_conteneur
docker rm id_conteneur
docker rmi nom_image
docker logs id_conteneur
Créer une archive .tar :
docker image save -o springboot-demo.tar springboot-demo
Recharger votre image :
docker image load -i springboot-demo.tar
Connectez-vous à votre compte Docker Hub (en créer un si vous n’en avez pas encore)
docker login
Renommez l’image avec votre nom d’utilisateur :
docker tag springboot-demo:latest moncompte/springboot-demo:latest
Poussez votre image :
docker push moncompte/springboot-demo:latest
FROM
COPY
WORKDIR
EXPOSE
ENTRYPOINT
RUN
ENV
Nous verrons comment ajouter un Docker Compose pour lancer à la fois :
sudo
Personnellement, j’utilise Docker, mais même si Docker est le standard de la conteneurisation, il existe d’autres outils répondant à des besoins différents : sécurité, intégration Kubernetes, légèreté ou flexibilité. Certains disent que Docker n’est pas suffisamment sécurisé, ce qui est probable, mais il est simple d’utilisation.
Voici les principales alternatives sous forme de tableau :
Pour résumé, Docker reste la référence pour l’apprentissage et la simplicité, Podman lui, est considéré comme plus sécurisé (on n’est pas Root), containerd est léger et utilisé par d’autres outils, CRI-O est idéal avec du Kubernetes pur, LXC/LXD est une approche système, proche de la virtualisation, runc/rkt propose des outils bas niveau destinés aux environnements experts.
Voilà, vous avez une idée des principales alternatives à Docker.