InfraAcademy

InfraAcademy Blog

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

| #Docker #Docker入門講座

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

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

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”コマンドを使って、コンテナのポートを公開する方法を説明します。

あわせて読みたい - 【簡単!】Dockerとは?初心者向けに分かりやすく解説【Docker入門講座①】 - 【初心者向け】Dockerファイルとは?書き方を解説【Docker入門④】

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番としてアクセスすることになります。

あわせて読みたい 【初心者向け】DockerHubからイメージを取得して起動する方法解説【Docker入門③】

まとめ

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

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

/blog/docker-book

Next Action

記事で読んだ内容を、講座で実装してみましょう

InfraAcademyでは、ブラウザ上でLinuxやネットワークの実践環境を使いながら学習できます。無料で始められる講座から、学習の流れを試せます。

この記事を書いた人

ryu

InfraAcademy運営 / エンジニア

エンジニア歴10年。Linux、ネットワーク、クラウドを中心に、実務で役立つインフラ技術を初心者にもわかりやすく解説しています。

X: @ryu63614894

Related

関連記事

ブログ一覧へ

Roadmap

まずはこの4講座から

ログインすれば無料で始められる講座です。気になったテーマから手を動かして学べます。

講座一覧を見る