Docker

Dockerfileでリッスンするポートを指定するEXPOSEについて解説

PCでコーディング

こんにちは、フルスタックエンジニアのryuです。

今回の記事では、Dockerfileでポートを指定するEXPOSEについて解説します。EXPOSEとは、コンテナ実行時に、指定したポートをコンテナがリッスンするようにするコマンドです。使い方など詳しく解説します。

サーバー構築を実践で身につけるInfraAcademy

※本ページには、プロモーション・アフィリエイトリンクが含まれています

Dockerfileでリッスンするポートを指定するEXPOSE

今回の記事では、Dockerfileでリッスンするポートを指定するEXPOSEについて解説します。

EXPOSEとは?

EXPOSEはDockerfileで使用されるコマンドです。コンテナ実行時に、指定したポートをコンテナがリッスンするようになります。

例えば、以下のようなDockerfileがあった場合、コンテナはポート80番を受け付けるようになります。

FROM nginx

EXPOSE 80

ただ、EXPOSEだけでは、ポートは公開されません。つまり、使用者からコンテナにはアクセスできません。後に説明する”docker run -p”コマンドを使用し、公開用のポートとEXPOSEで指定したポートを紐づけることで、公開されるようになります。

そのため、EXPOSEはイメージの作者とコンテナ実行者の両者に対して、ドキュメントのような役割をします。

EXPOSE 命令だけは、実際にはポートを 公開publish しません。これは、どのポートを公開する意図なのかという、イメージの作者とコンテナ実行者の両者に対し、ある種のドキュメントとして機能します。

(docker 公式ドキュメント)

では、EXPOSEの使い方や”docker run”コマンドを使って、コンテナのポートを公開する方法を説明します。

DockerfileでのEXPOSEの使い方

ここからはDockerfileでのEXPOSEの使い方について解説します。コンテナでポートをリッスンさせて、”docker run”コマンドを使って、ホスト上のポートとバインディングさせて公開できるようにします。

EXPOSEでポートとプロトコルを指定する

EXPOSEは以下のように記述します。

EXPOSE 80
EXPOSE [ポート番号]

上記のように記述すると、コンテナはTCPの80番ポートをリッスンするようになります。プロトコルを指定しない場合は、デフォルトでTCPをリッスンします。

プロトコルを指定する場合は、このように記述します。

EXPOSE 80/tcp
EXPOSE 80/udp
EXPOSE [ポート番号]/[プロトコル]

docker runコマンドでホスト上のポートとバインディングする

先ほども説明した通り、EXPOSEだけではコンテナにアクセスすることはできません。”docker run”コマンドを使用して、ホスト上のポートとコンテナのポートを紐づけます。

docker run -p 80:80 ・・・
docker run -p [ホスト側のポート]:[コンテナ側のポート]

ホスト側のポートとコンテナ側のポートは必ずしも一致させる必要はありません。コンテナ側が80番ポートをリッスンしていても、ホスト側で8080番を指定すれば、外部からは8080番としてアクセスすることになります。

まとめ

今回の記事では、Dockerfileでポートを指定するEXPOSEについて解説しました。Dockerfileのコマンドは様々なものがあるので是非覚えておきましょう。以上で記事を終わります。読んでいただきありがとうございました!

参考:Dockerfile リファレンス — Docker-docs-ja 20.10 ドキュメント

【最新】Dockerのおすすめ参考書5選!【これからDockerを勉強したい方へ】 こんにちは、フルスタックエンジニアのryuです。 「おすすめのDockerの参考書を知りたい」 「Dockerを...

ABOUT ME
ryu@InfraAcademyというインフラ学習サービス運営
大手企業→上場ベンチャー→スタートアップでエンジニアをしていました。 インフラエンジニア歴10年以上。 Linuxやネットワークの学習ができるサービスInfraAcademyを運営中。
RELATED POST