Mémo - Commandes Docker

by Lucas Videlaine


Docker est une logiciel libre permettant de lancer des applications dans des conteneurs logiciels.
Il ne s'agit pas de virtualisation, mais de conteneurisation, une forme plus légère qui s'appuie sur certaines parties de la machine hôte pour son fonctionnement. Cette approche permet d'accroître la flexibilité et la portabilité d’exécution d'une application, laquelle va pouvoir tourner de façon fiable et prévisible sur une grande variété de machines hôtes, que ce soit sur la machine locale, un cloud privé ou public, une machine nue, etc.
Techniquement, Docker étend le format de conteneur Linux standard, LXC, avec une API de haut niveau fournissant une solution pratique de virtualisation qui exécute les processus de façon isolée. Pour ce faire, Docker utilise entre autres LXC, cgroups et le noyau Linux lui-même. Contrairement aux machines virtuelles traditionnelles, un conteneur Docker n'inclut pas de système d'exploitation, mais s'appuie au contraire sur les fonctionnalités du système d’exploitation fournies par la machine hôte.

Définition du vocabulaire

Containers

Un container Docker, à l’opposé des machines virtuelles traditionnelles, n'embarque pas de système d'exploitation invité. En effet, il s’appuie sur les fonctionnalités du noyau hôte et exploite 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 tels qu'un système de base de données, un serveur web, une application python, etc. Les images sont créées à partir de fichiers de configuration, nommés « Dockerfiles », qui décrivent exactement ce qui doit être installé dans le container. Un conteneur correspond donc à l’exécution d’une image spécifique.

Dockerfiles

Le Dockerfile est votre fichier source qui permet la construction d'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 autres répertoires d'images, mais vous pouvez aussi choisir 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 microservices, il devient nécessaire de gérer les différents containers ainsi que leurs interconnexions.

Volumes

Les volumes sont un mécanisme permettant 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 et de migration ou encore leur gestion facilité grâce aux outils et commandes Docker.

Kubernetes

Kubernetes est un système open source qui vise à fournir une plateforme permettant d'automatiser le déploiement, la montée en charge et la mise en œuvre de conteneurs.

Commandes indispensables

Informations diverses sur Docker

docker info
docker version

Créer et démarrer un container

docker run [image_name]

Arrêter un container

docker stop [container_id]

Démarrer un container

docker start [container_id]

Supprimer un container

docker rm [container_id]

Lister les containers démarrés et lister tous les containers

docker ps 
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 arrêtés)

docker rm $(docker  ps -a -q)

Lister les images locales (téléchargées ou construites)

docker images

Supprimer une ou des images

docker rmi [container_id] [container_id] ...

Construire une image à partir d'un Dockerfile

docker build -t [wanted_image_name] -f [path_to_dockerfile]

Exécuter un fichier docker-compose en mode détaché

docker-compose -d -f [path_to_docker-compose-file]

Exécuter une commande au sein d'un container

docker exec -it [container_id] [command]
docker exec -it [container_id] bash

Afficher les journaux de logs d'un container

docker logs [container_id]

Sources

Documentation officielle
Article initial de 2018