2016-05-20 12 views
3

私はドッカーを使用して、さまざまなコマンドによって引き起こされるファイルシステムの変更を分析しています。私は単にの関連する行をDockerfileに追加してビルドし、変更内容を確認するためにdocker saveを使用します。残念ながら、私は多くのコマンドを使用していますが、ほとんどの場合1つのレイヤーに複数のレイヤーを入れることができますが、通常は127レイヤーの親レイヤーの極限を超えています。コンテナを回転させずにドッカー画像を取得する

これを処理するには、多くのレイヤーの画像を1つのレイヤーだけの画像に縮小し、残りの新しいレイヤーの親として結果の画像を使用します。これを行う最善の方法は、コンテナを回転させて、docker exportを使用してから、docker importに変更を適用することです。私は、その操作を実行するのにかかる時間を剃る方法を探しています。

コンテナを回転させずに同じことを行う簡単な方法があります(docker saveのレイヤースタックだけでなく、画像の完全に展開されたファイルシステムをエクスポートする)?

答えて

3

どのような方法であっても、完全なコンテナをスクラッシュすることは、常に階層化されたファイルシステムを読み込み、新しいフラットファイルシステムを作成するプロセスになります。これには比較的遅いioが含まれます。

作成:私はあなたが結果は、SSDベースのシステムでは、そのステップ

time container=$(docker create debian) 
time docker export $container | docker import - debian_flat 
time docker rm $container 

を取り除くことによって多くを得ることがわからないので、コンテナの作成

は比較して、非常に軽量であります

real 0m0.050s 
user 0m0.015s 
sys  0m0.010s 

エクスポート/インポート

real 0m8.213s 
user 0m2.867s 
sys  0m0.768s 

you squash selected layersを聞かせて、他のツールがあります

real 0m0.019s 
user 0m0.007s 
sys  0m0.008s 

を削除します。これにより、データの一部を読み書きするだけで済み、時間を節約できます。あなたの要件が完全なイメージをつぶすならば、同じ量のデータを読み書きしているので、これはエクスポート/インポートよりもはるかに速くなるとは思えません。

正式なドッカーのスカッシュ機能をカバーするgithub issueと、supportpull requestsは、ドッカーとビルドのレイヤーを直接スカッシュまたはフラットにします。各リクエストは受け入れられる前にゆっくりと消えていくようです。

関連する問題