十分钟快速掌握 YML YAML 文件
YML(YAML)(YAML Ain’t Markup Language) 作为一种数据序列化格式,因其简洁、易读和强大的表达能力,被广泛应用于各种场景,如Docker Compose、Kubernetes、CI/CD工具(如GitLab CI)、Spring Boot配置等。
1. 什么是YML?
YML是YAML的缩写,是一种人类可读的数据序列化语言。它旨在以一种简洁、直观的方式表示数据结构,如列表、映射和标量值。YML文件通常以.yml
或.yaml
为扩展名。
核心特点:
- 简洁易读:使用缩进和冒号表示结构,避免了XML或JSON中的冗余符号。
- 支持多种数据类型:包括字符串、数字、布尔值、列表、映射等。
- 跨语言支持:大多数编程语言都有YML解析库。
2. 基本语法规则
YML的语法规则非常简单,但有几个关键点需要注意:
2.1 缩进
- YML使用缩进来表示层级关系,不能使用Tab键,必须使用空格。
- 同一级别的元素必须左对齐,缩进数量决定层级。
- 示例:
这里,person:name: Aliceage: 30hobbies:- reading- hiking
name
和age
缩进2个空格,hobbies
下的reading
和hiking
缩进4个空格。
2.2 键值对
- 使用冒号
:
分隔键和值,冒号后必须有一个空格。 - 示例:
key: value name: John Doe
2.3 注释
- 使用
#
添加单行注释。 - 示例:
# 这是一个注释 name: Alice # 这也是注释
3. 数据类型详解
3.1 标量(Scalar)
标量是最基本的数据类型,包括字符串、数字、布尔值等。
-
字符串:
- 可以不加引号,也可以使用单引号
'
或双引号"
。 - 双引号支持转义字符(如
\n
),单引号不支持。 - 示例:
string1: Hello World string2: 'Hello World' string3: "Hello\nWorld" # 换行
- 可以不加引号,也可以使用单引号
-
数字:
- 整数、浮点数、科学计数法。
- 示例:
integer: 42 float: 3.14 scientific: 1.23e4
-
布尔值:
- 使用
true
或false
。 - 示例:
active: true debug: false
- 使用
-
null:
- 表示空值,使用
null
或~
。 - 示例:
name: null age: ~
- 表示空值,使用
3.2 列表(Sequence)
列表是一组有序的值,使用短横线-
表示。
-
基本列表:
fruits:- apple- banana- orange
-
嵌套列表:
matrix:- - 1- 2- - 3- 4
-
内联列表(使用方括号):
colors: [red, green, blue]
3.3 映射(Mapping)
映射是键值对的集合,类似于JSON对象。
-
基本映射:
person:name: Aliceage: 30city: Beijing
-
内联映射(使用花括号):
person: {name: Alice, age: 30}
3.4 复合结构
YML支持复杂的嵌套结构。
-
列表中的映射:
users:- name: Aliceage: 30- name: Bobage: 25
-
映射中的列表:
company:name: Tech Corpemployees:- Alice- Bob
4. 高级特性
4.1 多行字符串
YML支持多行字符串,使用|
(保留换行)或>
(折叠换行)。
-
保留换行(
|
):description: |This is a multi-linestring that preservesline breaks.
-
折叠换行(
>
):summary: >This is a multi-linestring that will befolded into a single line.
4.2 引用与锚点
使用&
定义锚点,*
引用锚点,避免重复。
- 示例:
defaults: &defaultsport: 8080host: localhostservice1:<<: *defaultsname: Service Aservice2:<<: *defaultsname: Service Bport: 9090 # 覆盖默认端口
4.3 合并键(<<
)
用于合并映射,常与锚点结合使用。
5. 常见应用场景
5.1 Docker Compose
version: '3'
services:web:image: nginx:latestports:- "80:80"db:image: mysql:5.7environment:MYSQL_ROOT_PASSWORD: password
5.2 Kubernetes
apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: nginximage: nginx:1.14.2
5.3 Spring Boot配置
server:port: 8080
spring:datasource:url: jdbc:mysql://localhost:3306/mydbusername: rootpassword: password
6. 注意事项
- 缩进一致性:确保缩进正确,否则会导致解析错误。
- 冒号后空格:键和值之间必须有一个空格。
- 避免Tab:始终使用空格,不要用Tab。
- 大小写敏感:YML是大小写敏感的。