Dockerを使って開発を始めたとき、ports
と volumes
の意味が理解できなかった。
本記事では「なぜこう書くのか?」「何がどうつながっているのか?」という疑問を深堀りしていく中で、学んだことを整理する。
ports:
とは? 〜通信の橋渡し〜
目的
ホスト(自分のPC)とコンテナの間でネットワーク通信をつなぐための設定。
書き方
ports:
- "8080:80"
意味
-
8080
: ホスト(自分のMac)側のポート -
80
: コンテナ内でアプリ(nginxなど)が待ち受けるポート
つまり:
localhost:8080 → コンテナの中のポート80
volumes:
とは? 〜ファイル共有の架け橋〜
目的
ホスト(Macなど)とコンテナ間でファイルをリアルタイムで共有するための設定。
書き方
volumes:
- ./app:/var/www/html
意味
-
./app
: ホスト側のフォルダ -
/var/www/html
: コンテナ内でPHPやnginxが読み込む場所
つまり:
[Macの ./app/index.php] ⇔ [コンテナの /var/www/html/index.php]
なにがうれしい?
- ホストでファイルを保存すると、即座にコンテナ内に反映される
-
docker build
をやり直さなくてもOK - 開発中は効率最強!
volume の注意点
- あくまでファイルの共有であって、プロセスや環境は共有されない
- でも、ホスト側のコードが意図せず変わると、バージョン衝突が起きる可能性がある
- そのため、本番環境では
COPY
を使ってコードを焼き込んでおくのがベスト
COPY
vs volumes
まとめ
項目 | volumes | COPY |
---|---|---|
ファイルの共有 | ✅ する | ❌(焼き込み) |
リアルタイム反映 | ✅ 即反映 | ❌ buildし直し必要 |
本番向き? | ❌ 開発用 | ✅ 本番向き |
まとめ
-
ports:
→ ホストとコンテナ間の通信をつなぐ設定 -
volumes:
→ ホストとコンテナ間でファイルを共有する設定 - 開発では volumes、本番では COPY を使い分ける。