Docker

Docker Composeで安全に環境別設定を共有する方法 – マイクロサービス実践ガイド

ⓘ本ページはプロモーションが含まれています

お得なお知らせ

スポンサードリンク
1ヶ月で資格+現場入り

インフラエンジニアへの最短ルート

未経験でもAWS・Linux・ネットワーク資格を最短で取り、現場入りまでサポート。SREやクラウドエンジニアの入口。

CODE×CODEスピード転職|無料面談▶ SRE/クラウドのフリーランス案件▶

▶ AWS/GCP/Kubernetesの独学には Kindle Unlimited の技術書読み放題がコスパ最強。


スポンサードリンク

1️⃣ Docker Compose の概要と基本構文

項目 内容
目的 複数コンテナを 1 つの YAML ファイルで定義し、docker compose up だけで一括起動・停止できる。
ファイル名 docker-compose.yml または拡張子が .yaml/.yml の任意の名前(例:compose.yaml)。
主要キー servicesnetworksvolumes などの トップレベルキー と、必要に応じて configssecrets
バージョン宣言 Compose Specification(2025 年版)では version: キーは省略可能。ただし古い Docker Engine と互換性を保ちたい場合は "3.9" などを書いてもよい。

公式情報: https://docs.docker.com/compose/

最小構成例

  • build:image: を同時に記述すると、docker compose up --build 時に自動でイメージがビルドされる。
  • ports:ホスト:コンテナ の形式で公開ポートを指定し、environment: ではキーとバリューのマッピングを書ける。

2️⃣ マイクロサービス構成例 ― カスタムネットワークと名前解決

Docker Compose が提供する DNS 機能により、同一ネットワーク内のコンテナは サービス名 をそのままホスト名として参照できる。これを利用した典型的な 4 コンテナ構成を示す。

  • depends_on: は起動順序のヒントであり、コンテナが完全に準備できたかはヘルスチェックで判断するのがベスト。
  • 各サービスは backend ブリッジネットワークに所属し、例えば app コンテナからは db:5432 と名前だけで PostgreSQL に接続できる。

3️⃣ 環境別設定と .env 管理

3.1 ファイル構成の例

3.2 ベースファイル

3.3 開発オーバーライド(docker-compose.override.yml

3.4 本番用ファイル(docker-compose.prod.yml

注意
deploy: キーは Docker Engine の単体モードでは無視され、Swarm クラスタや Kubernetes‑compatible runtime(例:Docker Desktop の Kubernetes オプション)でのみ適用できる。したがって本番環境でこの設定を利用する場合は、対象ランタイムが SwarmKubernetes のいずれかであることを事前に確認しておく。

3.5 .dockerignore による機密情報除外

3.6 起動コマンド例


4️⃣ ローカル開発での Ingress エミュレーション

Kubernetes の Ingress と同様の URL 構造をローカルでも再現したい場合、Nginx リバースプロキシ を使うと簡単に実装できる。

4.1 Nginx 設定例 (nginx/conf.d/default.conf)

4.2 Compose に Nginx サービス追加

ポイント
- depends_on起動順序 のヒントに過ぎない。実際の可用性はコンテナ内部でヘルスチェックを行うか、外部ツール(例:wait-for-it.sh)で待機させることが推奨される。
- proxy_set_header Host $host; により、バックエンド側でオリジナルのホスト名が参照できる。

4.3 よくあるエラーと対処法

エラー 原因 対策
client version too old Docker CLI と Engine の API バージョン不一致 Docker Desktop/Engine を最新に更新し、docker version で両方のバージョンを確認。
ポート競合 (Bind for 0.0.0.0:80 failed) ホスト側に同じポートがすでに使用中 lsof -i :80 でプロセスを特定し停止、または Compose 側の ports: を別ポートに変更。
サービス名が解決できない コンテナが期待したネットワークに接続していない docker compose config で生成された設定を確認し、全サービスが同一 network に所属しているか検証。

5️⃣ 本番デプロイのベストプラクティス

5.1 deploy: セクションの正しい使い方

  • Swarm / Kubernetes 前提docker compose up 単体で deploy: が機能するわけではない。実際に適用するには docker stack deploy -c docker-compose.yml <stack>(Swarm)や、Docker Desktop の Kubernetes オプションを有効化した上で kubectl apply -f へ変換するツールを使用する必要がある。
  • ヘルスチェックはコンテナ内部の /health エンドポイントと合わせて実装すると、障害時に自動的に再起動やレプリカ置き換えが行われる。

5.2 CI/CD パイプラインへの組み込み例

GitHub Actions(.github/workflows/deploy.yml

GitLab CI(.gitlab-ci.yml

  • docker stack deploy を使用することで、deploy: セクションが実際に適用される。Kubernetes 環境の場合は kompose 等で変換し、kubectl apply -f と置き換えることになる。
  • デプロイ失敗時は GitHub/GitLab のジョブステータス が即座に通知され、ロールバックや手動介入が容易になる。

6️⃣ まとめ ― 実務で役立つポイント

項目 推奨アクション
Compose ファイルのバージョン version: キーは省略可。互換性が必要なら "3.9" を使用し、最新仕様は公式リポジトリ(https://github.com/compose-spec/compose-spec)で確認。
ネットワーク設計 カスタムブリッジネットワークを作成し、サービス名で DNS 解決できることを前提に構築。
環境別設定 docker-compose.yml + オーバーライド (override.yml, prod.yml) のマルチファイル方式で管理し、.env 系統で機密情報は外部化。
ローカル Ingress エミュ Nginx リバースプロキシだけで実装できるので、K8s と同一のエンドポイント構造をローカルでも再現可能。
本番デプロイ deploy: は Swarm / Kubernetes 互換ランタイム限定。ヘルスチェック・リソース制限は必ず設定し、CI/CD パイプラインで自動化する。
信頼性の高い情報源 Docker の公式ドキュメントと Compose Specification リポジトリのみを参照し、外部ブログやリンクは避けるか、URL が存在することを必ず確認する。

次に読むべき資料
- Docker Docs – Compose: https://docs.docker.com/compose/
- Compose Specification(GitHub): https://github.com/compose-spec/compose-spec

このガイドは、Docker Compose の基礎から実務レベルの本番運用まで、一貫した流れで学べるよう構成しています。ぜひ自プロジェクトに取り入れ、コンテナオーケストレーションの効率化と信頼性向上を図ってください。

スポンサードリンク

お得なお知らせ

スポンサードリンク
1ヶ月で資格+現場入り

インフラエンジニアへの最短ルート

未経験でもAWS・Linux・ネットワーク資格を最短で取り、現場入りまでサポート。SREやクラウドエンジニアの入口。

CODE×CODEスピード転職|無料面談▶ SRE/クラウドのフリーランス案件▶

▶ AWS/GCP/Kubernetesの独学には Kindle Unlimited の技術書読み放題がコスパ最強。


-Docker