Compartir comentarios
Las respuestas se generan en base a la documentación.

Evaluación de expresiones en Bake

Los archivos de Bake en formato HCL admiten la evaluación de expresiones, lo que te permite realizar operaciones aritméticas, establecer valores de forma condicional y más.

Operaciones aritméticas

Puedes realizar operaciones aritméticas en las expresiones. El siguiente ejemplo muestra cómo multiplicar dos números.

docker-bake.hcl
sum = 7*6

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

Imprimir el archivo de Bake con la bandera --print muestra el valor evaluado para el argumento de compilación answer.

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

Operadores ternarios

Puedes utilizar operadores ternarios para registrar un valor de forma condicional.

El siguiente ejemplo añade una etiqueta (tag) solo cuando una variable no está vacía, utilizando la función integrada notequal.

docker-bake.hcl
variable "TAG" {}

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

En este caso, TAG es una cadena vacía, por lo que la configuración de compilación resultante solo contiene la etiqueta fija my-image:latest.

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

Expresiones con variables

Puedes usar expresiones con variables para establecer valores de forma condicional o para realizar operaciones aritméticas.

El siguiente ejemplo utiliza expresiones para establecer valores basándose en el valor de las variables. El argumento de compilación v1 se establece en "higher" si la variable FOO es mayor que 5, de lo contrario se establece en "lower". El argumento de compilación v2 se establece en "yes" si la variable IS_FOO es verdadera (true), de lo contrario se establece en "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"
  }
}

Imprimir el archivo de Bake con la bandera --print muestra los valores evaluados para los argumentos de compilación v1 y v2.

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