Mémo - Commandes Docker 🐳
· 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]