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

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 参考

http://www.xdnf.cn/news/3568.html

相关文章:

  • 13.多边形的三角剖分 (Triangulation) : Triangulation
  • 我的日记杂文
  • 中小企业MES系统详细设计
  • Rain World 雨世界 [DLC 解锁] [Steam Epic] [Windows SteamOS]
  • 新手SEO优化核心步骤
  • 《筑牢防线:全方位守护移动应用免受逆向侵扰》
  • 【JavaScript-Day 1】从零开始:全面了解 JavaScript 是什么、为什么学以及它与 Java 的区别
  • 【云盘】使用阿里云盘托管项目大文件
  • 销售总监求职简历模板
  • ACGRIME:用于全局优化和特征选择的自适应混沌高斯RIME优化器,附完整版免费代码
  • 65. Java 类和对象 - 创建和使用类与对象:摘要
  • [SoC]AXI总线Performance验证方案
  • 一天学完JDBC!!(万字总结)
  • 机器学习中的学习率及其衰减方法全面解析
  • 值此五一劳动节来临之际,
  • Java 入门:自定义标识符规则解析
  • ECMAScript 2(ES2):标准化的微调与巩固
  • STM32MP157开发板设置静态IP地址
  • stm32 HAI库 SPI(一)原理
  • spring-- 事务失效原因及多线程事务失效解决方案
  • spring中的@PostConstruct注解详解
  • 如何用Python绘制两个圆之间的8条公切线
  • 从原理到实战讲解回归算法!!!
  • FastAPI 与数据库交互示例
  • 集成Langfuse和Langchain:简化开发,增强自然语言理解能力
  • 解决“‘mvn‘ 不是内部或外部命令,也不是可运行的程序”错误
  • 5.2算法学习笔记(动态规划)
  • 书生实战营之沐曦专场
  • FHQ Treap
  • 蒙特卡罗方法(Monte Carlo Method)​​:基于随机采样的数值计算与模拟技术