Docker est une plateforme permettant de lancer certaines applications dans des conteneurs logiciels. Docker est un outil qui peut empaqueter une application et ses dépendances dans un conteneur isolé, qui pourra être exécuté sur n'importe quel serveur.
Un container est un système d’execution léger, à ne pas confondre avec de la virtualisation car il ne contiendra que le strict nécessaire pour faire tourner un programme. Il offre des possibilités de confinement d’application et une grande souplesse au niveau de la configuration.
Une image est un container build mais qui n’est pas encore en train de tourner.
Une image est build grâce à un type de fichier qui s’appelle Dockerfile et qui possède une liste limitée de commandes :
Docker-compose est une sorte d’orchestrateur de containers. Dans un seul fichier (.yml ou .yaml) on va pouvoir build des images différentes d’un seul coup, et on va même pouvoir relier certaines d’entre elles grâce à Docker-Network (automatique avec la directive “network”). Deux containers sur le même network pourront communiquer l’un avec l’autre uniquement via le nom donné à l’image, sans avoir besoin de préciser l’IP ni le port de l’autre.
Dans le docker-compose.yml, on va pouvoir créer des volumes à un dossier sur notre host. “Volumes are file systems mounted on Docker containers to preserve data generated by the running container. The volumes are stored on the host, independent of the container life cycle. This allows users to back up data and share file systems between containers easily.”
Pour résumer tout ça avec un schéma :

INSTALLATION : ici
COMMANDES :
DOCKERFILE
Pour build une image
docker build -t <path_to_dockerfile> --name <image_name> --port <host_port><container port>
Pour run une image
docker run --name <image_name> -p <host_port>:<container_port>