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に変換する場合。