2016-09-22 115 views
3

我正在將C++項目的構建移到Docker鏡像中。這張圖片將由Jenkins的工作建立和推送。在Docker之前,我大量使用ccache來加速我在Jenkins上的構建,特別是在構建幾乎沒有變化的情況下。碼頭工人遇到的麻煩是現在的構建運行在一個孤立的環境中,所以我不能再受益於ccache。在仍然利用ccache的情況下,是否有辦法在短暫的容器內構建內容?在Docker內部構建時使用ccache

回答

4

您仍然可以將ccache與您的構建一起使用。

創建Data Volume允許數據建立使用以下命令/編譯之間仍然存在:

$ docker create -v /mnt/ccache:/ccache --name ccache debian 

然後創建容器「坐騎」上面使用--volumes-from命令行選項創建的數據容器。

$ docker run -e CCACHE_DIR=/ccache --volumes-from ccache -it debian 

現在,您可以在debian容器的外殼,可以安裝所需的應用程序和測試的ccache:

[email protected]:/# apt-get update && apt-get install -y gcc ccache  

現在,在這一點上,你可以檢查緩存,這將是空預期:

[email protected]:/# ccache -s 
cache directory      /ccache 
cache hit (direct)      0 
cache hit (preprocessed)    0 
cache miss        0 
files in cache       0 
cache size        0 Kbytes 
max cache size      1.0 Gbytes 

的數據量將持續存在,因此容器被終止後,也緩存仍然存在。裝入卷的未來版本(並指定-e ENV變量)將使用緩存。

然後創建一個簡單的應用程序,運行它,並再次檢查緩存:

[email protected]:/# cat > foo.c << __EOF__ 
int main(int argc, char **argv) 
{ 
    return 0; 
} 
__EOF__ 

[email protected]:/# PATH=/usr/lib/ccache:$PATH gcc -o foo.o -c foo.c 
[email protected]:/# ccache -s 
cache directory      /ccache 
cache hit (direct)      1 
cache hit (preprocessed)    0 
cache miss        1 
files in cache       2 
cache size        8 Kbytes 
max cache size      1.0 Gbytes 

你可以看到現在已填充緩存,並進一步建立會看到,因爲它的性能改進。

數據量將持續存在,所以即使容器終止後,緩存仍然存在。裝入卷的未來版本(並指定-e ENV變量)將利用緩存。

本博客文章做了解釋它的一個好工作:,我想創建一個形象,我生成的結果

Using Ccache with Docker

+0

麻煩的是(我可能只是誤會)。這種方法似乎讓我在容器中使用ccache,而不是使用docker build命令。 –

+1

您可以使用'RUN'命令將'ccache'添加到您的Dockerfile中,或者使用Docker Compose在'docker-compose build'期間掛載和使用該卷。您還可以使用'docker commit'將容器保存到圖像中。 –

+0

是的,我認爲將上述與「docker commit」結合起來可能是最好的途徑。謝謝。 –