HCL(HashiCorp Configuration Language)是一种结构化配置语言

HCL(HashiCorp Configuration Language)是一种结构化配置语言,语法简洁且可读性强,广泛用于 Docker Buildx BakeTerraformNomad 等工具的配置。以下是其核心语法规则和示例:


1. 基础结构

HCL 使用 块(Block) 和 属性(Attribute) 定义配置:

<BLOCK_TYPE> "<BLOCK_NAME>" {
  <ATTRIBUTE> = <VALUE>
}
  • :用大括号 {} 包裹,表示一个配置对象(如 targetvariable)。

  • 属性:键值对,用 = 赋值。

示例:
target "app" {
  dockerfile = "Dockerfile"
  platforms = ["linux/amd64"]
}

2. 常见数据类型

类型示例
字符串"hello" 或 hello(无空格时可省略引号)
数字423.14
布尔值truefalse
列表["a", "b"]
键值对映射{ key = "value" }
示例:
variables {
  image_name = "myapp"    # 字符串
  count      = 3         # 数字
  enabled    = true      # 布尔值
  ports      = [80, 443] # 列表
  labels = {             # 映射
    author = "Alice"
    env    = "prod"
  }
}

3. 注释

支持单行注释 # 和多行注释 /* */

# 这是单行注释
target "app" {
  /* 这是多行注释
     可以跨行 */
  dockerfile = "Dockerfile"
}

4. 变量与表达式

  • 变量:通过 variable 块定义,通过 var. 引用。

  • 表达式:支持数学运算、函数调用等。

示例:
variable "platform" {
  default = "linux/amd64" # 默认值
}

target "app" {
  platforms = [var.platform]          # 引用变量
  tags     = ["app:${var.platform}"] # 字符串插值
}

5. 依赖与动态配置

  • 依赖块:如 depends_on 定义构建顺序。

  • 动态块:用 dynamic 生成重复配置。

示例:
target "backend" {
  depends_on = ["db"] # 先构建 db,再构建 backend
}

dynamic "tag" {
  for_each = ["v1", "latest"]
  content {
    name = "app:${tag.value}"
  }
}

6. Buildx Bake 专用语法

在 Docker Buildx Bake 中,常见块包括:

  • group:定义构建组。

  • target:定义构建目标(镜像)。

  • variable:声明变量。

完整示例:
variable "arch" {
  default = "amd64"
}

group "default" {
  targets = ["app", "db"]
}

target "app" {
  dockerfile = "Dockerfile.app"
  platforms = ["linux/${var.arch}"]
  tags      = ["myapp:latest"]
}

target "db" {
  dockerfile = "Dockerfile.db"
  platforms = ["linux/arm64"]
}

7. 与 JSON 的关系

HCL 兼容 JSON,以下两种写法等价:

# HCL 风格
target "app" {
  platforms = ["linux/amd64"]
}
// JSON 风格
{
  "target": {
    "app": {
      "platforms": ["linux/amd64"]
    }
  }
}

学习建议

  1. 动手实践:修改 docker-bake.hcl 并运行 docker buildx bake 测试。

  2. 官方文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值