
(轉自Wiki)
YAML是"YAML Ain't a Markup Language"(YAML不是一種標記語言)的遞迴縮寫。
在開發的這種語言時,YAML的意思其實是:"Yet Another Markup Language"(仍是一種標記語言),但為了強調這種語言以資料為中心,而不是以標記語言為重點,而用反向縮略語重新命名。
所以到底是不是(頭好痛)
YAML 的基本特點
字串: 'This is an apple'
數字: 42
布林值: true
空值: null
version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    restart: always
水果:
  - 蘋果
  - 香蕉
  - 橘子
services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
      - ./mysql-init-files:/docker-entrypoint-initdb.d
使用者:
  名字: 小明
  年齡: 25
  興趣:
    - 閱讀 # 這裡是list
    - 游泳 # 這裡是list
services:
  web:
    environment:
      NODE_ENV: production
      DB_HOST: db
      DB_PORT: 3306
錨點和別名用於重複使用相同的資料,甚可以類似function一樣,先寫好,後面重複使用。
優點
& 符號定義,用來標記一個值或一組值。* 符號引用,用來重複使用已經定義的錨點。# 定義錨點
基本設定: &基本
  版本: 1.0
  語言: 繁體中文
# 使用別名
使用者設定:
  <<: *基本  # 合併基本設定
  使用者名稱: 小明
x-base-service: &base-service #定義名為 base-service 的錨點
  restart: always
  logging:
    driver: json-file
    options:
      max-size: "10m"
      max-file: "5"
services:
  web:
    <<: *base-service #使用名為 base-service 的錨點
    image: nginx:latest
    ports:
      - "80:80"
  api:
    <<: *base-service #使用名為 base-service 的錨點
    image: node:14
    command: npm start
部分覆蓋:
開發環境: &開發
  資料庫: MySQL
  快取: Redis
  除錯模式: 開啟
測試環境:
  <<: *開發  # 繼承開發環境設定
  除錯模式: 關閉  # 覆蓋特定設定
x-app-volume: &app-volume
  type: volume
  source: myapp
  target: /app
services:
  web:
    image: nginx:latest
    volumes:
      - <<: *app-volume
        read_only: true
  
  api:
    image: node:14
    volumes:
      - <<: *app-volume
        read_only: false
多重繼承:
資料庫設定: &資料庫
  類型: PostgreSQL
  端口: 5432
日誌設定: &日誌
  級別: 資訊
  格式: JSON
應用程式:
  <<: [*資料庫, *日誌]  # 合併多個設定
  名稱: 我的應用
x-logging: &logging
  logging:
    driver: json-file
    options:
      max-size: "10m"
x-healthcheck: &healthcheck
  healthcheck:
    test: ["CMD", "curl", "-f", "http://localhost"]
    interval: 1m30s
    timeout: 10s
    retries: 3
services:
  web:
    <<: [*logging, *healthcheck]
    image: nginx:latest
YAML 提供了幾種處理多行字串的方式,每種方式對換行的處理都不同:
使用 | 可以保留文字塊中的換行:
描述: |
  這是一個
  多行字串。
  每一行都會保留。
services:
  app:
    image: myapp:latest
    command: |
      echo 'Starting application...'
      npm install
      npm start
這會保留每一行的換行。
使用 > 可以將換行轉換為空格:
摘要: >
  這也是一個多行字串。
  但是換行會被轉換為空格。
  除非有空行分隔。
services:
  app:
    image: myapp:latest
    environment: >
      NODE_ENV=production
      DB_HOST=db
      DB_PORT=3306
這會將多行合併為一行,換行符會被轉換為空格。
使用 |- 可以保留換行,但去除末尾的換行:
services:
  app:
    image: myapp:latest
    command: |-
      echo 'Starting application...'
      npm install
      npm start
這會保留換行,但不包括最後一行之後的換行。
YAML 通常被視為 JSON 的超集,提供更多功能和更好的可讀性。