[解決済み] Dockerの「expose」と「publish」の違いは何ですか?
質問
Dockerfilesを試していて、ほとんどのロジックを理解しているつもりです。しかし、この文脈では、ポートを公開することと、ポートを公開することの違いがわかりません。
私が見たすべてのチュートリアルでは、最初に
EXPOSE
というコマンドをDockerfileに記述します。
...
EXPOSE 8080
...
そして、このDockerfileからイメージを構築するのです。
$ docker build -t an_image - < Dockerfile
そして パブリッシュ を実行すると、上記と同じポートが表示されます。
$ docker run -d -p 8080 an_image
を使用してすべてのポートを公開するか
$ docker run -d -P an_image
どうせ公開されるなら、Dockerfileでポートを公開する意味はあるのでしょうか?最初にポートを公開する必要があるのでしょうか? ではなく 後で公開するのですか?実質的には、イメージ作成時にDockerfileで使用するポートを全て指定し、その後はわざわざ指定せず、シンプルにwithで実行したいのですが、いかがでしょうか?
$ docker run -d an_image
これは可能か?
どのように解決するのですか?
基本的には、3つの選択肢があります。
-
どちらも指定しない
EXPOSE
また-p
-
指定するのみ
EXPOSE
-
指定する
EXPOSE
と-p
1)
EXPOSE
または
-p
からしかアクセスできないので、コンテナ内のサービスは
内部
コンテナそのものです。
2) もし、あなたが
EXPOSE
ポートを指定すると、コンテナ内のサービスはDockerの外部からはアクセスできず、他のDockerコンテナの内部からアクセスできるようになります。なので、コンテナ間通信に適しています。
3) もし、あなたが
EXPOSE
と
-p
を指定すると、コンテナ内のサービスはどこからでも、たとえDockerの外からでもアクセスできるようになります。
両者が分離されている理由はIMHOにあります。
- ホストポートの選択はホストに依存するため、Dockerfile には属しません (さもなければホストに依存することになります)。
- で、あるコンテナ内のサービスが他のコンテナからアクセスできれば十分なことが多い。
は、その ドキュメント を明示的に記述しています。
は、以下の通りです。
EXPOSE
命令は、リンク内で使用するためのポートを公開します。
また、その方法を指南しています。 リンクコンテナ これは基本的に、先ほどお話したコンテナ間のコミュニケーションです。
PS: もし、あなたが
-p
を使用せず
EXPOSE
Dockerは暗黙のうちに
EXPOSE
. これは、ポートが一般に公開されている場合、自動的に他のDockerコンテナにも公開されるからです。したがって
-p
が含まれます。
EXPOSE
. だから、4つ目のケースとして上に挙げなかったのです。
関連
-
[解決済み】Dockerのビルドコンテキスト外のファイルをインクルードする方法とは?
-
ドッカーコンテナの状態がExitと表示される(1)
-
[解決済み] Dockerfileの'COPY'と'ADD'コマンドの違いは何ですか?
-
[解決済み] Dockerコンテナの中から、マシンのローカルホストに接続するにはどうすればよいですか?
-
[解決済み] DockerfileのCMDとENTRYPOINTの違いは何ですか?
-
[解決済み] ホストからDockerコンテナのIPアドレスを取得する方法
-
[解決済み] Dockerイメージの削除方法について教えてください。
-
[解決済み] ライブDockerコンテナでポートを公開する
-
[解決済み】Dockerイメージとコンテナの違いは何ですか?
-
[解決済み] [Solved] 失敗した `docker build` のファイルシステムを検査するにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラー "入力デバイスはTTYではありません"
-
[解決済み】docker-compose.ymlでdocker execを実行する方法
-
[解決済み] Docker - コンテナが実行されていません
-
[解決済み] Docker - デーモンからのエラー応答:クライアントはサーバーよりも新しいです。
-
Docker npm getaddrinfo EAI_AGAIN registry.npmjs.org registry.npmjs.org:443
-
ドッカーサーバーがHTTPSクライアントに対してHTTPレスポンスを返す問題処理
-
DockerのインストールとRocketMQの利用について
-
docker学習用イメージの作成にdockerfileを使用した場合の落とし穴
-
docker-composeによるmysqlのデプロイメントの実践
-
dockerのmountコマンドでエラーになる: mount: permission denied