問題タブ [docker-volume]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
docker - Docker コンテナを起動して HTTP リクエストを処理する
ユーザーがプロジェクト内のファイルを管理する Web アプリケーションを構築しています。各ユーザーは複数のプロジェクトを持つことができ、各プロジェクトは複数のファイルを持つことができます。各プロジェクトが Docker ボリュームである Docker を使用してこれを実装しました。ユーザーが webapp インターフェイスのボタンをクリックしてプロジェクト内のファイルを変更すると、Web サーバーはワーカー (別の Docker インスタンス) を構成して起動し、Docker ボリューム内のファイルを変更します。これまでのところ、これはすべてうまく機能しています。
ただし、これらのプロジェクト ファイルを HTTP 経由で提供したいと考えています。私が考えている戦略は次のとおりです。
- Web サーバー (nginx など) は、ユーザーからの着信 HTTP 要求を受け入れます。
- Web サーバーは受信リクエストを検査して、どのプロジェクトがリクエストされているかを判断します。たとえば、URL が の場合、プロジェクトがリクエストされている
sparkle-pony.myapp.com
ことがわかります。sparkle-pony
このプロジェクトが存在しない場合、nginx は応答を返します404 Not Found
。 - Web サーバーは、ユーザーがログインしているかどうか、およびログインしているユーザーがプロジェクトを表示する権限を持っているかどうかも確認します。そうでない場合、Web サーバーは
403 Forbidden
HTTP 応答で応答します。 - Web サーバーは、新しい Docker コンテナー (おそらく別の nginx プロセス) を構成して起動します。この構成の一部には、正しい Docker ボリュームを新しいコンテナーにマウントすることが含まれます。この新しく起動されたコンテナを「内側」コンテナと呼び、既存のコンテナを「外側」コンテナと呼びます。
- 外側のコンテナーは、この HTTP 要求を内側のコンテナーに渡すか、内側のコンテナーの応答のプロキシとして機能します。
- プロジェクトの適切な Docker ボリュームにアクセスでき、要求しているユーザーが適切なアクセス許可を持っていることを認識して安全な内部コンテナーは、URL パスをチェックし、Docker ボリュームから適切なプロジェクト ファイルを提供します。要求が適切に処理された後、内部コンテナーはシャットダウンします。
以上のことから、3 つの質問があります。
- これは合理的な戦略ですか?受信する HTTP リクエストごとに新しい Docker コンテナーを起動する必要がありますが、それで問題ないと思います...
- あるコンテナから別のコンテナに HTTP リクエストを渡す最良の方法は何ですか? それとも、外側のコンテナは内側のコンテナからの応答をプロキシする必要がありますか?
- このようなプロジェクトを設定する方法について、誰かがいくつかの指針や例を提供できますか? 私がまだ知らないツールやテクニックがあるかもしれません。
ありがとうございました!
docker - イメージ更新時の Docker ボリューム
私は Docker の初心者で、ボリュームのトピックをよりよく理解しようとしています。ここで私はそれを見ます:
- コンテナーが作成されると、ボリュームが初期化されます。コンテナーの基本イメージに指定されたマウント ポイントのデータが含まれている場合、その既存のデータは、ボリュームの初期化時に新しいボリュームにコピーされます。(これは、ホスト ディレクトリをマウントする場合には適用されないことに注意してください。)
- データ ボリュームは、コンテナ間で共有および再利用できます。
- データ ボリュームへの変更は直接行われます。
- イメージを更新する場合、データ ボリュームへの変更は含まれません。
- コンテナー自体が削除されても、データ ボリュームは保持されます。
- データ ボリュームは、コンテナーのライフ サイクルに関係なく、データを保持するように設計されています。したがって、Docker は、コンテナーを削除するときにボリュームを自動的に削除したり、コンテナーによって参照されなくなったボリュームを「ガベージ コレクション」したりすることはありません。
これを除いて、これは非常に明確です:
- イメージを更新する場合、データ ボリュームへの変更は含まれません。
私はこれをよりよく理解するのに本当に苦労しています。おそらくいくつかの基本的な例で、誰かが私にもっと明確な概要を提供できますか?
ありがとう!
node.js - node_modules の docker-compose ボリュームが空です
私はDockerにかなり慣れていないので、自分のコンピューターにnode_modulesフォルダーをマップしたかった(デバッグ目的で)。
これは私の docker-compose.yml です
Docker for Mac を使用しています。実行するdocker-compose up -d
とすべてうまくいきますが、コンピューターに node_modules フォルダーが作成されますが、空です。コンテナーの bash と ls node_modules に移動すると、すべてのパッケージがそこにありました。
自分のコンピューターでもコンテナーのコンテンツを取得するにはどうすればよいですか?
ありがとうございました
docker - Docker 名前付きボリュームが更新されない
名前付きデータ ボリューム (データ コンテナーではない) の使用方法について混乱しています。
docker 構成ファイルapp_src
を使用してマウントされた名前付きデータ ボリュームがあります。/usr/src/app
ただし、ソース コードを (ローカルで) 変更した後、イメージをビルドしてもボリュームが更新されません。
私はそのようにイメージを構築しています、
docker-compose -f development.yml build
そしてそれを実行しdocker-compose -f development.yml up -d
ます。
ボリュームが変わらないことを確認するために、実行中のコンテナにアタッチしましたが、ソース コードは更新されていません。
これが私のdocker構成ファイルdevelopment.yml
とDockerfile
私のweb
サービスです。バージョン: '2'
そのようにホストをマウントすることで機能させることができました。
Docker 1.11.2を実行しているUbuntu 16.04を使用しています。私の理解は間違っていますか?私はドキュメントを見てみましたが、ボリュームを本当によく説明しているものを見つけることができました.
php - Docker ボリュームが空で、ファイルが取得されていません
Docker をローカルで (そして最終的には本番環境で) セットアップしようとしていますが、現在、ボリュームを正しくマウントすることさえできません。Docker は過去 1 年間急速に変化しており、チュートリアルと git の問題が追いついていないため、明らかに時代遅れです。
私の質問は、docker コンテナー内の index.php ファイルはどこにありますか? ボリューム ディレクティブで指定されているにもかかわらず、表示されないのはなぜですか? nginx 設定で autoindex を有効にしたので、実際にディレクトリを確認して疑いを証明することができました。
私はWindows 10を使用しています
これが私のディレクトリツリーです:
これが私のdocker-composeファイルです:
そして私のDockerfile:
次に実行します:
次に、localhost にアクセスして、nginx のウェルカム ページを取得します。しかし、index.php がありません。何を与える?よろしくお願いします。
docker - minikube を使用した HostPath - Kubernetes
更新: minikubevm に接続し、ホスト ディレクトリがマウントされているのを確認しましたが、そこにファイルがありません。また、そこにファイルを作成すると、ホスト マシンには作成されません。それらの間にリンクがあります
kubernetes でアプリを開発するために、ホスト ディレクトリをマウントしようとしています。
ドキュメントが推奨するように、私は PC で kubernetes クラスターを実行するために minikube を使用しています。目標は、アプリを開発するための docker と kubernetes を使用して開発環境を作成することです。Docker がそこからコード アプリを読み取るように、ローカル ディレクトリをマウントしたいと考えています。しかし、それは仕事ではありません。どんな助けでも本当に感謝します。
私のテストアプリ(server.js):
私の Dockerfile:
私のポッド kubernetes 構成: (pod-configuration.yaml)
私のフォルダは次のとおりです。
hostPath ボリュームなしで Docker イメージを実行すると、もちろん機能しますが、問題は、変更のたびに、開発には実際には強力ではないイメージを再作成する必要があることです。そのため、ボリューム hostPath が必要です。
何か案が ?ローカル ディレクトリのマウントに失敗するのはなぜですか?
助けてくれてありがとう。