【Docker】docker-compose.ymlの書き方
docker-compose.yml(Composeファイル)って、結局何を書いているのか?について調べてみました。
今回作成したComposeファイルは以下。
version: "3.9" services: app: build: ./infra/php volumes: - ./src:/data web: image: nginx:1.20-alpine ports: - 8080:80 volumes: - ./src:/data - ./infra/nginx/default.conf:/etc/nginx/conf.d/default.conf working_dir: /data db: build: ./infra/mysql volumes: - db-store:/var/lib/mysql volumes: db-store:
参考:最強のLaravel開発環境をDockerを使って構築する - Qiita
version
- Composeファイル形式のバージョン
- 必須項目
最新のバージョンを指定するべし。最新バージョンは以下で確認する。 Compose ファイルのバージョンとアップグレード — Docker-docs-ja 20.10 ドキュメント
バージョンによって、Composeファイルの書き方が変わるらしい
services
- サービス設定
- サービス名、というのは、作成する各コンテナの総称にあたるもの(コンテナ名ではない)。
- Dockerイメージをどう動かすのか、を定義するのがここ。
Dockerにおけるサービスとは
アプリケーション全体における、各機能(例. データ保存、フロントの動き、バックエンドでの処理など)を指すもの。 Part 3:サービス — Docker-docs-ja 17.06 ドキュメント
書いていること
services: app: #services:の一つ下のインデントレベルに、各サービス名を記載 build: ./infra/php #ComposeFileを実行し、ビルドされるときのパス(プロジェクトで使用するディレクトリ?) volumes: - ./src:/data # サービスコンテナがアクセスするボリューム。
docker-compose.ymlの書き方について解説してみた - Qiita
https://docs.docker.jp/compose/compose-file/index.html#volumes
メモ
Composeファイルはインデントが重要である、といろんな記事で目にしますが、 インデントによってサービスごとの設定なのか、複数のコンテナに渡っての設定なのかが変わってくるからなのですね。