Aperçu de Docker Build
Docker Build implémente une architecture client-serveur, où :
- Client : Buildx est le client et l'interface utilisateur pour exécuter et gérer les builds.
- Serveur : BuildKit est le serveur, ou constructeur, qui gère l'exécution du build.
Lorsque vous lancez un build, le client Buildx envoie une demande de build au backend BuildKit. BuildKit résout les instructions de build et exécute les étapes de build. La sortie du build est soit renvoyée au client ou téléchargée vers un registre, tel que Docker Hub.
Buildx et BuildKit sont tous deux installés avec Docker Desktop et Docker Engine
prêts à l'emploi. Lorsque vous invoquez la commande docker build
, vous utilisez Buildx
pour exécuter un build en utilisant le BuildKit par défaut fourni avec Docker.
Buildx
Buildx est l'outil CLI que vous utilisez pour exécuter les builds. La commande docker build
est un wrapper autour de Buildx. Lorsque vous invoquez docker build
, Buildx interprète
les options de build et envoie une demande de build au backend BuildKit.
Le client Buildx peut faire plus que simplement exécuter des builds. Vous pouvez également utiliser Buildx pour créer et gérer les backends BuildKit, appelés constructeurs. Il prend également en charge des fonctionnalités pour gérer les images dans les registres, et pour exécuter plusieurs builds simultanément.
Docker Buildx est installé par défaut avec Docker Desktop. Vous pouvez également construire le plugin CLI à partir du code source, ou récupérer un binaire depuis le dépôt GitHub et l'installer manuellement. Voir Buildx README sur GitHub pour plus d'informations.
NoteBien que
docker build
invoque Buildx sous le capot, il y a des différences subtiles entre cette commande et la commande canoniquedocker buildx build
. Pour plus de détails, voir Différence entredocker build
etdocker buildx build
.
BuildKit
BuildKit est le processus démon qui exécute les charges de travail de build.
Une exécution de build commence par l'invocation d'une commande docker build
.
Buildx interprète votre commande de build et envoie une demande de build au
backend BuildKit. La demande de build inclut :
- Le Dockerfile
- Les arguments de build
- Les options d'export
- Les options de mise en cache
BuildKit résout les instructions de build et exécute les étapes de build. Pendant que BuildKit exécute le build, Buildx surveille le statut du build et affiche le progrès dans le terminal.
Si le build nécessite des ressources du client, telles que des fichiers locaux ou des secrets de build, BuildKit demande les ressources dont il a besoin à Buildx.
C'est une façon dont BuildKit est plus efficace comparé au constructeur legacy utilisé dans les versions antérieures de Docker. BuildKit ne demande que les ressources dont le build a besoin quand elles sont nécessaires. Le constructeur legacy, en comparaison, prend toujours une copie du système de fichiers local.
Exemples de ressources que BuildKit peut demander à Buildx incluent :
- Contextes de build du système de fichiers local
- Secrets de build
- Sockets SSH
- Jetons d'authentification de registre
Pour plus d'informations sur BuildKit, voir BuildKit.