Docker Composeの設定ファイルcompose.yamlで、よく使う項目や書き方をまとめています。
サービス、ポート、環境変数、ボリューム、依存関係、ネットワークなどをすぐに確認できます。
現在はcompose.yamlが推奨されているファイル名です。
従来のdocker-compose.ymlやdocker-compose.yamlも利用できます。
また、現在のDocker Composeではdocker composeコマンドを使用します。
従来はdocker-composeコマンドが使われていました。
Docker Composeの操作コマンドを確認したい場合はDocker Compose コマンド チートシート、 Dockerfileの書き方を確認したい場合はDockerfile チートシートを参照してください。
※<名前>や<値>は、実際の値に置き換えて使用してください。
よく使う基本形
services:
app:
build: .
ports:
- "3000:3000"
environment:
NODE_ENV: production
volumes:
- ./src:/app/src
db:
image: postgres
environment:
POSTGRES_PASSWORD: password
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
アプリケーションとデータベースを定義するシンプルな例です。 実際の構成に合わせてサービスや設定を追加・変更します。
※サンプルでは説明を簡略化しています。実運用ではパスワードなどの秘密情報をcompose.yamlへ直接記載しないでください。
サービスを定義する
services:
Composeで管理するコンテナの構成をサービス単位で定義します。
<サービス名>:
servicesの下に任意のサービス名を定義します。
他のサービスからこの名前で参照できます。
イメージ・ビルド
image: <イメージ名>:<タグ>
Docker Hubなどのレジストリから使用するイメージを指定します。
build: .
現在のディレクトリをビルドコンテキストとしてDockerイメージをビルドします。
build:
context: .
dockerfile: Dockerfile
ビルドコンテキストや使用するDockerfileを個別に指定します。
build:
context: .
args:
<変数名>: <値>
DockerfileのARGへビルド時の値を渡します。
ポート
ports:
- "<ホスト側ポート>:<コンテナ側ポート>"
ホスト側のポートとコンテナ側のポートを対応付けます。
ports:
- "3000:3000"
ホストの3000番ポートへのアクセスを、コンテナの3000番ポートへ転送します。
expose:
- "3000"
ホストへ公開せず、コンテナ側で使用するポートを示します。
環境変数
environment:
<変数名>: <値>
コンテナへ環境変数を渡します。
environment:
NODE_ENV: production
PORT: 3000
複数の環境変数をキーと値の形式で設定します。
env_file:
- .env
指定したファイルからコンテナへ渡す環境変数を読み込みます。
environment:
VARIABLE_NAME: "${VARIABLE_NAME}"
Compose実行時の環境変数や.envの値を展開して、
コンテナの環境変数に設定します。
VARIABLE_NAMEは実際の環境変数名に置き換えて使用します。例:PORT: ${PORT}
ボリューム
volumes:
- <ホスト側パス>:<コンテナ内パス>
ホスト側のファイルやディレクトリをコンテナ内へマウントします。
volumes:
- <ボリューム名>:<コンテナ内パス>
Dockerで管理する名前付きボリュームをコンテナへマウントします。
volumes:
<ボリューム名>:
compose.yamlのトップレベルで、サービスから使用する名前付きボリュームを定義します。
volumes:
- <ホスト側パス>:<コンテナ内パス>:ro
マウントしたファイルやディレクトリをコンテナ側から変更できないようにします。
サービス間の依存関係
depends_on:
- <サービス名>
指定したサービスとの依存関係を定義します。
depends_on:
<サービス名>:
condition: service_healthy
依存するサービスのhealthcheckが正常になるまで待ってから起動します。
ヘルスチェック
healthcheck:
test: ["CMD", "<コマンド>"]
interval: 30s
timeout: 10s
retries: 3
コンテナ内のサービスが正常に動作しているか定期的に確認します。
depends_onのcondition: service_healthyと組み合わせて使用できます。
再起動
restart: unless-stopped
ユーザーが明示的に停止した場合を除き、コンテナを自動的に再起動します。
コマンド・作業ディレクトリ
command: <コマンド>
DockerfileのCMDなどで指定されたデフォルトコマンドを上書きします。
entrypoint: <コマンド>
イメージに設定されているENTRYPOINTを変更します。
working_dir: <コンテナ内パス>
コンテナ内でコマンドを実行するときの作業ディレクトリを指定します。
user: <ユーザー名>
コンテナ内のプロセスを実行するユーザーを指定します。
ネットワーク
networks:
- <ネットワーク名>
指定したComposeネットワークへサービスを接続します。
networks:
<ネットワーク名>:
compose.yamlのトップレベルでカスタムネットワークを定義します。
サービス同士を接続する
同じComposeネットワーク上では、通常はIPアドレスではなく サービス名をホスト名として使用できます。
services:
app:
environment:
DATABASE_HOST: db
db:
image: postgres
この例では、appからデータベースへ接続するときのホスト名として
dbを使用できます。
よく使うcompose.yaml例
services:
app:
build: .
ports:
- "3000:3000"
environment:
DATABASE_HOST: db
DATABASE_USER: app
DATABASE_PASSWORD: password
volumes:
- ./src:/app/src
depends_on:
db:
condition: service_healthy
db:
image: postgres
environment:
POSTGRES_USER: app
POSTGRES_PASSWORD: password
POSTGRES_DB: app
volumes:
- db-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U app"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
volumes:
db-data:
アプリケーションとPostgreSQLを組み合わせた構成例です。
アプリケーションからデータベースへは、サービス名のdbをホスト名として接続します。
設定を確認する
docker compose config
環境変数などを展開したあと、Docker Composeが実際に使用する設定を表示します。
docker compose config -q
設定内容を表示せず、Compose設定を検証します。




