Day3:Webサーバ起動(実務の入口)中盤
テーマ:ポートフォワーディングを“図で理解し、応用できる状態”にする
前半では docker run -d -p 8080:80 nginx の意味を分解しました。
中盤では、ポートフォワーディングを頭の中で“見える化”し、他のアプリにも応用できるようにすることが目的です。
Dockerを実務で使うとき、
「どのポートをどこに繋ぐか」
を理解していないと必ずつまずきます。
ここをしっかり押さえると、Webアプリ開発が一気にスムーズになります。
ポートフォワーディングを“図”として理解する
ホストとコンテナの関係を視覚化する
-p 8080:80 は、次のような橋を作っています。
あなたのPC(ホスト)
↓ 8080番ポート
Dockerの橋(ポートフォワーディング)
↓ 80番ポート
nginxコンテナ(Webサーバ)
つまり、
ホストの 8080 → コンテナの 80
という一方通行のルートが作られます。
ブラウザで http://localhost:8080 にアクセスすると、
この橋を通って nginx に届きます。
なぜポートフォワーディングが必要なのか
コンテナの中は“外から見えない”から
コンテナは独立した世界です。
そのため、コンテナの中で nginx が 80 番で待っていても、
ホスト側からは見えません。
例えるなら、
マンションの部屋の中で音楽を流しても、外からは聞こえない
という状態です。
そこで Docker が「ドア」を作ります。
そのドアが -p 8080:80 です。
ポート番号の左右の意味を深掘りする
左:ホスト側のポート
8080:80 の左側(8080)は、
あなたのPCのポート番号 です。
ブラウザはここにアクセスします。
右:コンテナ側のポート
右側(80)は、
コンテナの中でアプリが待っているポート番号 です。
nginx はデフォルトで 80 番で動くため、80 を指定します。
例題:ポート番号を変えるとどうなるか
例1:ホスト側のポートを変える
docker run -d -p 5000:80 nginx
この場合、アクセス先は:
http://localhost:5000
nginx はコンテナ内で 80 番のままですが、
ホスト側の入り口を 5000 に変えた形です。
例2:コンテナ側のポートを変える
アプリによっては、コンテナ内で 3000 番で動くものもあります。
docker run -d -p 8080:3000 myapp
この場合、
ホスト8080 → コンテナ3000
という橋が作られます。
nginx 以外のアプリにも応用できる
Node.js アプリの例
Node.js アプリがコンテナ内で 3000 番で動くなら:
docker run -d -p 3000:3000 my-node-app
Python Flask の例
Flask が 5000 番で動くなら:
docker run -d -p 5000:5000 my-flask-app
React の開発サーバの例
React が 5173 番で動くなら:
docker run -d -p 5173:5173 my-react-app
ポートフォワーディングの仕組みを理解すれば、どんなアプリでも外部公開できる
ということです。
ポートフォワーディングの“実務的な注意点”
1. ホスト側のポートは重複できない
すでに 8080 番を使っているアプリがある場合、
同じ 8080 を使うとエラーになります。
その場合は別のポートを使います。
docker run -d -p 8081:80 nginx
2. コンテナ側のポートはアプリに合わせる
nginx は 80
Node.js は 3000
Flask は 5000
React は 5173
アプリがどのポートで動くかを理解することが重要です。
中盤まとめ(ここまでで理解すべきこと)
-p 8080:80は「ホスト8080 → コンテナ80」の橋- コンテナの中は外から見えないため、ポートフォワーディングが必要
- 左がホスト、右がコンテナ
- ポート番号を変えるとアクセス先が変わる
- nginx 以外のアプリにも応用できる
- ホスト側のポートは重複できない
- コンテナ側のポートはアプリに合わせる
ここまで理解できれば、
ポートフォワーディングの“仕組み”は完全に掴めています。
