Day3:Webサーバ起動(実務の入口)後半
テーマ:ポートフォワーディングを“実務レベルで使いこなす”
後半では、前半・中盤で理解したポートフォワーディングを
「実務でどう使うか」「どんなトラブルが起きるか」「どう設計すべきか」
という視点で深掘りします。
ここを押さえると、Docker を使った Web 開発が一気にスムーズになり、
「ポートが開かない」「アクセスできない」という初心者あるあるを完全に回避できます。
ポートフォワーディングの“実務的な設計”を理解する
外部公開するポートは最小限にする
Docker では、-p を使ったポート公開は 外部に向けて扉を開く行為 です。
つまり、セキュリティ的には「必要なポートだけ開ける」が鉄則です。
nginx の場合は 80 番だけで十分です。
docker run -d -p 8080:80 nginx
これにより、
外部からアクセスできるのは 8080 番だけ
という安全な状態になります。
実務でよくある“ポートの衝突”問題を理解する
ホスト側のポートは重複できない
例えば、すでに別のアプリが 8080 番を使っている場合、
次のコマンドはエラーになります。
docker run -d -p 8080:80 nginx
この場合はポートを変えればOKです。
docker run -d -p 8081:80 nginx
どのポートが使われているか確認する方法
実務では「どのポートが空いているか」を把握することが重要です。
Docker では docker ps を使えば、公開中のポートが確認できます。
docker ps
ここに 0.0.0.0:8080->80/tcp のように表示されます。
“アクセスできない”ときのトラブルシューティング
ケース1:ブラウザで nginx が表示されない
原因として最も多いのは ポート番号の勘違い です。
例:-p 8080:80 で起動したのに、http://localhost:80 にアクセスしている。
正しくは:
http://localhost:8080
ケース2:コンテナが起動していない
docker ps で確認します。
もし表示されないなら:
docker ps -a
停止している場合は:
docker start コンテナID
ケース3:ポートが他のアプリに占有されている
この場合は、ホスト側のポートを変えるのが最も簡単です。
docker run -d -p 8888:80 nginx
実務で使う“ポート設計のコツ”
1. ホスト側のポートはアプリごとに分ける
nginx → 8080
API → 3000
DB GUI → 8081
など、役割ごとに整理すると混乱しません。
2. コンテナ側のポートはアプリに合わせる
nginx → 80
Node.js → 3000
Flask → 5000
React → 5173
右側(コンテナ側)はアプリの仕様に従う
というルールを覚えておくと迷いません。
3. 本番環境では 80 / 443 を使う
実務では、
HTTP → 80
HTTPS → 443
が標準です。
開発環境では 8080 や 3000 を使い、
本番では 80 / 443 に切り替えるのが一般的です。
nginx を使った“実務に近い”例
例:静的サイトを公開する
docker run -d -p 8080:80 -v $(pwd)/html:/usr/share/nginx/html nginx
これで、
ホストの html フォルダに置いたファイルが
nginx で公開されます。
ポートフォワーディングとボリュームを組み合わせると、
ローカルで即座に Web サイトを公開できる
という強力な開発環境が作れます。
Day3のゴール達成チェック
あなたは次の質問に答えられますか?
ホスト側とコンテナ側のポートの違いは?-p 8080:80 の左右は何を意味する?
なぜポートフォワーディングが必要?
ポートが衝突したらどうする?
nginx にアクセスできないときの確認ポイントは?
これらを自分の言葉で説明できれば、
Day3 のゴール「ポートフォワーディングを理解」は完全達成です。
