はじめに
開発をDocker上で行う際、
「開発用コンテナ」と「アプリケーション用コンテナ」をきちんと分けて管理する設計がとても重要です。
本記事では、両者の違いや役割について整理し、実際に遭遇しやすい問題とその対処法も紹介します。
1. 開発用コンテナとは
開発用コンテナとは、
エディタやターミナル、ビルドツールなど開発に必要なツール群をまとめたコンテナです。
具体例
- VSCode Server
- Node.js, Python, Javaなどの開発言語
- Docker CLI(場合によって)
- Make, Git, curl などのCLIツール
開発用コンテナの目的
- ホスト環境を汚さずに開発を進める
- 誰が開発しても同じ環境を再現できる
- 開発用ライブラリと実際のアプリ実行環境を分離する
イメージ
🐳 開発用コンテナ(devenv)
├── VSCodeやターミナルが動く
└── 開発ライブラリがインストールされている
2. アプリケーション用コンテナとは
アプリケーション用コンテナとは、
実際にサービスを提供するために動かすアプリケーション専用のコンテナです。
具体例
- フロントエンド(例:React / Vite)
- バックエンド(例:FastAPI / Node.js API)
- AI推論サーバー(例:AI関係 APIサーバー)
アプリケーションコンテナの目的
- サービスを本番同様の形で起動する
- アプリケーション単体で独立して動かせるようにする
- 最小限必要なライブラリだけを入れ、セキュアかつ軽量に保つ
イメージ
🐳 フロントエンドアプリケーション
🐳 バックエンドAPIサーバー
🐳 AI推論サーバー
(それぞれが独立して起動)
3. よくある質問:「開発用コンテナの中でさらにDocker buildしたい」
問題
開発用コンテナ(devenv)内では通常、
Dockerエンジンがインストールされていないため、docker build
ができない
という問題に直面します。
原因
- コンテナの中にDocker自体が入っていない
- DockerはホストOS上で動く「デーモン型サービス」だから
解決策
方法 | 解説 |
---|---|
ホスト側で直接 docker build する |
最もシンプルで安全な方法 |
docker.sockをマウントしてコンテナ内からdockerコマンドを叩けるようにする | 上級者向け(セキュリティリスクあり) |
例:ホスト側でbuildするパターン
cd frontend/
docker build -t my-frontend-app .
docker run -d -p 5173:5173 my-frontend-app
これで開発用コンテナはあくまで「作業場」に徹し、
アプリケーションコンテナは独立して起動できます。
4. 環境変数エラーと .env
ファイルの重要性
Docker Composeを使う際によく出るエラー例:
WARN The "POSTGRES_USER" variable is not set. Defaulting to a blank string.
env file .env not found
原因
-
.env
ファイルが存在しない - docker-compose.yml 内で
POSTGRES_USER
等の環境変数を参照している
対応策
- プロジェクトディレクトリ直下に
.env
を作成 - 必要な環境変数を記述する
例:最低限必要な.env
POSTGRES_USER=example_user
POSTGRES_PASSWORD=example_password
POSTGRES_DB=example_db
POSTGRES_HOST=db
POSTGRES_PORT=5432
これでdocker-compose起動時のエラーは解消します。
5. 現実的な進め方
開発スピード重視なら一旦ホストを汚してもOK。
- プロジェクト完成を優先
- 最後にまとめて環境掃除する(Dockerイメージ・コンテナの整理)
Docker環境の掃除コマンド(あとで使える)
# 未使用コンテナ削除
docker container prune
# 未使用イメージ削除
docker image prune
# 未使用ボリューム削除
docker volume prune
まとめ
項目 | ポイント |
---|---|
開発用コンテナとは? | エディタやビルドツールをまとめた作業場 |
アプリ用コンテナとは? | サービス提供するためのアプリ本体 |
docker buildはどこで? | 基本はホスト側 |
環境変数管理は? | .envファイルで統一 |
進め方のコツ | 汚れは気にせず、まずはPJT完成を最優先! |
🚀 おわりに
開発用コンテナとアプリケーションコンテナをきちんと分けて考えるだけで、
- 環境管理
- チーム開発
- 本番リリース後のトラブル防止
すべてがスムーズになります。
最初は手間でも、後々圧倒的に楽になるので、ぜひ意識して運用していきましょう!
✏️ この記事は、これまでの実践経験をもとにまとめました。
もしこの記事が役に立ったら、いいねやフォローもぜひお願いします!🚀