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

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://.

https://github.com/dvdksn/buildx/blob/bake-remote-example/docker-bake.hcl
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é.

docker-bake.hcl
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 :