【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

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ファイルはインデントが重要である、といろんな記事で目にしますが、 インデントによってサービスごとの設定なのか、複数のコンテナに渡っての設定なのかが変わってくるからなのですね。