2. Une machine virtuelle ?
Une machine virtuelle est comme un ordinateur "imaginaire" à
l'intérieur de votre vrai ordinateur. Vous pouvez l'utiliser pour faire
fonctionner différents systèmes d'exploitation.
Lorsque vous utilisez une machine virtuelle (VM), vous faites ce qu’on
appelle de la virtualisation lourde. En effet, vous recréez un
système complet dans le système hôte, pour qu’il ait ses propres
ressources.
Virtualisation lourde (L'isolation est totale)
3. Un conteneur ?
Un conteneur Linux est un processus ou un ensemble
de processus isolés du reste du système, tout en étant
légers.
Le conteneur permet de faire de la virtualisation
légère, c'est-à-dire qu'il ne virtualise pas les ressources,
il ne crée qu'une isolation des processus.
Le conteneur partage donc les ressources avec le
système hôte.
Virtualisation légère (seulement
l’isolation des processus)
4. Pourquoi utiliser des conteneurs ?
Plus léger : Les conteneurs utilisent moins de ressources que les machines virtuelles car ils partagent des composants
communs.
Démarre vite : Les conteneurs se lancent rapidement car ils n'ont pas besoin de charger tout un système d'exploitation.
Peu exigeant : Ils peuvent être déployés sur différents systèmes sans trop de soucis.
Sécurisé : Ils offrent une bonne protection sans ralentir les performances.
Facile à agrandir : Ils peuvent être étendus rapidement en cas de besoin.
5. C’est quoi Docker ?
Docker a été créé pour les besoins d'une société de Platform as a Service (PaaS)
appelée DotCloud. Finalement, en mars 2013, l'entreprise a créé une nouvelle structure
nommée Docker Inc et a placé en open source son produit Docker.
Docker apporte une notion importante dans le monde du conteneur. Dans la vision
Docker, un conteneur ne doit faire tourner qu'un seul processus. Ainsi, dans le cas
d'une stack LAMP (Linux, Apache, MySQL, PHP), nous devons créer 3 conteneurs
différents, un pour Apache, un pour MySQL et un dernier pour PHP. Alors que dans un
conteneur LXC ou OpenVZ, nous aurions fait tourner l'ensemble des 3 services dans un
seul et unique conteneur.
Le logiciel Docker est une technologie de conteneurisation qui permet la création et l'utilisation de
conteneurs Linux®
6. Pourquoi utiliser Docker ?
Prenons un exemple : vous avez développé votre projet en local. Tout
fonctionne bien, mais au moment de mettre en production, vous vous rendez
compte que vous ne savez pas comment déployer votre projet.
Un autre exemple : vous êtes dans une équipe de 10 personnes et chacun
utilise un OS différent (Ubuntu, macOS, Windows, CentOS, etc.). Comment
faire pour avoir un environnement unifié et fonctionnel chez l'ensemble
des développeurs ?
Docker répond à une problématique forte dans le monde du développement
Docker répond à ces problématiques en créant des conteneurs. Grâce à Docker, vous
n'aurez plus de problème de différence d'environnement, et votre code marchera partout !
7. Catégories des conteneurs Docker ?
Stateless : Un conteneur Docker sans mémoire, qui ne stocke pas les
changements effectués à l'intérieur et revient à son état initial après chaque
redémarrage ou recréation (Un serveur web tel que Nginx,Apache).
Stateful : Un conteneur Docker qui conserve les changements effectués à
l'intérieur même après le redémarrage ou la recréation, nécessitant une gestion
plus complexe pour maintenir la cohérence des données (une base de données
telle que MySQL ou MongoDB).
Stateless vs Stateful
8. C’est quoi Docker Hub ?
Le Docker Hub est la registry officielle de Docker.
Une registry est un logiciel qui permet de partager des images à d'autres personnes.
C’est un composant majeur dans l’écosystème Docker :
● Les développeurs permet de distribuer des images prêtes à l’emploi et de les versionner avec un système de
tags ;
● Les systèmes automatisés permet de déployer ces applications sur vos environnements de développement et de
production.
NB : Docker Hub et GitHub servent des objectifs similaires, ils présentent quelques différences fondamentales. Docker Hub
est principalement utilisé pour stocker et partager des images Docker, tandis que GitHub est utilisé pour le contrôle de
version et la collaboration.
9. Quelques notions du Docker ?
Dockerfile : Un ensemble d'instructions pour dire à Docker comment construire une image.
Image : Un modèle préconçu pour les conteneurs, contenant tout ce dont une application a besoin pour fonctionner.
Conteneur : Une instance exécutable d'une image, agissant comme une boîte virtuelle contenant l'application et son
environnement d'exécution.
Volume : Un moyen de stocker et partager des données entre les conteneurs Docker, en contournant le système de
fichiers de base du conteneur.
Réseau : Un ensemble de connexions permettant aux conteneurs Docker de communiquer entre eux, que ce soit sur la
même machine hôte ou sur différentes machines.
Docker Compose : Un outil pour gérer des applications Docker composées de plusieurs conteneurs.
10. Workflow détaillé du Docker ?
La commande docker build est une commande clé de Docker qui
permet de construire une image Docker à partir d'un Dockerfile et d'un
contexte de build.
La commande docker run est utilisée pour exécuter un conteneur à
partir d'une image Docker.
La commande docker pull est utilisée pour récupérer une image
Docker à partir de Docker Hub ou d'un autre registre.
La commande docker push est utilisée pour pousser une image Docker
vers Docker Hub ou un autre registre.
La commande docker rmi est utilisée pour supprimer une ou plusieurs
images Docker de votre système local.
11. Comment créer Dockerfile ?
1 - Pour commencer, créez un fichier appelé "Dockerfile" dans le répertoire racine de
votre code source. Dans notre cas d'étude, nous considérons un projet Node.js.
2 - Choisir une image de base Node.js : Utilisez l'image de base Node.js à partir de Docker Hub.
3 - Définir le répertoire de travail : Utilisez l'instruction WORKDIR pour définir le répertoire de travail dans
le conteneur.
12. Comment créer Dockerfile ?
4 - Copier les fichiers pertinents : Utilisez l'instruction COPY pour copier les fichiers de votre
application Node.js depuis votre système local vers le conteneur.
5 - Installer les dépendances : Utilisez l'instruction RUN pour exécuter la commande npm
install et installer les dépendances de votre application.
13. Comment créer Dockerfile ?
6 - Exposer le port d'écoute de votre application : Utilisez l'instruction EXPOSE pour spécifier le
port sur lequel votre application Node.js écoute.
7 - Définir la commande par défaut : Utilisez l'instruction CMD pour spécifier la commande par défaut à
exécuter lors du démarrage du conteneur.
15. Comment construire (build) une image ?
Construire l'image ( build ) : Utilisez la commande docker build pour construire l'image Docker en
spécifiant le chemin vers le répertoire contenant le Dockerfile.
16. Comment lancer (run) un container ?
Lancez le conteneur : Une fois que vous avez construit l'image, utilisez la commande docker run pour
lancer un conteneur basé sur cette image. Assurez-vous d'exposer le port que votre application Node.js
utilise. Par exemple, si votre application Node.js écoute le port 3000, utilisez la commande suivante :
En ajoutant l'option -d à la commande docker run, vous spécifiez que vous souhaitez que le
conteneur s'exécute en arrière-plan. Cela vous permet de libérer votre terminal tout en laissant le
conteneur s'exécuter indépendamment.
Ainsi, la commande docker run -d -p 3000:3000 nom_de_votre_image lancera le conteneur en
mode détaché tout en effectuant le mappage du port 3000 du conteneur Docker (Container Port) vers le port
3000 de l'hôte (Host Port).
17. Partager une image sur docker hub ?
Connectez-vous à Docker Hub :
Bien sûr, voici une version simplifiée des étapes pour partager une image sur Docker Hub :
Taguez votre image :
Poussez l'image taguée sur Docker Hub :
18. Le fichier .dockerignore ?
Sur un projet Git, nous utilisons un fichier .gitignore ; sur Docker il existe le même type de fichier. Celui-ci
permet de ne pas copier certains fichiers et/ou dossiers dans notre conteneur lors de l’exécution de
l'instruction ADD .
À la racine de votre projet (soit à côté de votre fichier Dockerfile), vous devez créer un fichier
.dockerignore qui contiendra les lignes suivantes :
19. Les commandes Docker ?
https://docs.docker.com/get-started/docker_cheatsheet.pdf
20. Les commandes Dockerfile ?
https://docs.docker.com/dev
elop/develop-images/docker
file_best-practices/
https://docs.docker.com/engi
ne/reference/builder/
Overview of best practices
for writing Dockerfiles
Dockerfile reference
21. TP 01 - Docker : Conteneurisation d'une
application Node.js avec Docker
22. C’est quoi Docker Compose ?
Docker Compose est un outil destiné à définir et exécuter des
applications Docker à plusieurs conteneurs.
Dans Docker Compose, vous utilisez un fichier YAML pour
configurer les services de votre application. Ensuite, vous créez
et vous démarrez tous les services à partir de votre configuration
en utilisant une seule commande.
23. Pourquoi Docker Compose ?
Dans une application réelle, on peut avoir plusieurs technologies (ou plusieurs « services ») pour assurer le
bon fonctionnement d’un système dans son ensemble (Exemple pour faire fonctionner mon application j’ai
besoin de Node.js, Mongodb, et d’un serveur Web pour l’interface client).
C’est dans des cas comme celui-ci que nous allons utiliser Docker-Compose. Avec Docker compose-nous
allons créer une architecture multiconteneur que l’on peut appeler « stack ». Cette Stack sera :
- Autonome (car prête à être « mise en place » partout, quelle que soit la plateforme cible).
- Pré-paramétrée (tout est dans le fichier docker-compose.yml). Isolé (tous les services ne sont pas
forcément accessibles du public, mais sont accessibles par vos autres applications).
- Administrable simplement grâce au cli (docker compose up/down/start/stop).
24. Installation du Docker Compose
- Docker Compose est fourni directement par les développeurs de Docker, cependant
sous Linux il n’est pas inclus dans l’installation de base des paquets.
- Pour l’installer, rendez-vous sur la documentation de Docker .
- Sous Windows et OSX pas de soucis, Docker Compose est inclus dans l’installation de
base.
25. Notions de base du Docker Compose
- Services : Un service est une définition de conteneur, généralement basée sur une image Docker. Vous déclarez
les services dans le fichier docker-compose.yml. Chaque service représente une partie de votre application.
- Conteneur (container) : Un conteneur Docker est une instance d'une image Docker. Chaque service que vous
définissez dans Docker Compose est associé à un conteneur.
- Image Docker : Une image Docker est un package qui contient tout ce dont un conteneur a besoin pour
s'exécuter, y compris le code, les bibliothèques, les dépendances et les configurations. Vous pouvez utiliser des
images existantes à partir de Docker Hub ou créer les vôtres.
- Réseau (networks) : Docker Compose crée automatiquement un réseau interne pour votre application,
permettant aux conteneurs de communiquer les uns avec les autres. Vous pouvez également créer des réseaux
personnalisés si nécessaire.
- Volume (volumes) : Les volumes Docker permettent de persister des données en dehors des conteneurs, ce qui
est essentiel pour stocker des données sensibles, des bases de données, des fichiers de configuration, etc.
26. Notions de base du Docker Compose
- Dépendances (depends_on) : Vous pouvez définir des dépendances entre les services dans Docker
Compose. Par exemple, un service peut dépendre d'un autre, ce qui garantit que les conteneurs sont
démarrés dans le bon ordre.
- Environnement (environment) : Vous pouvez définir des variables d'environnement spécifiques à chaque
service dans le fichier docker-compose.yml. Cela permet de personnaliser le comportement des
conteneurs.
- Docker Compose CLI : Docker Compose offre un ensemble de commandes pour gérer votre application,
telles que docker-compose up pour démarrer les conteneurs, docker-compose down pour les arrêter,
docker-compose ps pour afficher l'état des conteneurs, et bien d'autres.
- Fichier docker-compose.yml : C'est le fichier de configuration principal où vous spécifiez les services, les
réseaux, les volumes, les variables d'environnement, etc., nécessaires pour votre application. Il s'agit d'un
fichier au format YAML.
27. Structure d’un Docker Compose
La structure d'un fichier Docker
Compose est assez simple. Un fichier
Docker Compose est généralement
nommé docker-compose.yml et est
utilisé pour définir et exécuter des
applications Docker à l'aide de
plusieurs conteneurs.
Voici un exemple de structure de base :