問題タブ [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 での永続的なコンテナー データのさまざまな戦略
基本的に、docker コンテナーでデータを管理する 4 つの異なる方法を見てきました。
- コンテナ内で「エフェメラル」ボリュームを使用 - コンテナが削除されるとデータが削除されます
- ホスト上のコンテナーを Docker コンテナー内のボリュームにマッピングする - テスト目的でのみ推奨
- 「データ コンテナ」を作成し、そのコンテナ ボリュームを他のコンテナにマッピングする
- Docker「データボリューム」を作成し、それを他のコンテナにマッピングする
私が理解している限り、代替案 3 と 4 が最も推奨されるアプローチですが、さまざまなアプローチの利点/欠点は何ですか?
私が意味することを説明するためのいくつかのコード:
データ コンテナー
データ量
ここで説明: https://docs.docker.com/engine/reference/commandline/volume_create/
さまざまな「docker volume」コマンドを使用してボリュームを維持する
使用事例
jira、bitbucket、jenkins、sonar、nexus を docker コンテナーとして実行し、アプリケーション データを可能な限りシンプルかつ信頼性の高い方法でバックアップできます :-)
nginx - ビルドを共有する名前付き Docker ボリュームが更新されない
私が働いている会社の開発担当者から、Docker で少し違うことをするように頼まれましたが、私も慣れています。目標は、次の責任を持つ 2 つのコンテナーを持つことです。
コンテナー A: フロントエンドの反応アプリケーションをビルドし、バンドルを というディレクトリに配置するノード コンテナーapp/dist/
。これが完了すると、コンテナーは実行を停止します。
コンテナー B: から静的ファイルをサーバーする alpine nginx コンテナー/usr/share/nginx/html/app
。
<Container A>/app/dist
コンテナ A に構築されたファイルは、 にマウントされるボリュームを使用してコンテナ B に提供され<Container B>/usr/share/nginx/html/app
ます。
パブリックにアクセス可能なポートと nginx コンテナーの間に HAProxy レイヤーがあることに注意してくださいapp
。
上記のタスクは、次のような docker compose ファイルを使用して編成されています。
これは現在、docker 構成ファイルが初めてビルドされるときにのみ機能します。ボリュームが作成されると、ボリューム内のファイルは更新されなくなります。名前付きボリュームは確立後に更新できないと読みましたが、確認できません。実行を伴う回避策を見つけましたdocker-compose rm --force && docker volume webapp_build rm
が、CI サービスが非常に遅くなるため、可能であればキャッシュされたコンテナーを強制終了する必要はありません。
何か明確にできることがあれば教えてください (ここには多くの可動部分があることを理解しています)。私は docker 2 ベータ版も使用していますが、それによって私がここで行ったことをどのように変更できるかわかりません。
docker - ファイルを docker コンテナーからホストに公開する
django アプリを保持する docker コンテナーがあります。静的ファイルが作成され、静的フォルダーにコピーされます。
コンテナー フォルダーの階層:
Docker イメージをビルドする前に./manage.py collectstatic
、静的ファイルが/var/django/static
フォルダーにあるように実行します。アプリを公開して静的ファイルを提供するために、ホストに nginx があります。問題は、ホスト上の静的フォルダーと指定されたフォルダーの間でボリュームを作成すると、docker コンテナーを実行すると、/var/django/static
コンテナー内のフォルダーが削除されることです (削除ではなくマウントされます)。これを克服する方法はありますか?のようにボリュームを設定しますが、ドッカーに現在のファイルも取得するように指示しますか?
go - Docker エラー: ボリュームがメモリ内に存在しないドライバーを指定しています
ドキュメントによると、Docker ボリューム用の「インメモリ」ドライバーがあります: https://docs.docker.com/registry/storage-drivers/inmemory/
純粋にテスト目的であれば、メモリ内ストレージ ドライバを使用できます。このドライバーは、オブジェクト ストレージにローカル メモリを使用する storagedriver.StorageDriver インターフェイスの実装です。
しかし、次のように使用しようとすると:
次の出力が得られます。
何か不足していますか、それとも「インメモリ」ドライバーを何らかの方法でインストールする必要がありますか?
caching - docker ビルドのパッケージ マネージャーのダウンロードをキャッシュする方法は?
ホストから実行するcomposer install
と、ローカルの composer キャッシュにヒットします。
ただし、Dockerfile にコンテナーを構築する場合:
私はすべてのものをダウンロードします。
それは当然のことですが、私はそれを避けたいと思っています。再構築した場合でも、すべてを再度ダウンロードします。
他の docker プロジェクトでも再共有できる、composer 用のユニバーサル キャッシュが必要です。
これを調べたところ、Dockerfile でボリュームを定義する方法が見つかりました。
私はそれを自分のファイルに追加しDockerfile
、ファイルを一度だけダウンロードし、その後キャッシュにヒットすることを期待していました.
それでも、たとえばフラグをcomposer
削除してを再実行すると、ビルド時にキャッシュにヒットすることが予想されましたが、それでもベンダーを再度ダウンロードします。-o
docker build .
docker コンテナ内にデータキャッシュを持つために、ボリュームはどのように機能するはずですか?
docker - 共有フォルダにデータが含まれていません
でボリュームを作成しました
ここで、このボリュームを 2 つのコンテナーの共有フォルダーとして使用したいと考えています。したがって、私の docker-compose.yml は次のようになります。
app1
ファイルが書き込まれていることがわかりますが、調べて/some/folder
みると空です。app2
/another/folder
私は何を間違っていますか?
docker - Docker 共有ボリュームの作成
2 つのホスト間で共有される Docker ボリュームを作成しようとしています。2 つのホスト A と B があるとします。次のコマンドを使用してホスト A にボリュームを作成すると、次のようになります。
ボリュームを検査した後の結果は次のとおりです。
私の質問は: ボリュームのマウントポイント ディレクトリがディレクトリ /tmp/dir ではなく、デフォルトの docker ボリュームの場所を指しているのはなぜですか? ディレクトリ ホスト B/tmp/dir のデータが共有可能になるとどのように考えることができますか?
前もって感謝します!
docker - Docker コンテナーのデータ ボリュームをバージョン管理する方法は?
Docker コンテナーで Jenkins を実行したいのですが、このスレッドの理解によると、コンテナーのデータを管理するためのベスト プラクティスは、Docker の新しいボリューム APIを使用することです (データを失うことなく Jenkins コンテナーを更新できます)。
どういうわけかデータが失われるのではないかと心配しているので、Git などのバージョン管理システムを使用して保存したいと考えています。そうすれば、チームのビルドで行われた変更を追跡し、誰かが混乱した場合に物事を再び機能させることができます.
私には明らかでない問題は、データをバージョン管理する方法ですか? また、復元されたデータを使用してコンテナーをフラッシュで実行できるようにしたい (単純なスクリプト/コマンド)
バージョン管理システムはここでは問題ではないことに注意してください。変更を追跡し、何かが壊れた場合に「システム」をすばやく復元できるように、コンテナーのデータ (ボリューム) を操作するためのベスト プラクティスを探しています。