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におけるポートの考え方

Posted at

Dockerを使うと、「コンテナ」という仮想的な環境の中でアプリケーションを動かせます。ただし、コンテナの中は外の世界(PCやインターネット)から直接アクセスできません。そこで重要になるのがポートの考え方です。

1. ポートって何?

「ポート」とは、コンピュータの入り口・出口のようなものです。
例えば、

  • Webサイト(HTTP)は通常「80番ポート」
  • Webサイト(HTTPS)は「443番ポート」
  • データベース(MySQL)は「3306番ポート」
    というように、それぞれ特定の番号のポートを使って通信します。

2. Dockerコンテナのポートとは?

コンテナの中には、アプリケーション(Webサーバーやデータベース)が動いています。でも、このままだと外部(PCやインターネット)からアクセスできません。そこで、コンテナのポートと、ホスト(PC)のポートをつなぐ(ポートマッピング)ことで、外部からアクセスできるようになります。

3. ポートマッピングとは?

例えば、DockerでWebサーバーを動かすときに、コンテナ内では80番ポートを使っているとします。でも、PC(ホスト側)のポートとつながっていなければ、外部からは見えません。

そこで、次のように「ホストの8080番」と「コンテナの80番」をつなげます。

sh
docker run -p 8080:80 my-web-app

すると、

  • コンテナの80番ポート(Webサーバー)
  • PCの8080番ポート
    がつながり、ブラウザで http://localhost:8080 にアクセスすると、コンテナ内のWebサイトが見られるようになります。

4. -p の書き方と意味

ポートを指定するには、-p ホスト側ポート:コンテナ側ポート の形式を使います。

よく使う例

sh
docker run -p 8080:80 my-web-app

👉 ホストの8080番 → コンテナの80番へつなぐ

sh
docker run -p 3306:3306 my-database

👉 ホストの3306番 → コンテナの3306番(MySQLデータベース)

ポートを変えたい場合

sh
docker run -p 5000:80 my-web-app

👉 ホストの5000番 → コンテナの80番へつなぐ(http://localhost:5000 でアクセス)

5. Docker Compose でのポート設定

複数のコンテナを管理する docker-compose.yml でも、ポートを指定できます。

yaml
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のアプリを外部から利用できるようになります!
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?