Docker の EXPOSE コマンドと PUBLISH コマンドは、コンテナが外部世界と通信する方法を制御するために使用されます。Dockerfile で使用される EXPOSE は、コンテナが使用するポートについて Docker に通知しますが、そこにアクセスすることはできません。一方、コンテナを実行する際に使用される PUBLISH は、コンテナのポートをホストのポートにマップし、コンテナの外部からアクセスできるようにします。
EXPOSE は情報提供的なものであり、ドキュメント化の役割を果たす一方、PUBLISH はアクティブな操作であり、アプリケーションをコンテナ環境の外部でアクセス可能にするものです。EXPOSE はネットワーク計画に役立つと同時に、オーケストレーションツールによって使用され、PUBLISH はコンテナのポートをホストにバインドします。
Dockerfile を書く際には、常に EXPOSE を含めて、アプリケーションが使用するポートを示す必要があります。外部アクセスが必要な場合には、ポートを公開する必要があります。
開発中には、EXPOSE がネットワーク内の通信に十分な場合がありますが、外部からのテストにはポートの公開が必要です。プロダクション デプロイメントでは、ポートの公開が一般的に使用され、オーケストレーションツールが EXPOSE を設定に使用する場合があります。
EXPOSE と PUBLISH の主な違いは、EXPOSE が静的な宣言であり、PUBLISH が動的な操作であること、EXPOSE が Docker ネットワーク内のアクセシビリティを示し、PUBLISH が外部アクセスを可能にすること、EXPOSE がメモであり、PUBLISH がアクションであることです。
ベスト プラクティスには、Dockerfile に常に EXPOSE を含めることでドキュメント化を行い、セキュリティーのために必要な場合にのみポートを公開し、明確なポート マッピングを行って衝突を避け、設定を簡単にすることが含まれます。常にネットワーク設定をテストして、適切な通信を確保する必要があります。
dev.to
What is the difference between "expose" and "publish" in Docker?
Create attached notes ...
