当前位置:首页 > 科技  > 知识百科

Docker使用缓存编译 Qt

来源: 责编: 时间:2023-08-07 16:30:41 340观看
导读 Docker 在使用层进行缓存方面做得很好。每个命令(例如,RUN、ADD 等)都会生成一个层,Docker 会在未来的构建中重用该层,除非发生某些变化。与往常一样,这个过程也有例外,但一般来说

Docker 在使用层进行缓存方面做得很好。每个命令(例如,RUN、ADD 等)都会生成一个层,Docker 会在未来的构建中重用该层,除非发生某些变化。与往常一样,这个过程也有例外,但一般来说这是正确的。另一种类型的缓存是针对容器内的特定操作(例如编译源代码)进行缓存。SJ628资讯网——每日最新资讯28at.com

在 Screenly,我们在 Docker 容器内创建了一个 Qt 构建环境。我们创建此 Qt 构建是为了确保构建过程可重现并易于在开发人员之间共享。由于 Qt 编译过程需要很长时间,我们利用ccache来加速我们的 Qt 编译。实施 ccache 需要从 Docker 环境外部卷安装文件夹。SJ628资讯网——每日最新资讯28at.com

如果您是该项目的唯一开发人员,则上述步骤很有效。如果您希望能够在团队中共享缓存,会发生什么情况?SJ628资讯网——每日最新资讯28at.com

有几种方法可以在 Docker 中实现这种缓存方式。SJ628资讯网——每日最新资讯28at.com

建立共享缓存的最简单方法是按照我们在上一篇文章中所做的操作。我们使用磁盘缓存以及一些简洁的功能来加速 BuildKit 中的缓存。然后我们压缩缓存文件并将它们分发给团队成员。这个过程不是很优雅,但它完成了工作。SJ628资讯网——每日最新资讯28at.com

如果我们想进一步自动化该过程,我们可以将检索缓存作为构建过程的一部分。这方面的一个例子可能是这样的:SJ628资讯网——每日最新资讯28at.com

RUN curl -o /tmp/build-cache.tgz https://some-domain.com/build-cache.tgz && /SJ628资讯网——每日最新资讯28at.com

tar xfz /tmp/build-cache.tgz -C /tmp && /SJ628资讯网——每日最新资讯28at.com

rm /tmp/build-cache.tgz
上面的过程很简洁,但这确实意味着有人需要定期上传构建缓存以保持缓存文件最新。此外,您需要在某个地方存储文件(例如 S3)。SJ628资讯网——每日最新资讯28at.com

如果我们可以避免手动任务并使用原生 Docker 技术来做同样的事情,那就太好了,对吧?事实证明,我们可以使用 Docker 来改进流程。我们只需要发挥我们的想象力。SJ628资讯网——每日最新资讯28at.com

正如我们在上一篇文章中展示的那样,我们可以使用多阶段构建在不同的 docker 镜像之间复制数据。如果我们将缓存移动到专用的 Docker 映像会怎样?然后我们可以将这个镜像推送到 Docker Hub 并将其拉入构建过程。SJ628资讯网——每日最新资讯28at.com

这个过程很简单。首先在 Docker Hub 中创建两个不同的图像。打电话给他们screenly/build-cache和screenly/build-env。在上一篇文章的基础上,我们使用这个Dockerfile作为基础screenly/build-env。SJ628资讯网——每日最新资讯28at.com

在 Dockerfile 中,我们将环境变量设置CCACHE_DIR为/src/ccache. 这一步告诉 ccache 缓存驻留在/src/ccache. 在上一篇文章中,该步骤只是将卷装入系统。但是,在这种情况下,我们想要更改此步骤,以便缓存位于 之外/src,因为这用于批量安装代码库,例如/usr/ccache.SJ628资讯网——每日最新资讯28at.com

我们现在可以启动容器:SJ628资讯网——每日最新资讯28at.com

$ docker run --rm -t /
       -v ~/tmp/qt-src:/src /
       -v ~/tmp/qt-build:/build /
       -v ~/tmp/ccache:/usr/ccache /
       screenly-build-env
完成编译后,您现在可以构建并推送我们的缓存映像。最终的 Dockerfile 将如下所示:SJ628资讯网——每日最新资讯28at.com

FROM scratchSJ628资讯网——每日最新资讯28at.com

COPY ccache /ccache
要构建此映像,请使用以下代码:SJ628资讯网——每日最新资讯28at.com

$ cd ~/tmp
       $ docker build /
       -f /path/to/Dockerfile /
       -t screenly/build-cache
       $ docker push screenly/build-cache
最后,您现在可以将这一层包含在screenly/build-env. 添加行:SJ628资讯网——每日最新资讯28at.com

COPY --from=screenly/build-cache /ccache /usr/ccache
下次重建screenly/build-env时,Docker 会自动拉下缓存。此外,您只需在刷新缓存时添加卷挂载。 SJ628资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-119-2502-0.htmlDocker使用缓存编译 Qt

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 使用Docker多阶段多平台编译Qt

下一篇: Gartner指出云战略制定过程中的十个常见错误

标签:
  • 热门焦点
  • Java NIO内存映射文件:提高文件读写效率的优秀实践!

    Java的NIO库提供了内存映射文件的支持,它可以将文件映射到内存中,从而可以更快地读取和写入文件数据。本文将对Java内存映射文件进行详细的介绍和演示。内存映射文件概述内存
  • 之家push系统迭代之路

    前言在这个信息爆炸的互联网时代,能够及时准确获取信息是当今社会要解决的关键问题之一。随着之家用户体量和内容规模的不断增大,传统的靠"主动拉"获取信息的方式已不能满足用
  • 年轻人的“职场羞耻感”,无处不在

    作者:冯晓亭 陶 淘 李 欣 张 琳 马舒叶来源:燃次元“人在职场,应该选择什么样的着装?”近日,在网络上,一个与着装相关的帖子引发关注,在该帖子里,一位在高级写字楼亚洲金
  • 2纳米决战2025

    集微网报道 从三强争霸到四雄逐鹿,2nm的厮杀声已然隐约传来。无论是老牌劲旅台积电、三星,还是誓言重回先进制程领先地位的英特尔,甚至初成立不久的新
  • iQOO 11S评测:行业唯一的200W标准版旗舰

    【Techweb评测】去年底,iQOO推出了“电竞旗舰”iQOO 11系列,作为一款性能强机,该机不仅全球首发2K 144Hz E6全感屏,搭载了第二代骁龙8平台及144Hz电竞
  • 首发天玑9200+ iQOO Neo8系列发布首销售价2299元起

    2023年5月23日晚,iQOO Neo8系列正式发布。其中,Neo系列首款Pro之作——iQOO Neo8 Pro强悍登场,限时售价3099元起;价位段最强性能手机iQOO Neo8同期上市
  • iQOO Neo8系列新品发布会

    旗舰双芯 更强更Pro
  • 联想小新Pad Pro 12.6将要推出,搭载高通骁龙 870 处理器

    联想小新Pad Pro 12.6将于秋季新品会上推出,官方按照惯例直接在发布会前给出了机型的所有参数。联想小新 Pad Pro 12.6 将搭载高通骁龙 870 处理器,重量为 5
  • 荣耀Magic4 至臻版 首创智慧隐私通话 强劲影音系统

    2022年第一季度临近尾声,在该季度内,许多品牌陆续发布自己的最新产品,让大家从全新的角度来了解当今的手机技术。手机是电子设备中,更新迭代十分迅速的一款产品,基
Top