Docker の「公開」と「公開」の違いは何ですか? 質問する

Docker の「公開」と「公開」の違いは何ですか? 質問する

私は Dockerfiles を試していて、ロジックの大部分を理解していると思います。ただし、このコンテキストではポートの「公開」と「公開」の違いがわかりません。

私がこれまでに見たすべてのチュートリアルでは、まずEXPOSEDockerfile に次のコマンドが含まれています。

...
EXPOSE 8080
...

次に、この Dockerfile からイメージを構築します。

$ docker build -t an_image - < Dockerfile

そして、イメージを実行するときに上記と同じポートを公開します。

$ docker run -d -p 8080 an_image

または、すべてのポートを公開するには

$ docker run -d -P an_image

いずれにしても公開されるのであれば、Dockerfile でポートを公開する意味は何でしょうか? 最初にポートを公開し、後で公開しない必要があることはありますか? 実際には、イメージを作成するときに使用するすべてのポートを Dockerfile で指定し、その後はポートを気にせずに、次のように実行したいと思います。

$ docker run -d an_image

これは可能ですか?

ベストアンサー1

基本的に、3つ(4つ)のオプションがあります。

  1. 指定EXPOSEもせず、-p
  2. 指定のみEXPOSE
  3. 指定しEXPOSE-p
  4. -p暗黙的に行うもののみ指定するEXPOSE
  1. も も指定しない場合はEXPOSE-pコンテナ内のサービスにはコンテナ自体の内部からのみアクセスできるようになります。

  2. ポートを使用するとEXPOSE、コンテナ内のサービスは Docker の外部からではなく、他の Docker コンテナ内からアクセス可能になります。そのため、コンテナ間の通信に適しています。

  3. EXPOSEポートがあれば-p、コンテナ内のサービスは Docker の外部からでもどこからでもアクセスできるようになります。

  4. を実行するが-p、 を実行しない場合はEXPOSE、Docker は暗黙的に を実行しますEXPOSE。これは、ポートが一般に公開されている場合、他の Docker コンテナーにも自動的に公開されるためです。したがって、-pが含まれますEXPOSE。これは実質的に 3) と同じです。

両者を分離する理由は、私見では次のとおりです。

  • ホストポートの選択はホストに依存するため、Dockerfileには属しません(そうでない場合はホストに依存することになります)。
  • 多くの場合、コンテナ内のサービスが他のコンテナからアクセス可能であれば十分です。

ドキュメンテーション明確に述べている:

このEXPOSE命令は、リンク内で使用するためのポートを公開します。

また、どのようにすればリンクコンテナ(レガシー機能)、これは基本的に、私が説明したコンテナ間通信です。

おすすめ記事