2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DockerfileにおけるEXPOSEの役割を理解する

2
Posted at

はじめに

Minecraft統合版サーバーをDocker化して、ついでにAPIで色々操作できるようにする的な個人開発(自分用)をしています。

業務でDockerを使ってこなかったので、色々知ることがたくさんあり、下書きにもいくつか溜まっているので、今回はその中の一つを記事として公開します。

EXPOSE命令とは何か

結論から言うと、EXPOSE命令は「このポートを開放すべき」というドキュメントのような役割を持つものです。

ただし、単なるコメントとは違って、実行時に-Pフラグを使った場合には自動的にポートマッピングしてくれるので、ちゃんと効力はあります。

重要なのは、DockerfileでEXPOSEを書いただけでは、ポートは公開されないということです。
実際にポートを公開するには、docker run実行時に-pオプションで指定するか、-Pオプションを使う必要があります。

公式ドキュメントにはこう書かれています。

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

つまり、DockerfileでいくらEXPOSEを書いても、最終的に公開ポートを決めるのは実行時のオプション次第ということです。

もちろん、アプリケーションが8080番ポートで動いている場合、そのポートを開けないとアクセスできないのは当然ですが、EXPOSEはあくまで「このポートを使います」という情報を示すものです。

まとめ

公式ドキュメントを読むと、機能の本質が腑に落ちました。

LLMと徹底的に対話することで、認識の誤りも限りなく少なくできました。

記事にも残して多重アウトプット、完璧です。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?