gpt4 book ai didi

docker - 在 docker 内部构建时使用 ccache

转载 作者:IT老高 更新时间:2023-10-28 12:46:17 26 4
gpt4 key购买 nike

我正在努力将 C++ 项目的构建移动到 docker 镜像中。该图像将由 Jenkins 作业构建和推送。在使用 docker 之前,我大量使用 ccache 来加速我在 Jenkins 上的构建,尤其是在几乎没有变化的构建的情况下。 docker 的问题是构建现在运行在一个隔离的环境中,所以我不能再从 ccache 中受益。有没有办法在临时容器内部构建同时仍然利用 ccache?

最佳答案

您仍然可以将 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:

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

此时你可以检查缓存,它会如预期的那样为空:

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

数据量会持续存在,因此即使容器终止后,缓存仍然存在。装载卷(并指定 -e ENV 变量)的 future 构建将使用缓存。

然后创建一个简单的应用程序,运行它,然后再次检查缓存:

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

您可以看到缓存现在已填充,因此进一步构建将看到性能改进。

数据量会持续存在,因此即使容器终止后,缓存仍然存在。装载卷的 future 构建(并指定 -e ENV 变量)将使用缓存。

这篇博文很好地解释了它:

Using Ccache with Docker

关于docker - 在 docker 内部构建时使用 ccache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39650056/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com