Qu'est-ce que le BuildKit de Docker et pourquoi est-ce important ?  – CloudSavvy IT
Agence web » Actualités du digital » Qu’est-ce que le BuildKit de Docker et pourquoi est-ce important ? –

Qu’est-ce que le BuildKit de Docker et pourquoi est-ce important ? –

Docker BuildKit est un moteur de création d’images opt-in qui offre des améliorations substantielles par rapport au processus traditionnel. BuildKit crée des couches d’images en parallèle, accélérant le processus de construction global.

Qu’est-ce que BuildKit ?

BuildKit a été développé dans le cadre du projet Moby, un effort de Docker pour « assembler des systèmes de conteneurs spécialisés sans réinventer la roue ». Il a été annoncé en 2017 et a commencé à être livré avec Docker Engine dans la version 18.09 de 2018.

BuildKit se concentre sur l’amélioration des performances de construction, la gestion du stockage et l’extensibilité. Ses principales affirmations sont le traitement parallèle, la mise en cache plus avancée, une architecture enfichable et la récupération automatique de la mémoire. Ceux-ci se combinent en un système de construction plus efficace et plus extensible que le moteur d’origine.

Des couches qui n’ont pas d’impact les unes sur les autres peuvent être construites simultanément, réduisant ainsi les temps d’attente pour la fin des étapes. BuildKit optimise également l’accès aux fichiers locaux avec lesquels vous référencez COPY instructions. Il suit les modifications que vous apportez et copie uniquement les fichiers qui ont été modifiés depuis la dernière génération, au lieu de transférer l’intégralité du contexte de génération.

BuildKit simplifie également les builds multi-plateformes. Vous pouvez fournir le --platform flag pour spécifier les cibles pour lesquelles construire. BuildKit assemblera automatiquement un manifeste d’image approprié pour couvrir toutes les architectures spécifiées.

docker buildx --create --platform linux/amd64,linux/arm64 .

Comment fonctionne BuildKit ?

Les améliorations de performances de BuildKit sont facilitées par l’utilisation d’un format de définition de construction de bas niveau, appelé LLB. Il s’agit d’un format binaire basé sur un graphique qui relie des définitions de build complexes.

Comme les couches sont directement liées, BuildKit facilite une comparaison plus rapide des graphiques de construction et du contenu qu’ils incluent. Le constructeur Dockerfile par défaut doit s’appuyer sur des heuristiques imprécises pour déterminer si deux images sont comparables.

Le LLB est complètement séparé du « frontend » de BuildKit. L’interface prend une représentation lisible par l’homme d’une image, telle qu’un Dockerfile, et le convertit en un graphique LLB. Une fois qu’une LLB a été générée, elle peut être exportée et déplacée entre les environnements. L’exportation vers un registre permet aux clients frontaux d’acquérir une LLB existante pour améliorer encore les performances de la première génération.

Les détails techniques du LLB sont assez complexes. La technologie sous-jacente est basée sur la théorie des graphes et la comparaison des sommes de contrôle. Vous n’avez pas besoin de le comprendre pour profiter de sa puissance : en tant qu’utilisateur final, construit le travail de la même manière que jamais, avec le docker build commander.

BuildKit crée toujours des images compatibles OCI qui sont portables dans différents environnements de conteneurs. Vous pouvez utiliser BuildKit pour créer n’importe quelle image Docker avec une base Linux. Les images Windows ne sont actuellement pas prises en charge.

Activation de la prise en charge de BuildKit

Il existe deux façons d’activer BuildKit. Si vous souhaitez créer une seule image avec la fonctionnalité, définissez le DOCKER_BUILDKIT variable d’environnement dans votre shell :

DOCKER_BUILDKIT=1 docker build .

Pour une utilisation à long terme, configurez le démon Docker pour utiliser BuildKit par défaut. Créer ou modifier le /etc/docker/daemon.json et ajoutez le contenu suivant à l’objet de configuration de niveau supérieur :

{
    "features": {
        "buildkit": true
    }
}

Rechargez la configuration du démon pour appliquer la modification :

systemctl reload docker

BuildKit sera désormais utilisé à la place du moteur de génération par défaut lorsque vous exécutez le docker build commander.

Vous pouvez savoir quand BuildKit est actif car il produit une sortie CLI différente pour le moteur normal. L’affichage de la progression de BuildKit offre une lisibilité améliorée et une visualisation claire du début et de la fin de chaque étape. Les informations comprennent une ventilation du temps nécessaire pour construire chaque couche.

« docker buildx »

Vous pouvez également interagir avec BuildKit via docker buildx commandes. Ceux-ci utiliseront toujours BuildKit. le dockerx Le groupe de commandes expose les fonctionnalités avancées de BuildKit, y compris la possibilité de construire sur un hôte distant.

Un seul client BuildKit peut interagir avec plusieurs instances de générateur d’images distinctes. Cela facilite les builds multi-plateformes en vous permettant d’ajouter un générateur pour chaque architecture que vous ciblez.

Voici un exemple d’ajout d’un hôte distant en tant que cible BuildKit. Cela suppose que la machine cible dispose d’un socket Docker exposé sur le port TCP 2375. Vous pouvez référencer l’hôte à l’aide de n’importe quel identifiant de point de terminaison Docker ou du nom d’un contexte Docker (obtenu à partir de docker context ls). Ce dernier vous permet de vous appuyer sur des environnements cloud compatibles en les ajoutant en tant que contexte.

docker buildx create --name remote-builder tcp://my-docker-host:2375

Vous pouvez sélectionner le générateur à utiliser avec le docker buildx use commander:

docker buildx use remote-builder

Ensuite, vous pouvez utiliser le build pour construire votre image sur l’instance de générateur sélectionnée :

docker buildx build .

Vous pouvez supprimer des instances de générateur en utilisant docker buildx rm, en passant le nom du constructeur. Les constructeurs sont répertoriés en utilisant docker buildx ls; vous pouvez utiliser docker buildx inspect pour obtenir des informations plus détaillées sur un constructeur spécifique.

Si vous souhaitez vérifier l’utilisation du disque de BuildKit, exécutez le docker buildx du commander. Vous pouvez vider le cache de build pour libérer de l’espace de stockage avec docker buildx prune. Cela peut réduire les performances la prochaine fois que vous reconstruisez votre image, car les couches précédemment mises en cache seront reconstruites.

Construire des fonctionnalités

BuildKit ajoute quelques fonctionnalités supplémentaires de temps de construction pour simplifier votre Dockerfile pas.

Vous pouvez transmettre des données secrètes en utilisant le --secret drapeau. Cela permet à votre Dockerfile accéder à des valeurs sensibles sans les stocker dans l’image. Les valeurs seul disponible au moment de la construction.

docker build --secret id=demo-secret,src=demo-secret.txt .
FROM my-image:latest
RUN --mount=type=secret,id=demo-secret cat /run/secrets/demo-secrets

Cette Dockerfile fait référence à un secret appelé demo-secret. Sa valeur est lue à partir du demo-secret.txt fichier lorsque vous exécutez docker build. le RUN instruction avec le --mount flag donne accès au secret. Le fichier est temporairement monté dans le /run/secrets annuaire.

BuildKit vous permet également de transférer l’agent SSH de votre hôte afin que vos instructions de construction puissent interagir avec les connexions distantes existantes. Passe le --ssh drapeau à docker build et ajouter --mount=type=ssh à RUN instructions dans votre Dockerfile:

docker build --ssh .
RUN --mount=type=ssh git clone git@example.com:/project.git

Ces fonctionnalités rendent la création d’images plus pratique sans affecter la sécurité globale. Le transfert d’agent SSH et les montages secrets ne sont disponibles que dans BuildKit ; il n’y a pas d’équivalent dans le moteur de construction par défaut.

Conclusion

BuildKit est le générateur d’images Docker de nouvelle génération qui utilise un format binaire graphique pour accélérer considérablement les builds. Bien que les performances varient considérablement pour chaque Dockerfile, vous pouvez vous attendre à des accélérations substantielles dans les cas où le traitement parallèle des couches d’image est possible.

L’architecture de BuildKit optimise certains des plus récents Dockerfile fonctionnalités. Les builds multi-étapes bénéficient du saut des étapes inutilisées, ce qui rend le processus plus efficace que le générateur standard.

Bien que BuildKit soit désormais stable, Docker ne l’est toujours pas par défaut. Assurez-vous de l’activer dans votre client Docker si vous souhaitez utiliser ses fonctionnalités. Il y a une proposition active pour faire de BuildKit le moteur de construction standard mais il y a encore des problèmes non résolus empêchant le changement.

★★★★★