インフラ作業支援ラボInfra Support Lab ← ガイド一覧← 戻る

Docker Composeの設定と確認手順|compose.yaml・config・upの使い方

Docker Composeの設定を新規作成・変更する際に、構文検証、環境変数、ポート公開、永続データ、変更後の確認を段階的に行うための作業ガイドです。基本操作の一覧ではなく、設定の品質と反映判断に重点を置きます。

この記事の目的

compose.yamlがどのコンテナ・ポート・ボリュームを管理するか確認し、構成と反映影響を分けて判断します。

最初にやること

docker context showとプロジェクトの作業ディレクトリを確認してから、docker compose config -qで検証します。

注意:up -dはコンテナを再作成する場合があります。downは単なる停止ではなく削除操作です。web01などのコンテナ名、Composeサービス名・ポートは例です。Docker context・ホスト・保存先を実環境で確認してください。

1. compose.yamlで指定するもの

Composeのservicesはサービスの実行定義、portsはホスト公開、volumesは永続データの保存先を扱います。environmentはコンテナに渡す設定値です。

services: web: image: nginx:stable-alpine ports: - "127.0.0.1:8080:80" restart: unless-stopped

例は検証用です。イメージのタグは必要に応じdigest固定を検討し、公開ポートは127.0.0.1に限定しています。本番ではセキュリティ要件・依存サービス・データ保存先を確認します。

バージョン差:Docker Engine 28.0.0より古いバージョンでは、localhostに公開したポートへ同一L2セグメントの別ホストから到達できる場合があります。127.0.0.1指定だけで完全に隔離されると判断せず、Engineのバージョン・ホストのネットワーク・Firewallを確認してください。Docker公式の注意事項を参照。

2. 適用前の検証コマンド

docker context show docker compose ls docker compose config --services docker compose config -q # 解決済み設定が表示されるため共有時は機密値に注意 docker compose config

config -qは設定の検証であり、サービスを起動しません。ただし構文が妥当でもアプリが起動できるとは限りません。未定義変数は警告のうえ空文字へ置換される場合があります。終了コードが0でも、警告の有無、展開後の設定値、対象プロジェクトを確認してください。必須の変数にはComposeの必須値構文を利用できます。configは環境変数が展開された内容を出すため、CIログやチケットでの秘匿値露出に注意。

3. .env・env_file・環境変数の違い

要素役割見落としやすい点
.envComposeファイルの変数補間等に利用される自動的に全変数がコンテナ環境へ渡るわけではない
env_fileサービスのコンテナ環境変数を渡すファイルの相対パス・参照元・機密性
environmentサービスに明示する環境変数値の優先順位や補間を確認
注意:パスワードなどの秘匿値をそのままリポジトリへコミットしないでください。docker compose configの出力も公開しないようにします。

補間時に必要な変数を強制する構文や、変数の優先順位はDocker公式の変数補間仕様を参照。docker compose configの展開結果は機密情報を含む場合があるため、そのまま公開しないでください。

4. up・start・stop・downの違い

コマンド主な作用影響
docker compose up -dサービス作成・起動、必要なら再作成再起動・構成変更の影響があり得る
docker compose start既存の停止済みコンテナを起動新しい設定を反映する方法ではない
docker compose stopコンテナの停止コンテナは通常保持される
docker compose downコンテナと対象ネットワークの削除匿名volumeの再利用等に注意
docker compose down -vさらに対象ボリュームを削除永続データ消失のおそれ
危険:down -vを業務サービスの停止手段として使わないでください。保存データ・復旧方法を確認する必要があります。

5. 変更証跡と切り戻し可否の事前監査

実行前に「対象・変更前・変更後・復旧可否」を同じ作業記録に残します。構成管理されたCompose定義や変数の管理元の版、使用イメージのdigest、サービス名、ポート、Volume、依存サービスを記録してください。環境変数の実値や展開済み設定には秘匿情報が含まれるため、チケットやログへ無加工で保存しません。

# 参照のみ:対象と現行状態 docker context show docker compose ls docker compose ps -a docker compose images docker compose config --services # 構文・補間を検証(警告と終了状態を別々に確認) docker compose config -q # 対応バージョンでのみ実施(変更予測であり動作保証ではない) docker compose --dry-run up -d
更新前の判断実施・復旧条件
旧イメージ・旧設定を再取得可能、永続データ互換性を確認済み承認済み手順で反映。障害時は管理元の旧定義と旧イメージ参照へ戻し、再作成後に業務疎通・ログ・データを再確認
DB移行・データ形式変更を伴う設定だけ戻しても復旧できない可能性。DB固有のバックアップと復元リハーサルが完了するまで更新を保留
旧イメージが取得不可、管理元の版・変数が不明切り戻し不能の可能性があるため変更を保留し、必要な成果物を確保
更新後にrunningだがヘルス・通信・業務処理が異常未完了と判定。ログと変更差分を保全し、復旧計画に従って対応

運用中サービスを再作成する前に、レジストリから旧イメージを確実に取得できるかも確認します。docker compose down -vは切り戻し手段ではありません。

6. 実行・確認の流れ

# 構成と対象を確認 docker compose config -q docker compose ps -a # 検証環境・承認済み変更のみ実行 docker compose up -d # 起動後の状態・ログを確認 docker compose ps -a docker compose logs --tail 100 curl -I http://127.0.0.1:8080/

構文検証成功とサービスの正常性は別です。状態・ログ・ヘルスチェック・クライアントからの実通信を確認します。

7. 想定と違うとき

状態確認するもの
変数が空・設定を読めないComposeの実行ディレクトリ、指定ファイル、変数補間
ポートがバインドできないホストのss -lnt、使用ポート、公開先
コンテナがすぐに終了Dockerコンテナ起動失敗の切り分け
ログが見えないDockerログドライバーと容量対策

切り戻しは前のComposeファイル・イメージ・変数・データ互換性を確保する作業です。downとupだけで元に戻るとは限りません。

関連する確認手順:Volumeのバックアップ・復元。

8. 設定検証の結果から次の作業を決める

構文検証の成功はアプリの起動成功を意味しません。以下はCompose V2系を想定した手順です。変更するプロジェクト・ファイル・公開範囲を先に確認してください。

docker compose version docker context show docker compose config -q docker compose config --services # 対応するComposeバージョンのみ docker compose --dry-run up -d
# 出力例(想定、実機実測ではありません) $ docker compose config -q $ echo $? 0
表示・結果読み方次の行動
config -q成功、通常は無出力Compose構成の検証を通過サービス名・公開ポート・Volume・反映影響を点検し、承認後に変更
services.web等の設定エラーキーやインデントなどが不正の可能性エラーの該当行を修正し再度config -q。失敗中はupを実行しない
変数未定義警告・想定外の補間.env・env_file・環境変数の管理元に不一致変数の設定元を確認。docker compose configは機密値を含むため共有しない
dry-runでRecreateと表示変更時にコンテナの入れ替えが起こる可能性停止許容時間、保持データ、アプリの接続中ユーザー、切り戻し手順を確認
構文は正常だが起動直後に停止アプリ設定や実行環境などの別の問題コンテナ起動失敗の切り分けへ進む
dry-runの限界:対応していないComposeバージョンでは実行できません。dry-runは変更の想定を表示する機能で、アプリ応答やVolumeのデータ互換性を保証しません。

9. 反映・切り戻し・完了確認

以下はこの記事の検証用nginxサービスを対象とした例です。作業前にイメージのタグ/digest、Compose定義、変数、Volume、業務影響、戻すべき旧構成を管理元に記録してください。

# 読み取り:変更前の状態 docker compose ps -a docker compose images docker compose config -q # 管理元で承認済みの変更時のみ実施 # docker compose up -d # 読み取り:反映後 docker compose ps -a docker compose logs --tail 50 web # localhostに8080番で公開した例だけを対象 curl -fI http://127.0.0.1:8080/
確認結果完了条件・次の行動
コンテナがrunningでHTTPも期待どおり応答nginxの検証例では成功候補。業務アプリならヘルスチェック・依存先・本来の業務機能まで確認
Exited/Restartingになった不合格。直前ログを保存し、起動失敗の原因調査へ進む
起動したが通信できない公開ポート、アプリ側のlisten、Proxy・Firewallを確認。up -d成功だけでは完了にしない
更新後に業務不具合保存した旧Compose定義・イメージ参照・変数へ管理元から戻す計画を判断。データ移行済みならDB・Volumeの互換性を別途確認
切り戻しの注意:Composeには汎用的な自動リビジョン復元はありません。down -vで元へ戻すことはできません。旧設定へ戻して再適用する際にもコンテナ置換・DB互換性・業務停止の影響があります。

公式・一次資料

関連手順を確認する

参照操作・変更操作・削除操作を区別し、作業前後に対象と正常性を記録します。

関連ガイドへ