Docker est utilisé pour le développement et le déploiement des applications, très utilisé par les entreprises.
Docker introduit la notion de conteneur, d’images et de volumes.
Installer docker :
Pour linux : https://docs.docker.com/desktop/install/linux-install/
Pour windows : https://docs.docker.com/desktop/windows/install/
Qu’est-ce qu’un conteneur ?

Une machine virtuelle est comme un système d’exploitation complet. Un conteneur, lui, délivre uniquement les ressources nécessaires à une application. Il partage son noyau de système d’exploitation (kernel) de son OS avec d’autres conteneurs. Et utilise un conteneur engine pour exécuter plusieurs conteneurs sur le même noyau de système d’exploitation. C’est une différence avec une machine virtuelle qui utilise un hyperviseur pour distribuer les ressources hardware. Un hyperviseur est un logiciel qui crée et exécute des machines virtuelles.
Un conteneur est donc une alternative aux machines virtuelles. Il permet de créer des environnements de développement et de production isolés les uns des autres. Il est possible de créer plusieurs conteneurs sur une même machine, chacun avec son propre système d’exploitation, ses propres librairies et ses propres applications. Les conteneurs sont plus légers que les machines virtuelles, ils sont donc plus rapides à créer et à détruire.
Qu’est-ce qu’une image ?
Une image est un template prêt à l’emploie qui contient des instruction de création de conteneur. Elle peut être crée à partir d’un Dockerfile ou récupéré sur un registre docker (docker hub). Un registre est un dépôt d’images docker. Docker hub est le registre officiel de docker. Une image est composé de plusieurs couches, chaque couche est une instruction du Dockerfile.
Le Dockerfile :
Le Dockerfile est un fichier de configuration qui contient les instructions pour créer une image docker.
Exemple :
FROM ubuntu:latest
RUN apt-get update
RUN apt-get install -y apache2
EXPOSE 80
CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
Ce Dockerfile permet de créer une image docker qui contient un serveur apache.
L’instruction FROM permet de spécifier l’image de base utilisé.
L’instruction RUN permet d’exécuter une commande.
L’instruction EXPOSE permet d’ouvrir un port.
L’instruction CMD permet d’exécuter une commande au démarrage du conteneur.
Qu’est-ce qu’un volume :
Un volume docker est un dossier partagé entre le conteneur et l’hôte, car le conteneur ne stocke pas de données. Le volume peut se trouver sur le système de fichier de l’hôte ou sur le système de fichier docker qui est accécible via le système de fichier de l’hôte.
Un volume peut être partagé entre plusieurs conteneurs. Il permet de stocker des données persistantes. Il est possible de créer un volume à partir d’un conteneur ou d’un Dockerfile.
Pour créer un volume à partir d’un conteneur :
docker run -tid --name <nom du conteneur> -v <nom du volume>:<chemin du conteneur> <nom de l'image>:<version>
docker run -tid --name <nom du conteneur> --mount source=<nom du volume>,target=<chemin du conteneur> <nom de l'image>:<version>
docker run -tid --name <nom du conteneur2> --volumes-from <nom du conteneur1> <nom de l'image>:<version>
Pour créer un volume à partir d’un Dockerfile (il faut rajouter la ligne suivante):
VOLUME <chemin du volume>

Quelques commandes utiles :
Créer une image à partir d’un Dockerfile :
docker build -t <nom de l'image>:<version> <chemin du Dockerfile>
Récupérer une image depuis un registre :
docker pull <nom de l'image>:<version>
Lister les images :
docker images
docker image ls
Supprimer une image : (supprimer les conteneurs qui utilisent cette image avant)
docker rmi <nom de l'image>:<version>
Lister les conteneurs :
docker ps
docker ps -a
Accéder aux propriétés d’un conteneur :
docker inspect <nom du conteneur>
Redémarrer un conteneur :
docker start <nom du conteneur>
Arrêter un conteneur :
docker stop <nom du conteneur>
Lancer un conteneur à partir d’une image :
docker run -tid --name <nom du conteneur> <nom de l'image>:<version>
docker run -tid --name <nom du conteneur> -p <port local>:<port du conteneur> <nom de l'image>:<version>
Se connecter au terminal du conteneur :
docker exec -ti <nom du conteneur> bash
docker exec -ti <nom du conteneur> sh
Supprimer un conteneur :
docker rm <nom du conteneur>
Créer un volume :
docker volume create <nom du volume>
Lister les volumes :
docker volume ls
Accéder aux propriétés d’un volume :
docker volume inspect <nom du volume>
Supprimer un volume :
docker volume rm <nom du volume>