Docker Composeの設定の書き方
from Docker Compose
2022-12-03 時点
設定ファイル
docker-compose.yml が標準的な名前
YAML形式
公式の説明 https://docs.docker.com/compose/compose-file/
何はともあれバージョンを書く。(現在はオプションとのことだが書いた方がたぶん良い)
code:docker-compose.yml
version: "3.9"
使うサービスを書く。
code:docker-compose.yml
services:
web:
db:
各サービスの設定を書く。
これは、サービスごとに設定できる内容が異なるため、ちゃんと合わせる必要がある。
コンテナをどう用意するか
既存のイメージをそのまま使う場合
code:docker-compose.yml
services:
yourservice:
image: イメージ名
Dockerfile でビルドする場合
code:docker-compose.yml
services:
yourservice:
build: Dockerfileのあるパス
サービスごとにディレクトリを作るべき。
依存関係のサービスを書く。
code:docker-compose.yml
services:
web:
depends_on:
- db
db:
以下、必要であれば実施
実行する時の目的をプロファイルとして分ける。
例えば test, debug など。
どのサービスが特定のプロファイルの時に使われるのかを書く。
常に使われるサービスには profile を書く必要はない。
code:docker-compose.yml
services:
web:
db:
mydebugger:
profiles:
- debug
- test
mytester:
profiles:
- test
mytester は test プロファイルの時のみ動作する。
mydebugger は test と debug プロファイルの時のみ動作する。
使うリソースとその制限を書く
CPU
ブロックデバイス
使うボリュームを書く。
ボリュームをどこに置くか?
ローカルフォルダ(bind)
Docker Volume
short syntax より、長くても long syntax を使うべき
docker-compose の bind mount を1行で書くな https://zenn.dev/sarisia/articles/0c1db052d09921
short syntax ではディレクトリがない場合に作られてしまう。
ファイルのつもりがファイルがない時にはディレクトリが作られる。
short syntax
code:docker-compose.yml
mysvc:
volumes:
- ホスト側パス:コンテナ側パス
- ./data:/var/lib/postgresql/data
long syntax
code:docker-compose.yml
mysvc:
volumes:
- type: bind
source: ホスト側パス
target: コンテナ側パス
read_only: true を付けると読み出し専用になる。
ボリューム名を使うと、
使うネットワークを書く。
code:docker-compose.yml
networks:
使うポートを書く。
ポートの前にIPアドレスを書くことができる。これを使って、docker compose が複数立ち上がった時でも動かすことができる。
code:docker-compose.yml
${IP:-localhost}:5432:5432