在Docker内部构build时使用ccache

我正在将一个C ++项目的构build移动到一个docker镜像中。 这张图片将由Jenkins的工作build立和推送。 在Docker之前,我大量使用ccache来加速我在Jenkins上的构build,特别是在构build很less变化的情况下。 docker工人的麻烦是现在的构build运行在一个孤立的环境,所以我不能再受益于ccache。 有没有办法在一个短暂的容器内build立,同时仍然利用ccache?

您仍然可以将ccache与您的构build一起使用。

使用以下命令创build数据卷以允许数据在编译/构build之间保持不变:

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

然后使用--volumes-from命令行选项来创build“挂载”上面创build的数据容器的容器。

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

现在你将进入debian容器的shell,并且可以安装所需的应用程序并testingccache:

 root@15306d02505a:/# apt-get update && apt-get install -y gcc ccache 

现在,在这一点上,你可以检查caching,它会像预期的那样是空的:

 root@15306d02505a:/# 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 

数据量将保持不变,所以即使容器终止后,caching仍然存在。 装载卷的未来构build(并指定-e ENVvariables)将利用caching。

然后创build一个简单的应用程序,运行它,并再次检查caching:

 root@15306d02505a:/# cat > foo.c << __EOF__ int main(int argc, char **argv) { return 0; } __EOF__ root@15306d02505a:/# PATH=/usr/lib/ccache:$PATH gcc -o foo.o -c foo.c root@15306d02505a:/# 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 

您可以看到现在已经填充了caching,而进一步构build会因此而改善性能。

数据量将保持不变,所以即使容器终止后,caching仍然存在。 装载卷的未来构build(并指定-e ENVvariables)将利用caching。

这篇博文做了很好的解释:

在Docker中使用Ccache