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 :
- Spécifier les versions personnalisées de BuildKit à utiliser.
- Construire des images multi-architectures, voir QEMU
- Options avancées pour l' importation et l'exportation de cache
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 .
NoteL'é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.