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

Évaluation des expressions dans Bake

Les fichiers Bake au format HCL prennent en charge l'évaluation d'expressions, ce qui vous permet d'effectuer des opérations arithmétiques, de définir des valeurs de manière conditionnelle, et plus encore.

Opérations arithmétiques

Vous pouvez effectuer des opérations arithmétiques dans les expressions. L'exemple suivant montre comment multiplier deux nombres.

docker-bake.hcl
sum = 7*6

target "default" {
  args = {
    answer = sum
  }
}

L'impression du fichier Bake avec l'indicateur --print affiche la valeur évaluée pour l'argument de build answer.

$ docker buildx bake --print
{
  "target": {
    "default": {
      "context": ".",
      "dockerfile": "Dockerfile",
      "args": {
        "answer": "42"
      }
    }
  }
}

Opérateurs ternaires

Vous pouvez utiliser des opérateurs ternaires pour enregistrer une valeur de manière conditionnelle.

L'exemple suivant ajoute un tag uniquement lorsqu'une variable n'est pas vide, en utilisant la fonction intégrée notequal fonction.

docker-bake.hcl
variable "TAG" {}

target "default" {
  context="."
  dockerfile="Dockerfile"
  tags = [
    "my-image:latest",
    notequal("",TAG) ? "my-image:${TAG}": ""
  ]
}

Dans ce cas, TAG est une chaîne vide, donc la configuration de build résultante ne contient que le tag my-image:latest codé en dur.

$ docker buildx bake --print
{
  "target": {
    "default": {
      "context": ".",
      "dockerfile": "Dockerfile",
      "tags": ["my-image:latest"]
    }
  }
}

Expressions avec des variables

Vous pouvez utiliser des expressions avec des variables pour définir des valeurs de manière conditionnelle, ou pour effectuer des opérations arithmétiques.

L'exemple suivant utilise des expressions pour définir des valeurs en fonction de la valeur des variables. L'argument de build v1 est défini sur "higher" si la variable FOO est supérieure à 5, sinon il est défini sur "lower". L'argument de build v2 est défini sur "yes" si la variable IS_FOO est vraie, sinon il est défini sur "no".

docker-bake.hcl
variable "FOO" {
  default = 3
}

variable "IS_FOO" {
  default = true
}

target "app" {
  args = {
    v1 = FOO > 5 ? "higher" : "lower"
    v2 = IS_FOO ? "yes" : "no"
  }
}

L'impression du fichier Bake avec l'indicateur --print affiche les valeurs évaluées pour les arguments de build v1 et v2.

$ docker buildx bake --print app
{
  "group": {
    "default": {
      "targets": ["app"]
    }
  },
  "target": {
    "app": {
      "context": ".",
      "dockerfile": "Dockerfile",
      "args": {
        "v1": "lower",
        "v2": "yes"
      }
    }
  }
}