当前位置: 首页 > news >正文

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. 官方文档

    • HCL 语法规范

    • Buildx Bake 参考

相关文章:

  • 组件通信-$refs、$parent
  • Linux-06-磁盘分区类命令
  • 高等数学-第七版-下册 选做记录 习题10-1
  • 邹晓辉教授十余年前关于围棋程序与融智学的思考,体现了对复杂系统本质的深刻洞察,其观点在人工智能发展历程中具有前瞻性意义。我们可以从以下三个维度进行深入解析:
  • 前端面试每日三题 - Day 22
  • 英伟达黄仁勋推荐的深度学习教程
  • aab转apk
  • 【Linux系统】进程间信号(捕捉信号)
  • 6.11.各顶点间的最短路径问题-Floyd算法
  • Redis基本使用
  • Git 基本操作(二)
  • AimRT从入门到精通 - 01实现一个helloworld
  • FHQ Treap
  • AI作画提示词:Prompts工程技巧与最佳实践
  • MYSQL-设计表
  • 消息队列的作用
  • [Verilog]跨时钟域数据传输解决方案
  • 2025五一数学建模竞赛A题完整分析论文(共45页)(含模型、可运行代码、数据)
  • spring中的@PostConstruct注解详解
  • 支持向量机(SVM)详解
  • 昆明市委:今年起连续三年,每年在全市集中开展警示教育
  • 法国参议院调查委员会公布雀巢“巴黎水”丑闻调查报告
  • “南昌航空一号”成功发射,赣江鄱阳湖有了专属卫星守护
  • 柬埔寨果农:期待柬埔寨榴莲走进中国市场
  • 首次带人形机器人走科技节红毯,傅利叶顾捷:机器人行业没包袱,很多事都能从零开始
  • 悬疑剧背后的女编剧:创作的差异不在性别,而在经验