Commandes Docker

Le logiciel open source Docker s’est imposé comme la norme de la virtualisation des conteneurs d’applications. La virtualisation des conteneurs est le prolongement du développement des machines virtuelles, à une différence fondamentale près : au lieu de simuler un système d’exploitation complet, une seule application est virtualisée dans un seul conteneur.

Docker est piloté sur le système local via une interface en ligne de commande. Les commandes utilisées sont essentielles pour travailler avec Docker. Nous expliquons comment les commandes Docker fonctionnent et présentons les commandes les plus importantes.

Que sont les commandes Docker ?

Pour mieux comprendre ce que sont les commandes Docker et comment elles fonctionnent, nous passons brièvement en revue la structure de Docker. L’installation de Docker sur un hôte local contient comme noyau le moteur d’exécution Docker Engine. Docker Engine est à son tour constitué de trois composants principaux :

  1. Le daemon Docker, qui fonctionne comme un dockerd sur l’hôte.
  2. L’API Docker est fournie par le daemon Docker. Le daemon Docker est interrogé et contrôlé par l’API.
  3. L’interface en ligne de commande (en anglais « Command line interface », CLI) est utilisée comme commande docker pour communiquer avec l’API Docker.

On entre les commandes Docker dans la ligne de commande en tant qu'utilisateur pour piloter Docker. Les commandes sont reçues et traitées par l’interface CLI Docker. Les appels API correspondants sont générés à partir des commandes auprès du daemon Docker qui exécute la tâche réelle.

Conseil

Pour comprendre les commandes Docker, il est préférable de se familiariser soi-même avec le logiciel. Consultez notre tutoriel Docker pour intégrer les notions essentielles.

Comment les commandes Docker sont-elles structurées ?

Deux types de commandes Docker se sont établies au fil de l’évolution historique de Docker.

Il existe d’une part une poignée de commandes autonomes. Celles-ci sont généralement des verbes et exécutent une action spécifique lors de l’appel. Des exemples connus en sont 'docker pull' ou 'docker build'. Mais il est devenu de plus en plus difficile de trouver des verbes appropriés au gré de la croissance de la plateforme et de l’apparition de nouvelles fonctionnalités.

D’autre part, les commandes dites « commandes de gestion Docker » ont été introduites pour regrouper des commandes afin de remettre de l’ordre dans cette pléthore de commandes. Les commandes de gestion Docker sont généralement des substantifs. Des exemples connus en sont 'docker image' et 'docker container'. Les commandes de gestion Docker regroupent des sous-commandes qui sont à leur tour des verbes.

Ceci permet d’utiliser les mêmes verbes dans des contextes différents sans que les noms n’entrent en collision. Par exemple, il existe la commande 'docker image rm' pour supprimer une image, ainsi que 'docker container rm' pour supprimer un conteneur.

Qu’il s’agisse de commandes Docker autonomes ou de commandes de gestion Docker, l’appel des commandes Docker est exécuté dans la ligne de commande. Comme à l’accoutumée, le nom de la commande est saisi en étant suivi de paramètres facultatifs. Le cas échéant, ceci est encore suivi du nom d’un ou de plusieurs objets. Il peut s’agir ici d’un conteneur, d’une image, d’un volume ou d’autres éléments similaires.

Examinons la structure générale d’une commande Docker dans la ligne de commande. Dans le cas le plus simple, seule la CLI Docker est appelée avec une option jointe :

docker [--options]

Les exemples connus sont l’affichage de la version Docker ou de l’aide Docker :

# Afficher la version de Docker
docker --version
# Afficher l’aide de Docker
docker --help
Conseil

Joignez l’option '--help' à une sous-commande Docker pour sortir les informations d’aide de la commande.

Dans la plupart des cas, nous ne nous contentons pas d’appeler la CLI Docker, mais nous soumettons également le nom d’une commande spécifique. Il peut s'agir ici d’une commande autonome ou d’une commande de gestion suivie d’une sous-commande. Examinons dans un premier temps la structure générale d’une commande Docker autonome. Le nom 'docker' est suivi du nom de la commande, des paramètres facultatifs, ainsi que, le cas échéant, du nom d’un objet Docker :

docker <command> [--options] <object>

Deux commandes Docker autonomes connues du stade de production sont utilisées pour afficher différentes informations d’état :

# Afficher l’information Docker
docker info
# Afficher les images Docker sur l’hôte
docker images

Nous allons maintenant nous familiariser avec les commandes de gestion Docker. Comme nous l’avons déjà mentionné, ces dernières servent à remettre de l’ordre dans le chaos issu de la croissance désorganisée des commandes. Par exemple, il existait au départ la commande 'docker ls' pour lister les conteneurs sur un hôte et, par analogie, la commande 'docker images' pour lister les images. Ce n’est pas très intuitif. Même si l’on peut continuer à utiliser ces deux commandes, il existe aujourd’hui des alternatives plus cohérentes avec 'docker container ls' et 'docker image ls'.

Le schéma général des commandes de gestion Docker est basé sur la structure connue des commandes Docker autonomes. Le nom « docker » est suivi du nom de la commande de gestion, ainsi que de la sous-commande. Nous clôturons à nouveau avec des paramètres facultatifs, ainsi que le nom d’un objet Docker le cas échéant :

docker <management-command> <subcommand> [--options] <object>

Nous pouvons illustrer le modèle par un exemple concret. Voici la commande Docker pour démarrer un nouveau conteneur à partir de l’image « httpd » en mode interactif :

docker container run -it httpd

Comparons la structure générale des commandes de gestion Docker avec les différents éléments de l’exemple précédent :

  Docker CLI Commande Docker Options Objet
Structure docker <command> <subcommand> [--options] <object>
Exemple docker container run -it httpd
Détails Appelle Docker et soumet d’autres commandes et options. Les noms de commandes doivent être écrits exactement comme indiqué dans la documentation. Les options sont soumises à la commande et contrôlent le comportement de celle-ci. Deux conventions d’écriture existent pour les options, voir ci-dessous. Espace réservé pour un objet en tant que destination de l’opération. S’il s’agit d’objets Docker, tels que des conteneurs et des images, le nom et le code de hachage de l’objet sont utilisés comme ID.

Quelles options sont acceptées par les commandes Docker ?

Comme la plupart des commandes de ligne de commande, les commandes Docker sont contrôlées par des paramètres facultatifs, dénommés « options ». Les options succèdent au nom de la commande. Elles sont sensibles à la casse. Deux conventions d’écriture sont généralement possibles pour la plupart des options :

  1. Forme abrégée : -, p. ex. 'docker -v'

La forme abrégée est peu évocatrice. Mais elle permet de combiner plusieurs options en une seule, par exemple 'docker run -it' au lieu de 'docker -i -t'. La séquence est quelconque lors du regroupement ; on peut ainsi adopter la notation 'docker run -ti' sans difficulté. La forme abrégée se prête bien au travail accéléré avec des commandes connues dans la ligne de commande.

  1. Forme longue : --<nom de l’option>, p. ex. 'docker --version'

La forme longue est aisément compréhensible, mais nécessite plus de temps à la saisie et occupe davantage d’espace. La forme longue convient bien pour la création de scripts ; les noms d’options évocateurs font office de documentation.

Quel est le lien entre Dockerfile, l’image Docker et le conteneur Docker ?

Une grande partie des commandes Docker existantes sont utilisées pour gérer les conteneurs Docker, les images Docker et les volumes Docker. Avant de nous pencher en détail sur les commandes Docker spécifiques, nous vous donnons un bref aperçu des liens qui existent entre le conteneur et l’image, deux notions essentielles de Docker.

Un conteneur Docker est créé à partir d’un modèle non modifiable, appelé image. Une image Docker contient les dépendances et les paramètres de configuration nécessaires à la création d’un conteneur. Nous ne pouvons pas seulement créer un conteneur à partir d’une image, mais aussi enregistrer un conteneur existant dans une nouvelle image. Conteneur et image sont aussi proches l’un de l’autre que l’œuf et la poule :

Commande Docker Signification Analogie de l’œuf et de la poule
docker build Générer une image Docker à partir d’un fichier Dockerfile Doter un œuf d’informations génétiques
docker run <image> Démarrer le conteneur Docker à partir de l’image Le poussin sort de l’œuf
docker commit <container> Générer une image Docker à partir d’un container La poule pond un œuf

Vue d’ensemble des commandes Docker principales

Docker a connu un développement éclair au cours des dix dernières années. Docker englobe aujourd’hui des fonctionnalités qui vont bien au-delà de la virtualisation des conteneurs à laquelle il doit son origine. On peut ainsi orchestrer des groupes de conteneurs avec Docker Compose et Docker Swarm, ce qui n’était traditionnellement possible qu’avec des alternatives à Docker. Voici un sous-ensemble des commandes d’origine, car une liste exhaustive sortirait du cadre de cet article.

Un conteneur Docker englobe les composants suivants. Les commandes correspondantes sont disponibles à des fins de pilotage :

  1. Système d’exploitation de conteneur et système de fichiers Union
  2. Composants logiciels et configuration
  3. Variables d’environnement et configuration à l’exécution
  4. Ports et volumes
  5. Processus et journaux

Quelles sont les commandes Docker autonomes ?

Avant tout, il faut savoir que la plupart des fonctionnalités de Docker peuvent être contrôlées aujourd’hui à l’aide de commandes de gestion Docker. Même si les commandes d’origine continuent de fonctionner, il existe des équivalents plus évocateurs :

Commande Docker autonome Commande de gestion Docker équivalente Explication
docker ps docker container ls Afficher les conteneurs qui s’exécutent sur l’hôte
docker images docker image ls Afficher les images disponibles sur l’hôte
docker inspect <object> docker <object-type> inspect <object>, p. ex. docker image inspect <image> Afficher des informations sur les objets Docker tels que les images, les conteneurs, les volumes, etc.

Cependant, il y existe encore une poignée de commandes Docker autonomes. Ces commandes ne peuvent pas être remplacées par des commandes de gestion Docker car elles se rapportent à l’installation de Docker dans son ensemble :

Commande Docker autonome Explication
docker --help Afficher l’aide pour Docker CLI
docker --version Afficher la version de l’installation de Docker
docker info Afficher les informations concernant l’installation Docker à l’échelle du système
docker login Se connecter à un registre de conteneurs ou à un back-end de Cloud
docker logout Se déconnecter du registre de conteneurs ou du back-end de Cloud

Quelles sont les commandes de conteneur de Docker ?

Contrairement à la virtualisation des machines virtuelles, un conteneur Docker ne contient pas son propre système d’exploitation. Au lieu de cela, tous les conteneurs présents sur un hôte Docker accèdent au même noyau du système d’exploitation. Une certaine quantité de ressources système est attribuée à chaque conteneur lorsqu’il est exécuté par commande. Cela inclut la mémoire vive, les cœurs de CPU, la mémoire de masse et les périphériques réseau (virtuels). En voici deux exemples :

Assigner un cœur de CPU et 10 mégaoctets de mémoire au conteneur Docker :

docker container run --cpus="1" --memory="10m" <image>

Mapper le port TCP 80 de l’hôte Docker sur le port 80 du conteneur Docker :

docker container run -p 80:80/tcp <image>

Sur un hôte, on peut démarrer, arrêter et supprimer des conteneurs. Il est possible en outre de piloter les processus en cours d’exécution. Par conséquent, de nombreuses commandes de conteneur Docker traitent ces tâches :

Commande de conteneur Docker Explication
docker container ls Afficher les conteneurs qui s’exécutent sur l’hôte
docker container stats Afficher les informations d’état des conteneurs en cours d'exécution
docker container run <image> Démarrer un nouveau conteneur à partir de l’image spécifiée ou exécuter une commande dans un nouveau conteneur
docker container commit <container> Créer une nouvelle image à partir des modifications apportées à un conteneur en cours d’exécution
docker container attach <container> Permet d’attacher des flux locaux standard d’entrée, de sortie et d’erreur à un conteneur en cours d’exécution
docker container logs <container> Afficher les informations de journal d’un conteneur
docker container inspect <container> Afficher les informations détaillées d’un conteneur
docker container update <container> Renouveler la configuration d’un conteneur
docker container rename <container> <new-name> Attribuer un nouveau nom à un conteneur
docker container port <container> Afficher les affectations de port d’un conteneur
docker container pause <container> Mettre en pause les processus en cours d’exécution dans un conteneur
docker container unpause <container> Reprendre l’exécution des processus en pause dans un conteneur
docker container exec <container> <command> Exécuter une commande dans un conteneur en cours d’exécution
docker container stop <container> Arrêter l’exécution d’un conteneur
docker container start <container> Reprendre l’exécution d’un conteneur arrêté
docker container restart <container> Redémarrer un conteneur ; se comporte comme docker container stop <container> ; docker container start <container>
docker container top <container> Répertorier les processus en cours d’exécution dans un conteneur
docker container kill <container> Tuer un conteneur en cours d’exécution
docker container rm <container> Supprimer un conteneur du système
docker container prune Supprimer tous les conteneurs arrêtés du système
docker container cp <container>:<source-path> <dest-path> Copier des fichiers et des dossiers entre un conteneur et le système de fichiers local.
docker container diff <container> Afficher les modifications apportées au système de fichiers d’un conteneur
docker container export <container> Sortir le système de fichiers d’un conteneur en tant qu’archive tarball, tout en aplatissant toutes les couches à une seule

Quelles sont les commandes d’image de Docker ?

Contrairement aux images de machines virtuelles, une image Docker n’est pas un fichier isolé à l’état normal. Au lieu de cela, il s’agit d'un regroupement de plusieurs composants :

  • Couches d’image : contiennent les données ajoutées par opération sur le système de fichiers. Les couches sont empilées et aplaties à un niveau cohérent par un système de fichiers Union.
  • Image parente : fournit les fonctions de base de l’image et ancre l’image dans l’arborescence de l’écosystème Docker.
  • Manifeste d’images : décrit le regroupement et identifie les couches d’images qu’il contient.

Une image Docker contient des couches protégées en écriture, appelées « layers » en anglais. Chaque couche décrit les modifications successives du système de fichiers de l’image. Une nouvelle couche est créée pour chaque opération censée entraîner une modification du système de fichiers de l’image. Les commandes suivantes permettent d’interagir avec les images disponibles sur l’hôte :

Commande d’image Docker Explication
docker image build Générer une image Docker à partir d’un fichier Dockerfile
docker image history <image> Afficher les étapes de création d’une image Docker
docker image import <tarball> Créer une image Docker à partir d’une archive « tarball »
docker image inspect <image> Afficher des informations détaillées pour une image Docker
docker image load Charger l’archive d’image créée avec 'docker image save'
docker image ls Répertorier les images disponibles sur l’hôte Docker
docker image prune Supprimer les images Docker inutilisées de l’hôte Docker
docker image pull <image> Extraire (tirer) l’image Docker du registre
docker image push <image> Envoyer (pousser) une image dans un registre
docker image rm <image> Supprimer une image de l’hôte local
docker image save <image> Créer une archive d’image avec toutes les couches à partir d’une image
docker image tag <source-image> <target-image> Baliser une image

Quelles sont les commandes des volumes de Docker ?

Un conteneur Docker contient une application isolée du monde extérieur. Dans de nombreux cas, il est toutefois utile de partager des fichiers entre le conteneur et le système hôte. Docker connaît différents types de volumes à cet effet. Les différences entre les types de volume sont subtiles ; le choix du type approprié dépend fortement du scénario d’utilisation respectif :

  • Volumes nommés : recommandés
  • Volumes anonymes : sont perdus lors de la suppression du conteneur
  • Points de montage : conditionnés à des raisons historiques et non recommandés ; performants
  • Points de montage tmpfs : stockés sur la mémoire de l’hôte ; sous Linux uniquement

Une poignée de commandes Docker est disponible pour interagir avec les volumes :

Commande Docker Volume Explication
docker volume ls Afficher les volumes présents sur l’hôte
docker volume prune Supprimer tous les volumes inutilisés de l’hôte
docker volume create Créer un nouveau volume sur l’hôte
docker inspect <volume> Afficher les informations détaillées d’un volume
docker volume rm <volume> Supprimer le volume spécifié de l’hôte