Dockerを使うと、「コンテナ」という仮想的な環境の中でアプリケーションを動かせます。ただし、コンテナの中は外の世界(PCやインターネット)から直接アクセスできません。そこで重要になるのがポートの考え方です。
1. ポートって何?
「ポート」とは、コンピュータの入り口・出口のようなものです。
例えば、
- Webサイト(HTTP)は通常「80番ポート」
- Webサイト(HTTPS)は「443番ポート」
- データベース(MySQL)は「3306番ポート」
というように、それぞれ特定の番号のポートを使って通信します。
2. Dockerコンテナのポートとは?
コンテナの中には、アプリケーション(Webサーバーやデータベース)が動いています。でも、このままだと外部(PCやインターネット)からアクセスできません。そこで、コンテナのポートと、ホスト(PC)のポートをつなぐ(ポートマッピング)ことで、外部からアクセスできるようになります。
3. ポートマッピングとは?
例えば、DockerでWebサーバーを動かすときに、コンテナ内では80番ポートを使っているとします。でも、PC(ホスト側)のポートとつながっていなければ、外部からは見えません。
そこで、次のように「ホストの8080番」と「コンテナの80番」をつなげます。
docker run -p 8080:80 my-web-app
すると、
- コンテナの80番ポート(Webサーバー)
- PCの8080番ポート
がつながり、ブラウザでhttp://localhost:8080
にアクセスすると、コンテナ内のWebサイトが見られるようになります。
4. -p
の書き方と意味
ポートを指定するには、-p ホスト側ポート:コンテナ側ポート
の形式を使います。
よく使う例
docker run -p 8080:80 my-web-app
👉 ホストの8080番 → コンテナの80番へつなぐ
docker run -p 3306:3306 my-database
👉 ホストの3306番 → コンテナの3306番(MySQLデータベース)
ポートを変えたい場合
docker run -p 5000:80 my-web-app
👉 ホストの5000番 → コンテナの80番へつなぐ(http://localhost:5000
でアクセス)
5. Docker Compose でのポート設定
複数のコンテナを管理する docker-compose.yml
でも、ポートを指定できます。
version: '3'
services:
web:
image: my-web-app
ports:
- "8080:80"
db:
image: mysql
ports:
- "3306:3306"
👉 Webアプリは http://localhost:8080
でアクセス可能
👉 MySQLは localhost:3306
で接続可能
6. まとめ
- ポートはコンピュータの入り口・出口
- Dockerコンテナは外からアクセスできないので、ポートを開ける必要がある
-
-p ホスト側:コンテナ側
でポートをマッピング -
docker-compose.yml
でも設定可能
これを理解すると、Dockerのアプリを外部から利用できるようになります!