docker composeでPort指定|範囲指定・実例付き

※本サイトにはプロモーション・広告が含まれています。

(最終更新月:2023年9月)

✔当記事がおすすめの方

「docker compose portコマンドが何をするものかが知りたい」

「docker compose portコマンドの正しい使い方を学びたい」

「docker compose portコマンドの使用例を参考にしたい」

✔当記事で学べること

  • docker compose portコマンドの基本概念
  • docker compose portコマンドの正しい利用方法とその活用策
  • docker compose portコマンドの実際の使用例

当記事では、docker compose portコマンドについて初心者から経験者まで理解できるよう詳しく、実例を交えて解説します。

ぜひ最後までご覧ください。

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

Docker Compose Portを理解するための前提知識

こちらでは、「Docker Composeの基本的な概念と理解」についてお伝えしていきます。

  • Docker Composeとは
  • Docker ComposeとPortの関係性
  • 用語説明:Docker、Docker Compose、Portとは何か

Docker Composeとは?

Docker Composeは複数のコンテナを定義し、実行するためのツールです。

特徴をまとめると以下のとおり。

  1. 定義と実行: Docker Composeを使用すると、docker-compose.ymlというYAMLファイルにマルチコンテナのDockerアプリケーションを定義できます。このファイルには、使用する各コンテナの設定、ネットワーク、ボリューム、依存関係などが記述されます。
  2. 一貫性: Docker Composeを使用すると、開発環境、テスト環境、本番環境など、異なる環境で同じサービス構成を簡単に再現できます。
  3. 開発とテスト: Docker Composeは、開発中のアプリケーションのローカルでの実行や統合テスト、ステージング環境のセットアップなどに非常に役立ちます。
  4. 簡単なスケーリング: docker-compose.ymlファイル内でサービスのレプリカ数を指定することで、サービスのスケーリングが簡単に行えます。
  5. ログとモニタリング: Docker Composeコマンドを使用して、サービスのログを取得したり、サービスの状態をモニタリングすることができます。

簡単なdocker-compose.ymlは以下のとおりです。

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"

Docker ComposeとPortの関係性

Docker ComposeとPortの関係性は、コンテナ間の通信や、ホストとコンテナ間の通信を制御するためのもの。

以下にその関係性を詳しく説明します。

  • コンテナ間の通信
  • コンテナ間の通信
  • 複数のコンテナでのポートの衝突

コンテナ間の通信

Docker Composeを使用すると、複数のコンテナを同じネットワーク上に配置できます。

同ネットワーク上に配置することで、コンテナ間での通信が容易になります。

例えば、webサーバーコンテナとデータベースコンテナがある場合、webサーバーコンテナはデータベースコンテナのサービス名を使用してデータベースに接続可能。

これは、Docker Composeが自動的にDNS解決を提供するためです。

ホストとコンテナ間の通信

Docker Composeのports設定を使用すると、コンテナのポートをホストマシンのポートにマッピング(バインド)が可能です。

これにより、ホストマシンや外部のマシンからコンテナ内のアプリケーションやサービスにアクセスできるようになります。

ports: - "8080:80"

コンテナの80番ポートをホストの8080番ポートにマッピングします。

これにより、ホストマシンの8080番ポートを通じてコンテナ内のアプリケーションにアクセスできるのです。

複数のコンテナでのポートの衝突

複数のコンテナが同じポートを使用してても、Docker Composeにより、ポートの衝突を避けられます。

なぜならホストマシン上で、それぞれを異なるポートにマッピングできるからです。

例えば、2つのwebサービスがそれぞれ80番ポートを使用する場合、1つはホストの8080番ポート、もう1つは8090番ポートにマッピングできます。

用語説明:Docker、Docker Compose、Portとは何か

当記事の内容を理解するために、最低限、以下のことをおさらいしておきましょう。

用語説明使用例
Dockerソフトウェアをコンテナとしてパッケージ化し、どの環境でも同じように動作するようにするプラットフォーム。docker run nginx
ImageDockerでのアプリケーションとその依存関係を含む静的なスナップショット。docker build -t myapp:latest .
ContainerDocker Imageからインスタンス化された実行中のプロセス。docker ps
Docker Compose複数のDockerコンテナを定義し、実行するためのツール。YAMLファイルでサービス、ネットワーク、ボリュームを定義する。docker-compose up -d
ServiceDocker ComposeのYAMLファイル内で、特定のイメージを基にしたコンテナの設定を表す。services: web: image: nginx (これはdocker-compose.ymlの一部)
Portコンピュータネットワークにおいて、特定のプロセスやアプリケーションにデータを送受信するためのエンドポイント。curl http://localhost:80
Port MappingDockerコンテナのポートをホストマシンのポートにマッピングすること。これにより、ホストマシンを通じてコンテナ内のアプリケーションにアクセスできる。ports: - "8080:80" (これはdocker-compose.ymlの一部)

これらの使用例は、基本的な操作を示しています。

Docker ComposeにおけるPortの仕組み

こちらでは、Docker ComposeにおけるPortの仕組みについて解説します。

  • Docker ComposeでのPortの役割
  • ホストのIPとは何か
  • 対象となるプロトコルの説明

Docker ComposeでのPortの役割

Docker Composeでは、Portの設定はコンテナと外部ネットワークとの通信を制御する重要な役割を果たします。

Webサーバーは80番ポートでの通信を受け付けるので、外部からアクセスするポートを指定できるのです。

version: '3'

services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"

この例では、コンテナ(Webサーバー)のポート80にアクセスするためにホストのポート8080番をマッピングしています。

docker compose up -d

バックグラウンドで機動すれば、以下のURLでアクセスできるはず。

localhost:8080

ホストのIPとは何か

ホストのIPとは、コンテナが動作する物理的または仮想的なマシンのIPアドレスです。

Docker Composeでは、特定のホストIPにバインドすることで、特定のネットワークインターフェイスからのみアクセスを許可できます。

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "192.168.1.xxx:8080:80"

192.168.1.xxxの箇所は、ホスト(あなたのPC等)に紐付けられているIPアドレスを指定してください。調べるには「ifconfig」「ipconfig」などのコマンドが使えます。

対象となるプロトコルの説明

Docker Composeで扱うプロトコルは主にTCPとUDPです。

  • TCP:信頼性のある接続を提供し、HTTPやHTTPSなどの通信に使用される
  • UDP:速度が要求されるゲームやストリーミングなどに使われるプロトコル

Docker ComposeのPortの設定法

こちらでは、「Docker ComposeのPortの設定方法」について詳細に説明します。

  • ポートマッピングの基本形式
  • ポートマッピングの例(1対1、範囲指定)
  • ポート指定の省略形とその解説
  • 実際の設定例:3000:3000と3000:4200の違い

ポートマッピングの基本形式

ポートマッピングはコンテナのポートとホストのポートを関連付けるもの。

形式は以下のとおりです。

ホストのポート:コンテナのポート

例を挙げると以下のとおりです。

8080:80

ホストの8080番ポートがコンテナの80番ポートにマッピングされます。

ポートマッピングの例(1対1、範囲指定)

ポートマッピングは1対1の関連付けや範囲指定も可能です。

それぞれの例は以下のとおり。

#1対1の例
5000:5000

#範囲指定の例
6000-6005:6000-6005

範囲指定は一連の連続したポートをマッピングするのに便利です。

ポート指定の省略形とその解説

ポート指定の省略形では、ホストのポート部分を省略して記述できます。

:80

Dockerは自動的に利用可能なホストのポートにマッピングします。

実際の設定例:3000:3000と3000:4200の違い

3000:30003000:4200の違いは、ホストとコンテナのポートの関連付けにあります。

同じポート番号にアクセスできるが、コンテナのポート番号が異なるのです。

  • 前者はホストとコンテナが同じポート番号
  • 後者はホストとコンテナが異なるポート番号

用途に応じて適切に設定する必要があります。

Docker ComposeでのPort設定の実践とテスト

こちらでは、Docker ComposeでのPort設定の実践とテストについて説明します。

  • 実際の設定方法:例とコードスニペット
  • Port設定の検証方法とその結果
  • 複数のコンテナでのPort管理とテスト

実際の設定方法:例とコードスニペット

Docker Composeのdocker-compose.ymlファイルでポートを設定する例です。

services:
  web:
    image: nginx
    ports:
      - "8080:80"

上記の設定では、ホストの8080番ポートがコンテナの80番ポートにマッピングされます。

Port設定の検証方法とその結果

設定したポートが正しく動作しているかを検証する方法として、以下のコマンドがあります。

docker compose ps

このコマンドは、Docker Composeで管理しているコンテナの状態を表示し、ポートのマッピング状況も確認できます。

複数のコンテナでのPort管理とテスト

複数のコンテナでポートを管理する場合、それぞれのサービスで異なるポートを設定する必要があります。

services:
  web:
    image: nginx
    ports:
      - "8080:80"
  db:
    image: postgres
    ports:
      - "5432:5432"

テストは通常のネットワーク接続テストと同様に、ホストの指定したポートにアクセスすることで確認できます。

ポート設定のトラブルシューティング

こちらでは、ポート設定のトラブルシューティングについて解説します。

トラブルが起こる前に知っておくと、回避できるトラブルもあるはずです。

  • よくあるエラーと解決策
  • ポート範囲指定が役立つケース
  • ポート設定のベストプラクティスと注意点

よくあるエラーと解決策

ポート競合はよくあるエラーです。

ポート競合とは、すでに使われているポートを指定しまうこと。

例えば"8080:80"の設定で、8080番ポートがすでに使用されているとエラーになります。

解決策として、docker compose downでコンテナを停止し、使用しているポートを解放しましょう。

docker compose down

ポート範囲指定が役立つケース

範囲指定は複数の連続したポートを一度に開放する際に役立ちます。

services:
  app:
    image: my-app
    ports:
      - "5000-5005:5000-5005"

これにより、5000番から5005番のポートが一度に開放されます。

ポート設定のベストプラクティスと注意点

ポート設定には、セキュリティ上のリスクも伴うため、注意して指定しましょう。

不必要に広い範囲のポートを開放しない、特定のIPからのアクセスのみ許可するなど、ベストプラクティスを守ることが重要です。

まとめ

当記事では、Docker ComposeのPort設定について学習してきました。

Docker Composeのポート設定はコンテナの通信制御に不可欠であり、正確に理解し、適切に設定することが重要です。

当記事の知識を基に、更に深い学びを追求することをおすすめします。

タイトルとURLをコピーしました