Définition de fichier Bake distant
Vous pouvez construire des fichiers Bake directement depuis un dépôt Git distant ou une URL HTTPS :
$ docker buildx bake "https://github.com/docker/cli.git#v20.10.11" --print
#1 [internal] load git source https://github.com/docker/cli.git#v20.10.11
#1 0.745 e8f1871b077b64bcb4a13334b7146492773769f7 refs/tags/v20.10.11
#1 2.022 From https://github.com/docker/cli
#1 2.022 * [new tag] v20.10.11 -> v20.10.11
#1 DONE 2.9s
Cela récupère la définition Bake depuis l'emplacement distant spécifié et
exécute les groupes ou les cibles définis dans ce fichier. Si la définition Bake
distante ne spécifie pas de contexte de build, le contexte est automatiquement défini sur
le dépôt Git distant. Par exemple, ce cas
utilise https://github.com/docker/cli.git
:
{
"group": {
"default": {
"targets": ["binary"]
}
},
"target": {
"binary": {
"context": "https://github.com/docker/cli.git#v20.10.11",
"dockerfile": "Dockerfile",
"args": {
"BASE_VARIANT": "alpine",
"GO_STRIP": "",
"VERSION": ""
},
"target": "binary",
"platforms": ["local"],
"output": ["build"]
}
}
}
Utiliser le contexte local avec une définition distante
Lors de la construction avec une définition Bake distante, vous pouvez vouloir consommer des fichiers locaux
relatifs au répertoire où la commande Bake est exécutée. Vous pouvez
définir des contextes comme étant relatifs au contexte de la commande en utilisant le préfixe cwd://
.
target "default" {
context = "cwd://"
dockerfile-inline = <<EOT
FROM alpine
WORKDIR /src
COPY . .
RUN ls -l && stop
EOT
}
$ touch foo bar
$ docker buildx bake "https://github.com/dvdksn/buildx.git#bake-remote-example"
...
> [4/4] RUN ls -l && stop:
#8 0.101 total 0
#8 0.102 -rw-r--r-- 1 root root 0 Jul 27 18:47 bar
#8 0.102 -rw-r--r-- 1 root root 0 Jul 27 18:47 foo
#8 0.102 /bin/sh: stop: not found
Vous pouvez ajouter un chemin au préfixe cwd://
si vous souhaitez utiliser un répertoire
local spécifique comme contexte. Notez que si vous spécifiez un chemin, il doit être
à l'intérieur du répertoire de travail où la commande est exécutée. Si vous utilisez un
chemin absolu, ou un chemin relatif menant à l'extérieur du répertoire de travail,
Bake lèvera une erreur.
Contextes nommés locaux
Vous pouvez également utiliser le préfixe cwd://
pour définir des répertoires locaux dans le contexte
d'exécution de Bake comme contextes nommés.
L'exemple suivant définit le contexte docs
comme ./src/docs/content
,
relatif au répertoire de travail courant où Bake est exécuté comme un contexte nommé.
target "default" {
contexts = {
docs = "cwd://src/docs/content"
}
dockerfile = "Dockerfile"
}
En revanche, si vous omettez le préfixe cwd://
, le chemin serait résolu
par rapport au contexte de build.
Spécifier la définition Bake à utiliser
Lors du chargement d'un fichier Bake depuis un dépôt Git distant, si le dépôt
contient plus d'un fichier Bake, vous pouvez spécifier quelle définition Bake utiliser
avec l'indicateur --file
ou -f
:
docker buildx bake -f bake.hcl "https://github.com/crazy-max/buildx.git#remote-with-local"
...
#4 [2/2] RUN echo "hello world"
#4 0.270 hello world
#4 DONE 0.3s
Combiner les définitions Bake locales et distantes
Vous pouvez également combiner des définitions distantes avec des locales en utilisant le préfixe cwd://
avec -f
.
Étant donné la définition Bake locale suivante dans le répertoire de travail courant :
# local.hcl
target "default" {
args = {
HELLO = "foo"
}
}
L'exemple suivant utilise -f
pour spécifier deux définitions Bake :
-f bake.hcl
: cette définition est chargée par rapport à l'URL Git.-f cwd://local.hcl
: cette définition est chargée par rapport au répertoire de travail courant où la commande Bake est exécutée.
docker buildx bake -f bake.hcl -f cwd://local.hcl "https://github.com/crazy-max/buildx.git#remote-with-local" --print
{
"target": {
"default": {
"context": "https://github.com/crazy-max/buildx.git#remote-with-local",
"dockerfile": "Dockerfile",
"args": {
"HELLO": "foo"
},
"target": "build",
"output": [
{
"type": "cacheonly"
}
]
}
}
}
Un cas où la combinaison de définitions Bake locales et distantes devient nécessaire est
lorsque vous construisez avec une définition Bake distante dans GitHub Actions et que vous voulez
utiliser la metadata-action pour
générer des tags, des annotations ou des labels. L'action de métadonnées génère un fichier Bake
disponible dans le contexte d'exécution Bake local du runner. Pour utiliser à la fois la
définition distante et le fichier Bake "metadata-only" local, spécifiez les deux fichiers
et utilisez le préfixe cwd://
pour le fichier Bake de métadonnées :
- name: Build
uses: docker/bake-action@v6
with:
files: |
./docker-bake.hcl
cwd://${{ steps.meta.outputs.bake-file }}
targets: build
Définition distante dans un dépôt privé
Si vous souhaitez utiliser une définition distante qui se trouve dans un dépôt privé, vous devrez peut-être spécifier des informations d'identification que Bake pourra utiliser lors de la récupération de la définition.
Si vous pouvez vous authentifier auprès du dépôt privé en utilisant le SSH_AUTH_SOCK
par défaut,
alors vous n'avez pas besoin de spécifier de paramètres d'authentification supplémentaires pour Bake.
Bake utilise automatiquement votre socket d'agent par défaut.
Pour l'authentification à l'aide d'un jeton HTTP ou d'agents SSH personnalisés, utilisez les variables d'environnement suivantes pour configurer la stratégie d'authentification de Bake :