Docker コンテナーで複数のポートを公開する
インターネット上ではさまざまな種類の通信が行われますが、最も一般的なものには、ファイル転送、電子メールの送信、Web ページの提供などがあります。 この通信を可能にするために、通信タイプの識別に役立つポート番号を利用します。
たとえば、File Transfer Protocol はポート 20 と 21 を使用し、Simple Mail Transfer Protocol は 25 を使用し、Hypertext Transfer Protocol は 25 を使用します。
同様に、Docker コンテナーはポートを使用して、World Wide Web 上の異なるデバイス間の通信を可能にします。 このチュートリアルでは、Nginx アプリケーションを使用して Docker コンテナーで複数のポートを公開する方法を学習します。
NGINX アプリケーションを作成する
WebStorm IDEA を開き、File>New>Project
を選択します。 開いたウィンドウで [空のプロジェクト] を選択し、プロジェクト名を untitled
から web-app
に変更します。
最後に、[作成] というラベルの付いたボタンを押して、空のプロジェクトを作成します。
使用する開発環境は問わないため、他の開発環境を使用することもできます。 NGINX は静的コンテンツの提供に使用されるため、他の構成ファイルは必要ありません。
プロジェクトが生成されたら、web-app
フォルダーに index.js
という名前のファイルを作成し、次のコードをコピーしてファイルに貼り付けます。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>Welcome to Nginx !</h1>
</body>
</html>
このファイルには、アプリケーションのテストに役立つ見出しが付いた単純な Web ページが含まれています。 HTML コンテンツを変更して、必要なコンテンツを表示します。
Dockerfile を作成する
web-app
フォルダーに Dockerfile
という名前のファイルを作成し、次の手順をコピーしてファイルに貼り付けます。
FROM nginx:1.23.1-alpine
ADD . /usr/share/nginx/html
FROM
- カスタム イメージを作成するベース イメージを設定します。この例では、alpine
を使用して軽量バージョンの NGINX をプルしました。ADD
- 現在のフォルダー内のファイルとフォルダーを、/usr/share/nginx/html
にあるイメージのファイル システムにコピーします。
イメージを構築する
キーボード ショートカット ALT+F12 を使用して開発環境で新しいターミナル ウィンドウを開き、次のコマンドを使用して、タグ web-app:latest
を持つイメージを作成します。
~/WebstormProjects/web-app$ docker build --tag web-app:latest .
このコマンドは Dockerfile
を実行し、以下に示すように、2つの命令が順番に実行されたことを確認できます。
=> [1/2] FROM docker.io/library/nginx:1.23.1-alpine@sha256:082f8c10bd47b6acc8ef15ae61ae45dd8fde0e9f389a8b5cb23c3740 0.2s
=> => resolve docker.io/library/nginx:1.23.1-alpine@sha256:082f8c10bd47b6acc8ef15ae61ae45dd8fde0e9f389a8b5cb23c3740 0.2s
=> CACHED [2/2] ADD . /usr/share/nginx/html
複数のポートで Docker コンテナを実行する
イメージのビルドに使用したのと同じターミナル ウィンドウで、次のコマンドを使用して、コンテナーのポート 80 をリッスンするホストのポート 3000 と 5000 で web-app-prod
という名前のコンテナーを実行します。
~/WebstormProjects/web-app$ docker run --name web-app-prod -d -p 3000:80 -p 5000:80 web-app:latest
コンテナで複数のポートを公開するために、2つの連続した -p
フラグを使用して、ホストに 2つの異なるポートを割り当て、コンテナのポート 80 でリッスンします。
ポートのテスト
コンテナーが期待どおりに機能しているかどうかを確認するには、任意のブラウザーを開き、localhost:3000
(http://localhost:3000/) および localhost:5000
(http://localhost:5000/) にリクエストを発行します。 ポートは同じコンテナーをリッスンしているため、以下に示すように、2つの要求によって返された NGINX アプリケーションの同じページを取得します。
まとめ
このチュートリアルでは、NGINX アプリケーションを利用して、Docker コンテナーで複数のポートを公開する方法を説明しました。 これは複数のポートを公開する最も一般的な方法ですが、同じ目的を達成するために使用できる他のアプローチがあることに注意してください。
David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.
LinkedIn GitHub