0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Dockerのportsとvolumesの仕組みを根本から理解する

Posted at

Dockerを使って開発を始めたとき、portsvolumes の意味が理解できなかった。

本記事では「なぜこう書くのか?」「何がどうつながっているのか?」という疑問を深堀りしていく中で、学んだことを整理する。


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 を使い分ける。
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?