Docker コンテナのカスタムポートをホストにマッピングする方法

DockerBeginner
オンラインで実践に進む

はじめに

Docker は、一貫した隔離された環境でアプリケーションをパッケージ化およびデプロイするための、人気のコンテナ化プラットフォームです。Docker の主要な機能の 1 つは、コンテナからホストマシンへのポートのマッピングです。これにより、外部からコンテナ化されたアプリケーションにアクセスできます。このチュートリアルでは、Docker コンテナの独自ポートをホストにマッピングする方法を説明し、Docker ベースのアプリケーションを効果的に管理およびアクセスするための知識を提供します。

Docker ポートマッピング入門

Docker は、開発者がアプリケーションとその依存関係をコンテナと呼ばれる隔離された環境にパッケージ化できる人気のコンテナ化プラットフォームです。Docker の重要な機能の 1 つは、ホストマシンからコンテナへのポートのマッピングです。これにより、コンテナと外部の世界との間の通信が可能になります。

Docker コンテナを実行すると、通常は独自の内部ネットワーク上で動作し、特定のポートでリスニングします。コンテナ内で実行されているアプリケーションにアクセスするには、コンテナのポートをホストマシンのポートにマッピングする必要があります。

ポートマッピングは、さまざまなユースケースで不可欠です。

  1. Web アプリケーション: Docker コンテナ内で Web サーバーを実行する場合、コンテナのポート (例:80 または 8080) をホストマシンのポートにマッピングする必要があります。これにより、ユーザーは Web ブラウザを通じてアプリケーションにアクセスできます。

  2. データベース: Docker コンテナ内でデータベースサーバーを実行する場合、コンテナのポート (例:MySQL の場合 3306) をホストマシンのポートにマッピングする必要があります。これにより、他のアプリケーションがデータベースに接続できます。

  3. マイクロサービス: マイクロサービスアーキテクチャでは、各サービスは独自の Docker コンテナで実行される場合があります。ポートマッピングは、異なるサービス間および外部の世界との通信を可能にするために必要です。

Docker ポートマッピングの概念を理解することで、コンテナ化されたアプリケーションのネットワーク接続を効果的に管理し、ホストマシンまたは他のネットワーククライアントからアクセスできるようにすることができます。

Docker コンテナへのカスタムポートのマッピング

ホストマシンから Docker コンテナへのカスタムポートをマッピングするには、docker run コマンドを実行する際に -p または --publish フラグを使用できます。

基本的な構文は次のとおりです。

docker run -p <ホストポート>:<コンテナポート> <イメージ名>

例を示します。

docker run -p 8080:80 nginx

この例では、ホストマシンのポート 8080 が Nginx コンテナ内のポート 80 にマッピングされます。つまり、ホストマシンで http://localhost:8080 にアクセスすると、コンテナ内で実行されている Nginx Web サーバーにアクセスできます。

複数のポートをマッピングするには、-p フラグを複数回指定できます。

docker run -p 8080:80 -p 3306:3306 mysql

これにより、ホストのポート 8080 がコンテナのポート 80 に、ホストのポート 3306 がコンテナのポート 3306 にマッピングされます。

ホストマシン上の使用可能なランダムなポートをコンテナにマッピングするには、次の構文を使用します。

docker run -p <コンテナポート> <イメージ名>

たとえば、

docker run -p 80 nginx

この場合、Docker はホストマシン上の使用可能なポートを自動的に割り当て、コンテナのポート 80 にマッピングします。

ポートマッピングを確認するには、docker ps コマンドを実行します。これにより、マッピングされたポートが表示されます。

CONTAINER ID   IMAGE   COMMAND                  PORTS                 NAMES
abc123def456   nginx   "/docker-entrypoint.…"   0.0.0.0:8080->80/tcp   romantic_babbage

Docker コンテナへのカスタムポートのマッピング方法を理解することで、コンテナ化されたアプリケーションを外部に公開し、コンテナとホストマシンまたは他のネットワーククライアント間の通信を有効にすることができます。

実用的なユースケースと例

Web サーバーの実行

コンテナ内のポート 80 で動作する Web アプリケーションを Docker コンテナで実行している場合、ホストマシンからアプリケーションにアクセスできるように、コンテナのポート 80 をホスト上のカスタムポート (例えば 8080) にマッピングできます。

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

これで、ホストマシンで http://localhost:8080 にアクセスすることで、Web アプリケーションにアクセスできます。

データベースサーバーの公開

Docker コンテナでデータベースサーバー (例えば、MySQL) を実行している場合、コンテナのデータベースポート (例えば、3306) をホスト上のカスタムポートにマッピングできます。

docker run -p 3306:3306 mysql

これにより、ホストマシン上で実行されている他のアプリケーションは、ホストのポート 3306 を使用して、コンテナ内の MySQL データベースサーバーに接続できます。

複数のポートのマッピング

より複雑なシナリオでは、Web サーバー、アプリケーションサーバー、データベースなどの異なるコンポーネントが個別の Docker コンテナで実行されるマルチティアアプリケーションがある場合があります。これらのコンポーネントを公開するために、複数のポートをマッピングできます。

docker run -p 8080:80 -p 8000:8000 -p 3306:3306 my-app

これにより、ホストのポート 8080 がコンテナのポート 80 (Web サーバー)、ホストのポート 8000 がコンテナのポート 8000 (アプリケーションサーバー)、ホストのポート 3306 がコンテナのポート 3306 (データベースサーバー) にマッピングされます。

ランダムポートマッピングの使用

ホストマシン上の特定のポートを指定したくない場合は、Docker に使用可能なポートを自動的に割り当てさせることができます。

docker run -p 80 my-web-app

この場合、Docker はコンテナのポート 80 をホストマシン上の使用可能なポートにマッピングします。割り当てられたポートは docker ps コマンドで確認できます。

これらの実用的なユースケースと例を理解することで、Docker のポートマッピング機能を効果的に活用して、コンテナ化されたアプリケーションやサービスを外部に公開し、シームレスな通信とアプリケーションへのアクセスを可能にすることができます。

まとめ

このチュートリアルでは、Docker コンテナのカスタムポートをホストマシンにマッピングする方法を学びました。ポートマッピングのプロセスを理解することで、コンテナ化されたアプリケーションをホストからアクセスできるようになり、Docker ベースのサービスをより効果的に操作および管理できるようになります。このガイドで提供されている実用的なユースケースと例は、これらの概念を独自の Docker ベースのプロジェクトやデプロイに適用するのに役立ちます。