2016-02-10 8 views
5

コンテキストホストfsまたはメモリに格納されたコンテナを実行しているときのドッキング・アーティファクトはありますか?

私は(それを再計算を回避するために、特定のフラグメントのHTML結果を格納)、生産上のページ断片のキャッシュをやって、レールのアプリケーションを作成。

これを行う通常の方法は、フラグメントをmemcacheまたはredisに保存することです。レールにオプションを格納するデフォルトのキャッシュは、依存関係を持たない(memcacheやredisを設定する必要がない)利点があるため、FSキャッシュ(ファイルとしてのフラグメントの格納)を使用することです。ただし、Memcacheや適切に設定されたredisを使用して自動的にパージされる古いキーに頼ることはできますが、メモリキャッシュよりも速度が遅く、キャッシュを手動でクリーンアップする必要があるため、あまり一般的ではありません。しばらくの間、ドッキングウィンドウを使用した後

質問

、私は以前のキャッシュファイルをパージすることはもはや問題ではありませんことを実現:デプロイに、新しいコンテナは、自動的に以前のすべてのキャッシュファイルをドロップし、走っています。おそらくメモリーを使用するよりも時間がかかりますが、これは構成を必要としないという利点があります。クイック・サイド・プロジェクトをブートストラップするときは非常にクールです。

しかし、私は不思議です:実際にはfsで書いているコンテナに書いているのですか、それともRAMに書いていますか?これは懸念しています。これは、特にこれを実行する同じサーバー上の多くのプロジェクトで、これが非常に迅速にRAMを飽和させる可能性があるためです。

答えて

3

ここでのケースは、Dockerがプロセスが行っていることを何でもしているということです。 Dockerは従来のVMではなく、プロセスを実行する単なるファンシーな方法です。あなたはそれを知っているかもしれませんが、私は自分の答えの基盤を設定するために繰り返し言います。ドッカーはあなたのプロセスが望んでいることに従います。プロセスがディスク上のファイルシステムキャッシュを使用し、そのプロセスがキャッシュに書き込むように指定した場合、Dockerはその結果をメモリに保存しません。ディスク上のキャッシュに書き込みます。一時的なコンテナには、ここで言及したような利点があります。新しいコンテナを回転させるとファイルキャッシュが消去されます。

プロセスがディスクに書き込むとき、Dockerは特別なUnionFS(aufsやbtrfsなどのいくつかの異なるストレージバックエンドの1つを使用できます)に書き込んでいます。 Dockerはこの「特別な」ファイルシステムを次の2つの理由で使用します。同じベースイメージからのファイルの重複を避け、ベースイメージの共有レイヤーからプロセス固有のファイルシステム変更を分離する。メカニズムの特定の用語はcopy-on-writeです。要点は、Dockerがファイルシステムに書き込んでいると言ったときに、Dockerがやっていることです。メモリに書き込むものではなく、ファイルシステムに書き込まれているように動作します。実際にディスクに書き込んでいます。ストレージドライバの主題は深く複雑なものですが、一般的なDockerの全般的なドキュメントの場合のように、このようなもののためのdocumentationはよく書かれ、正確です。あなたのプロセスを動かす魔法はありませんが、安心してください。 Dockerは自分が行っていることをやっていると思っても安全です。

+0

パーフェクト、ありがとう:) –

+1

これを読んで、キャッシングのためにコンテナfsを使用することに関心がある人には:答えにリンクされているドキュメントには、初めてユニオンファイルシステムにファイルを書き込むときにパフォーマンスがあるという記述があります。これはシステムをキャッシュする際の問題かもしれませんが、私はそれがどのように動作するかを試してみます。 –

+0

私はあなたの結果にとても興味があります。結果が得られたら、ここに投稿するか、おそらくあなたのブログや何かへのリンクをお願いしますか? – L0j1k

関連する問題