Docker Multi-Stage build 的 intermediate image 留存問題

·

1 min read

Docker 在版本 17.05 後,新推出了 multi-stage build 的功能,主要目的是讓最終的 docker image 盡可能地保持乾淨,使用最少的儲存空間,只把最為必要的 artifact 放到最終要執行使用的 docker image 上,建置和打包時產生的不必要檔案則留存在中繼 image 上。

但用 multi-stage build 會讓 intermediate image 留在系統中,不會在 build 完成後自動清除掉,以一個有兩個 stage 的 Dockerfile ,第一個 stage 做下載/編譯 dependency 套件及編譯主要套件,第二個 stage 只把第一個 stage 的 artifact copy 進來,完成後會留存一個 : 的 image,如下:

% docker images -a
REPOSITORY       TAG        IMAGE ID       CREATED        SIZE
<none>           <none>     37d196fa13cf   52 seconds ago 9.48MB
sslscan          2.0.2      86b1dc996113   52 seconds ago 9.48MB

詳細的問題和討論可以參考 GitHub 上的兩條 issue:

目前看起來是沒有要處理或是提供 flag 機制去控制是否要把這個 intermediate image 留存在系統中。

參考文章: