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

Pilote de conteneur Docker

Le pilote de conteneur Docker permet la création d'un environnement BuildKit géré et personnalisable dans un conteneur Docker dédié.

L'utilisation du pilote de conteneur Docker présente quelques avantages par rapport au pilote Docker par défaut. Par exemple :

Synopsis

Exécutez la commande suivante pour créer un nouveau builder, nommé container, qui utilise le pilote de conteneur Docker :

$ docker buildx create \
  --name container \
  --driver=docker-container \
  --driver-opt=[key=value,...]
container

Le tableau suivant décrit les options spécifiques au pilote disponibles que vous pouvez passer à --driver-opt :

Paramètre Type Par défaut Description
image Chaîne Définit l'image BuildKit à utiliser pour le conteneur.
memory Chaîne Définit la quantité de mémoire que le conteneur peut utiliser.
memory-swap Chaîne Définit la limite de swap de mémoire pour le conteneur.
cpu-quota Chaîne Impose un quota CPU CFS au conteneur.
cpu-period Chaîne Définit la période du planificateur CPU CFS pour le conteneur.
cpu-shares Chaîne Configure les parts de CPU (poids relatif) du conteneur.
cpuset-cpus Chaîne Limite l'ensemble des cœurs de processeur que le conteneur peut utiliser.
cpuset-mems Chaîne Limite l'ensemble des nœuds de mémoire CPU que le conteneur peut utiliser.
default-load Booléen false Charge automatiquement les images dans le magasin d'images de Docker Engine.
network Chaîne Définit le mode réseau pour le conteneur.
cgroup-parent Chaîne /docker/buildx Définit le parent cgroup du conteneur si Docker utilise le pilote "cgroupfs".
restart-policy Chaîne unless-stopped Définit la politique de redémarrage du conteneur.
env.<key> Chaîne Définit la variable d'environnement key sur la value spécifiée dans le conteneur.

Avant de configurer les limites de ressources pour le conteneur, lisez configurer les contraintes de ressources d'exécution pour les conteneurs.

Utilisation

Lorsque vous exécutez une construction, Buildx tire l'image image spécifiée (par défaut, moby/buildkit). Lorsque le conteneur a démarré, Buildx soumet la construction au serveur de construction conteneurisé.

$ docker buildx build -t <image> --builder=container .
WARNING: No output specified with docker-container driver. Build result will only remain in the build cache. To push result image into registry use --push or to load image into docker use --load
#1 [internal] booting buildkit
#1 pulling image moby/buildkit:buildx-stable-1
#1 pulling image moby/buildkit:buildx-stable-1 1.9s done
#1 creating container buildx_buildkit_container0
#1 creating container buildx_buildkit_container0 0.5s done
#1 DONE 2.4s
...

Persistance du cache

Le pilote docker-container prend en charge la persistance du cache, car il stocke tout l'état de BuildKit et le cache associé dans un volume Docker dédié.

Pour conserver le cache du pilote docker-container, même après avoir recréé le pilote à l'aide de docker buildx rm et docker buildx create, vous pouvez détruire le builder en utilisant l'indicateur --keep-state :

Par exemple, pour créer un builder nommé container puis le supprimer tout en conservant l'état :

# configurer un builder
$ docker buildx create --name=container --driver=docker-container --use --bootstrap
container
$ docker buildx ls
NAME/NODE       DRIVER/ENDPOINT              STATUS   BUILDKIT PLATFORMS
container *     docker-container
  container0    desktop-linux                running  v0.10.5  linux/amd64
$ docker volume ls
DRIVER    VOLUME NAME
local     buildx_buildkit_container0_state

# supprimer le builder tout en conservant l'état
$ docker buildx rm --keep-state container
$ docker volume ls
DRIVER    VOLUME NAME
local     buildx_buildkit_container0_state

# le pilote nouvellement créé avec le même nom aura tout l'état du précédent !
$ docker buildx create --name=container --driver=docker-container --use --bootstrap
container

QEMU

Le pilote docker-container prend en charge l'utilisation de QEMU (mode utilisateur) pour construire des plateformes non natives. Utilisez l'indicateur --platform pour spécifier les architectures pour lesquelles vous souhaitez construire.

Par exemple, pour construire une image Linux pour amd64 et arm64 :

$ docker buildx build \
  --builder=container \
  --platform=linux/amd64,linux/arm64 \
  -t <registry>/<image> \
  --push .
Note

L'émulation avec QEMU peut être beaucoup plus lente que les constructions natives, en particulier pour les tâches gourmandes en calcul comme la compilation et la compression ou la décompression.

Réseau personnalisé

Vous pouvez personnaliser le réseau que le conteneur du builder utilise. C'est utile si vous devez utiliser un réseau spécifique pour vos constructions.

Par exemple, créons un réseau nommé foonet :

$ docker network create foonet

Créez maintenant un builder docker-container qui utilisera ce réseau :

$ docker buildx create --use \
  --name mybuilder \
  --driver docker-container \
  --driver-opt "network=foonet"

Démarrez et inspectez mybuilder:

$ docker buildx inspect --bootstrap

Inspectez le conteneur du builder et voyez quel réseau est utilisé :

$ docker inspect buildx_buildkit_mybuilder0 --format={{.NetworkSettings.Networks}}
map[foonet:0xc00018c0c0]

Lectures complémentaires

Pour plus d'informations sur le pilote de conteneur Docker, consultez la référence buildx.