Docker には以下の 3種類ポートの共有についての設定があると思う。
- Dockerfile EXPOSE
- docker run / create -P, --publish-all=true|false
- docker run / create -p, --publish=[]
それぞれについて使い分けを説明する。
Dockerfile EXPOSE
Docker コンテナ間のポート共有の為の仕組み。
未検証だが、一つのホストに複数の用途が異なるコンテナを立てる場合に用いると思う。
詳しく -> https://docs.docker.com/reference/builder/#expose
docker run / create -P, --publish-all=true|false
Dockerfile EXPOSE で指定したポートをホストに公開する設定。
但し、ホスト側の 49153-65535
の間のポートで公開されるため、プログラムから Docker コンテナを立ち上げ、コンテナごとにポートを指定する場合に用いると思う。
詳しく -> https://docs.docker.com/articles/networking/#binding-ports
docker run / create -p, --publish=[]
-p 3306:3306
といった設定で host:guest
のポートをつなぐ。
シンプルに Docker コンテナで Web アプリケーションサーバを起動して外部に公開する場合に利用すると思う。
詳しく -> man docker run
or https://docs.docker.com/articles/networking/#binding-ports