YAML(YAML Ain’t a Markup Language)是一种直观的、可读性强的数据序列化格式,常用于配置文件和数据交换。它使用缩进来表示层级关系,支持复杂的数据结构,如对象、数组和纯量等。
基本语法
- 大小写敏感:YAML 中的关键字是大小写敏感的。
- 缩进:使用空格进行缩进,通常是两个空格,不允许使用Tab键。
- 注释:以
#
开头的行表示注释。 - 键值对:使用冒号
:
表示键值对,冒号后通常跟一个空格。
数据类型
对象(Mapping)
对象是由键值对组成的集合,类似于其他语言中的字典或对象。
database:
host: localhost
port: 3306
数组(Sequence)
数组是一组有序的值,以 -
开头表示列表项。
fruits:
- Apple
- Banana
- Cherry
纯量(Scalar)
纯量是单个的、不可再分的值,包括字符串、布尔值、整数、浮点数、Null等。
name: John Doe
age: 30
is_student: false
实战案例
Docker Compose
Docker Compose 使用 YAML 文件来配置多容器 Docker 应用程序。以下是一个简单的 docker-compose.yml
文件示例,它定义了一个 Web 应用和数据库服务。
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
depends_on:
- db
db:
image: postgres
environment:
POSTGRES_DB: mydatabase
在这个例子中,我们定义了两个服务:web
和 db
。web
服务使用当前目录下的 Dockerfile 构建镜像,并映射端口 5000。它依赖于 db
服务,db
服务使用官方的 PostgreSQL 镜像,并设置了环境变量 POSTGRES_DB
。
Kubernetes 配置
Kubernetes 也广泛使用 YAML 文件来定义资源。以下是一个简单的 Pod 配置文件示例。
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mycontainer
image: nginx
ports:
- containerPort: 80
这个配置文件定义了一个名为 mypod
的 Pod,它包含一个使用 Nginx 镜像的容器,并暴露了容器的 80 端口。
引用与锚点
YAML 还支持锚点和别名,允许复用配置片段。
defaults: &defaults
adapter: postgres
host: localhost
development:
<<: *defaults
database: myapp_development
test:
<<: *defaults
database: myapp_test
在这个例子中,defaults
定义了一组默认设置,development
和 test
环境通过 <<: *defaults
合并了这些默认设置。
通过这些基本语法和实战案例,你可以开始使用 YAML 来编写配置文件和定义复杂的数据结构。YAML 的简洁性和可读性使其成为配置管理和数据交换的理想选择。