⚠️ Traduction non officielle - Cette documentation est une traduction communautaire non officielle de Docker.

Qu'est-ce que Docker ?

Docker est une plateforme ouverte pour développer, expédier et exécuter des applications. Docker vous permet de séparer vos applications de votre infrastructure afin que vous puissiez livrer des logiciels rapidement. Avec Docker, vous pouvez gérer votre infrastructure de la même manière que vous gérez vos applications. En tirant parti des méthodologies de Docker pour expédier, tester et déployer du code, vous pouvez réduire considérablement le délai entre l'écriture du code et son exécution en production.

La plateforme Docker

Docker fournit la capacité de packager et d'exécuter une application dans un environnement faiblement isolé appelé conteneur. L'isolation et la sécurité vous permettent d'exécuter de nombreux conteneurs simultanément sur un hôte donné. Les conteneurs sont légers et contiennent tout ce qui est nécessaire pour exécuter l'application, donc vous n'avez pas besoin de vous fier à ce qui est installé sur l'hôte. Vous pouvez partager des conteneurs pendant que vous travaillez, et être sûr que tous ceux avec qui vous partagez obtiennent le même conteneur qui fonctionne de la même manière.

Docker fournit des outils et une plateforme pour gérer le cycle de vie de vos conteneurs :

  • Développez votre application et ses composants de support en utilisant des conteneurs.
  • Le conteneur devient l'unité pour distribuer et tester votre application.
  • Quand vous êtes prêt, déployez votre application dans votre environnement de production, comme conteneur ou service orchestré. Cela fonctionne de la même manière que votre environnement de production soit un centre de données local, un fournisseur cloud, ou un hybride des deux.

À quoi puis-je utiliser Docker ?

Livraison rapide et cohérente de vos applications

Docker rationalise le cycle de vie de développement en permettant aux développeurs de travailler dans des environnements standardisés utilisant des conteneurs locaux qui fournissent vos applications et services. Les conteneurs sont excellents pour l'intégration continue et la livraison continue (CI/CD).

Considérez le scénario d'exemple suivant :

  • Vos développeurs écrivent du code localement et partagent leur travail avec leurs collègues en utilisant des conteneurs Docker.
  • Ils utilisent Docker pour pousser leurs applications dans un environnement de test et exécuter des tests automatisés et manuels.
  • Quand les développeurs trouvent des bugs, ils peuvent les corriger dans l'environnement de développement et les redéployer dans l'environnement de test pour les tests et la validation.
  • Quand les tests sont terminés, faire parvenir la correction au client est aussi simple que de pousser l'image mise à jour vers l'environnement de production.

Déploiement et mise à l'échelle réactifs

La plateforme basée sur les conteneurs de Docker permet des charges de travail hautement portables. Les conteneurs Docker peuvent s'exécuter sur l'ordinateur portable local d'un développeur, sur des machines physiques ou virtuelles dans un centre de données, sur des fournisseurs cloud, ou dans un mélange d'environnements.

La portabilité et la nature légère de Docker facilitent également la gestion dynamique des charges de travail, la mise à l'échelle vers le haut ou la suppression d'applications et de services selon les besoins métier, en temps quasi réel.

Exécuter plus de charges de travail sur le même matériel

Docker est léger et rapide. Il fournit une alternative viable et rentable aux machines virtuelles basées sur hyperviseur, vous permettant d'utiliser plus de votre capacité serveur pour atteindre vos objectifs métier. Docker est parfait pour les environnements à haute densité et pour les déploiements petits et moyens où vous devez faire plus avec moins de ressources.

Architecture Docker

Docker utilise une architecture client-serveur. Le client Docker parle au démon Docker, qui fait le gros du travail de construction, d'exécution et de distribution de vos conteneurs Docker. Le client Docker et le démon peuvent s'exécuter sur le même système, ou vous pouvez connecter un client Docker à un démon Docker distant. Le client Docker et le démon communiquent en utilisant une API REST, sur des sockets UNIX ou une interface réseau. Un autre client Docker est Docker Compose, qui vous permet de travailler avec des applications composées d'un ensemble de conteneurs.

Diagramme d'architecture Docker

Le démon Docker

Le démon Docker (dockerd) écoute les requêtes de l'API Docker et gère les objets Docker tels que les images, conteneurs, réseaux et volumes. Un démon peut aussi communiquer avec d'autres démons pour gérer les services Docker.

Le client Docker

Le client Docker (docker) est la façon principale dont de nombreux utilisateurs Docker interagissent avec Docker. Quand vous utilisez des commandes telles que docker run, le client envoie ces commandes à dockerd, qui les exécute. La commande docker utilise l'API Docker. Le client Docker peut communiquer avec plus d'un démon.

Docker Desktop

Docker Desktop est une application facile à installer pour votre environnement Mac, Windows ou Linux qui vous permet de construire et partager des applications conteneurisées et des microservices. Docker Desktop inclut le démon Docker (dockerd), le client Docker (docker), Docker Compose, Docker Content Trust, Kubernetes, et Credential Helper. Pour plus d'informations, voir Docker Desktop.

Registres Docker

Un registre Docker stocke les images Docker. Docker Hub est un registre public que tout le monde peut utiliser, et Docker cherche les images sur Docker Hub par défaut. Vous pouvez même exécuter votre propre registre privé.

Quand vous utilisez les commandes docker pull ou docker run, Docker tire les images requises depuis votre registre configuré. Quand vous utilisez la commande docker push, Docker pousse votre image vers votre registre configuré.

Objets Docker

Quand vous utilisez Docker, vous créez et utilisez des images, conteneurs, réseaux, volumes, plugins et d'autres objets. Cette section est un bref aperçu de certains de ces objets.

Images

Une image est un modèle en lecture seule avec des instructions pour créer un conteneur Docker. Souvent, une image est basée sur une autre image, avec quelques personnalisations supplémentaires. Par exemple, vous pouvez construire une image qui est basée sur l'image ubuntu, mais installe le serveur web Apache et votre application, ainsi que les détails de configuration nécessaires pour faire fonctionner votre application.

Vous pourriez créer vos propres images ou vous pourriez seulement utiliser celles créées par d'autres et publiées dans un registre. Pour construire votre propre image, vous créez un Dockerfile avec une syntaxe simple pour définir les étapes nécessaires pour créer l'image et l'exécuter. Chaque instruction dans un Dockerfile crée une couche dans l'image. Quand vous changez le Dockerfile et reconstruisez l'image, seules les couches qui ont changé sont reconstruites. C'est une partie de ce qui rend les images si légères, petites et rapides, comparées à d'autres technologies de virtualisation.

Conteneurs

Un conteneur est une instance exécutable d'une image. Vous pouvez créer, démarrer, arrêter, déplacer ou supprimer un conteneur en utilisant l'API Docker ou CLI. Vous pouvez connecter un conteneur à un ou plusieurs réseaux, attacher du stockage à celui-ci, ou même créer une nouvelle image basée sur son état actuel.

Par défaut, un conteneur est relativement bien isolé des autres conteneurs et de sa machine hôte. Vous pouvez contrôler à quel point le réseau, le stockage ou d'autres sous-systèmes sous-jacents d'un conteneur sont isolés des autres conteneurs ou de la machine hôte.

Un conteneur est défini par son image ainsi que par toutes les options de configuration que vous lui fournissez quand vous le créez ou le démarrez. Quand un conteneur est supprimé, tous les changements à son état qui ne sont pas stockés dans un stockage persistant disparaissent.

Exemple de commande docker run

La commande suivante exécute un conteneur ubuntu, s'attache interactivement à votre session de ligne de commande locale, et exécute /bin/bash.

$ docker run -i -t ubuntu /bin/bash

Quand vous exécutez cette commande, ce qui suit se produit (en supposant que vous utilisez la configuration de registre par défaut) :

  1. Si vous n'avez pas l'image ubuntu localement, Docker la tire depuis votre registre configuré, comme si vous aviez exécuté docker pull ubuntu manuellement.

  2. Docker crée un nouveau conteneur, comme si vous aviez exécuté une commande docker container create manuellement.

  3. Docker alloue un système de fichiers en lecture-écriture au conteneur, comme sa couche finale. Cela permet à un conteneur en cours d'exécution de créer ou modifier des fichiers et répertoires dans son système de fichiers local.

  4. Docker crée une interface réseau pour connecter le conteneur au réseau par défaut, puisque vous n'avez spécifié aucune option de réseau. Cela inclut l'attribution d'une adresse IP au conteneur. Par défaut, les conteneurs peuvent se connecter aux réseaux externes en utilisant la connexion réseau de la machine hôte.

  5. Docker démarre le conteneur et exécute /bin/bash. Parce que le conteneur s'exécute interactivement et est attaché à votre terminal (dû aux drapeaux -i et -t), vous pouvez fournir une entrée en utilisant votre clavier pendant que Docker enregistre la sortie vers votre terminal.

  6. Quand vous exécutez exit pour terminer la commande /bin/bash, le conteneur s'arrête mais n'est pas supprimé. Vous pouvez le redémarrer ou le supprimer.

La technologie sous-jacente

Docker est écrit dans le langage de programmation Go et tire parti de plusieurs fonctionnalités du noyau Linux pour livrer sa fonctionnalité. Docker utilise une technologie appelée namespaces pour fournir l'espace de travail isolé appelé conteneur. Quand vous exécutez un conteneur, Docker crée un ensemble de namespaces pour ce conteneur.

Ces namespaces fournissent une couche d'isolation. Chaque aspect d'un conteneur s'exécute dans un namespace séparé et son accès est limité à ce namespace.

Étapes suivantes