Docker est un logiciel libre qui automatise le déploiement d’applications dans des conteneurs logiciels, à mi-chemin entre la virtualisation applicative et l’automatisation.

Il complète le conteneur Linux LXC (qu’il n’utilise plus depuis peu) en isolant les processus les uns des autres pour créer une virtualisation de haut niveau.

Contrairement aux autres systèmes de (para) virtualisation, Docker n’embarque pas un système d’exploitation invité mais ne s’occupe que de la partie haut niveau. Il utilise le noyau de l’hôte et ne fait fonctionner que le strict nécessaire sur les invités.


Vocabulaire :

Containers :

Un container Docker, à l’opposé de machines virtuelles traditionnelles, ne requiert aucun système d’exploitation séparé. Il s’appuie plutôt sur les fonctionnalités du noyau du système d’exploitation sous-jacent et utilise de l’isolation de ressources (CPU, mémoire, I/O, connexions réseau etc…).

Images :

Une image Docker représente le système de fichiers, sans les processus. Elle contient tout ce que vous avez décidé d’y installer (Java, une base de donnée, un script que vous allez lancer, etc…), mais est dans un état inerte. Les images sont créées à partir de fichiers de configuration, nommés « Dockerfiles », qui décrivent exactement ce qui doit être installé sur le système. Un conteneur est l’exécution d’une image.

Dockerfiles :

Le Dockerfile est votre fichier source qui une fois compilé donne une image. Un Dockerfile peut être inclus dans d’autres Dockerfile, et être à la base de plusieurs images différentes. Vous pouvez choisir d’utiliser des images officielles, des images modifiées que vous trouvez sur Docker Hub ou de personnaliser vos propres images en écrivant un Dockerfile.

Compose :

Compose est un outil pour définir et exécuter des applications multi-conteneurs. Les conteneurs étant idéaux pour des applications basées sur des micro services, il devient évident que rapidement on doit faire fasse à l’interconnexion de plusieurs conteneurs et à la gestion de multi-conteneurs.

Volumes :

Les volumes sont le mécanisme le plus adapté pour la persistance des données générées par et utilisées par les conteneurs Docker. Les volumes Docker ont de nombreux avantages, tels qu’une grande simplicité de sauvegarde ou de migration ou encore leurs gestions facilités grâce aux outils et commandes Docker.

Docker Swarm :

Lors d’une mise en production, deux contraintes fortes font leur apparition : la montée en charge et la disponibilité des conteneurs afin de garantir une haute-disponibilité. Cet aspect entraine donc une multiplication des containers et des hôtes Docker. Il devient alors difficile de gérer de manière simple via le client Docker tous ces éléments. C’est ici qu’intervient Docker Swarm qui va permettre d’orchestrer simplement l’ensemble des opérations.

Kubernetes :

Depuis sa version 17.06, la plateforme Docker est devenu une solution multi-orchestrateurs. Swarm, l’orchestrateur-maison de containers de Docker, côtoiera de façon native Kubernetes, l’autre orchestrateur né chez Google. Kubernetes tend à être le plus utilisé actuellement et grappille petit à petit les parts de Swarm.


Commandes impératives :

Informations diverses sur Docker :

$ docker info
$ docker version

Lancer un container :

$ docker run

Arrêter un container :

$ docker stop

Démarrer un container arrêté :

$ docker start

Supprimer un container (après l’avoir stopper) :

$ docker rm

Liste des containers actifs :

$ docker ps

Liste des containers actifs et inactifs :

$ docker ps -a

Arrêter tous les containers :

$ docker stop $(docker  ps -a -q)

Démarrer tous les containers :

$ docker start $(docker ps -a -q)

Supprimer tous les containers (après les avoir stopper) :

$ docker rm $(docker  ps -a -q)

Liste des images :

$ docker images

Supprimer une image :

$ docker rmi

Exécuter un Dockerfile :

$ docker-compose -d -f dockerfile.yml

Entrer dans un container :

$ docker exec -it [container] bash

Afficher les logs d’un container :

$ docker logs [container]

Documentation Supplémentaire :

https://docs.docker.com/engine/reference/commandline/docker/