2016-05-20 52 views
3

我使用docker來分析由各種命令引起的對文件系統的更改。我只需在Dockerfile中添加相關的RUN行,然後使用docker save來查看所做的更改。不幸的是,我使用了很多命令,儘管大部分時間我都可以將其中的幾個放入一個圖層,但我通常會超出較低的父層數限制。沒有旋轉容器的Squisher泊塢窗圖像

爲了解決這個問題,我用許多圖層將圖像壓縮成只有一層的圖像,並將結果圖像用作其餘新圖層的父圖像。最好的方法是啓動一個容器,然後使用docker export,然後使用docker import來獲得一個很好的單層更改。我正在尋找方法來削減執行該操作所需的時間。

有沒有簡單的方法來做同樣的事情(導出圖像的完全展開的文件系統,而不僅僅是在docker save中的圖層堆棧)而不旋轉容器?

回答

3

無論採用什麼方法,擠壓一個完整的容器始終是一個閱讀分層文件系統和編寫一個新的平面文件系統的過程,這個系統涉及相對較慢的io。

創建一個容器是極輕的重量相比較,所以我不相信你會擺脫這一步

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

的在基於SSD的系統增益大,導致:

創建

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

導出/導入

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

刪除

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

有跡象表明,讓you squash selected layers其他工具。這可以節省您的時間,因爲您只需要讀取和寫入一部分數據。如果你的要求是壓縮完整的圖像,那麼我不確定這會比導出/導入快得多,因爲你仍然在讀取和寫入相同數量的數據。

有一個github issue來覆蓋官方泊塢窗的壁球功能,pull requestssupport可以在碼頭和建築物中直接壓扁或鋪平層。儘管每個請求在被接受之前似乎都慢慢消失。