Docker Compose YAMLからJSONへの変換

Docker Compose YAMLファイルをJSONに変換、またはその逆の変換方法を学びます。サービス、ボリューム、ネットワークの実践的な例とともにdocker-compose.ymlの構造を解説します。

DevOps

詳細な説明

Docker Composeファイルはソフトウェア開発におけるYAMLの最も一般的な実用例の一つです。そのJSON等価物を理解することは、Docker APIの操作やプログラムによる設定生成に役立ちます。

典型的なdocker-compose.yml:

version: "3.8"

services:
  web:
    build: ./app
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
      - DATABASE_URL=postgres://db:5432/myapp
    depends_on:
      - db
      - redis
    volumes:
      - ./app:/usr/src/app
      - node_modules:/usr/src/app/node_modules

  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: myapp
      POSTGRES_PASSWORD: secret
    volumes:
      - pgdata:/var/lib/postgresql/data

  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"

volumes:
  pgdata:
  node_modules:

JSON等価物:

{
  "version": "3.8",
  "services": {
    "web": {
      "build": "./app",
      "ports": ["3000:3000"],
      "environment": [
        "NODE_ENV=production",
        "DATABASE_URL=postgres://db:5432/myapp"
      ],
      "depends_on": ["db", "redis"],
      "volumes": [
        "./app:/usr/src/app",
        "node_modules:/usr/src/app/node_modules"
      ]
    },
    "db": {
      "image": "postgres:16-alpine",
      "environment": {
        "POSTGRES_DB": "myapp",
        "POSTGRES_PASSWORD": "secret"
      },
      "volumes": ["pgdata:/var/lib/postgresql/data"]
    },
    "redis": {
      "image": "redis:7-alpine",
      "ports": ["6379:6379"]
    }
  },
  "volumes": {
    "pgdata": null,
    "node_modules": null
  }
}

変換時の注意点:

  • 環境変数は文字列の配列(- KEY=value)またはオブジェクト(KEY: value)のどちらでも可能。両方ともDocker Composeで有効です。
  • 空のボリューム定義(値なしの pgdata:)はJSONで null になります。
  • ポートマッピングはYAMLでクォートすべき("3000:3000")。コロンがネストされたキーとして解釈されるのを防ぎます。

ユースケース

JSONベースのテンプレートシステムやAPIからDocker Compose設定をプログラムで生成し、Docker CLIで使用するためにYAMLに変換する場合。

試してみる — JSON ↔ YAML Converter

フルツールを開く