我正在使用docker编译一个相当慢的C++进程。构建我的软件大约需要3个小时。为了加快速度,我将ccache添加到了混搭中。
因此,在构建之后,我执行了以下操作:
docker create --name=ccache LAST_IMAGE然后使用docker cp复制出/root/.ccache目录-压缩它,然后使用ADD命令在重新构建它时将它重新插入到下一个映像中。
我只是切换到了下面的方法-因为它似乎占用了更少的驱动器中间空间:
当我调用docker build时,我传入了一个构建参数
77 │ - DOCKER_BUILDKIT=1 docker build --force-rm
78 │ --file devops/Dockerfile.buildAfsim
79 │ --build-arg GIT_COMMIT=${CI_COMMIT_SHA}
80 │ --build-arg PARENT_IMAGE=$DOCKER_REGISTRY$PARENT_IMAGE_NAME
81 │ --build-arg LAST_BUILD_IMAGE=$DOCKER_REGISTRY$AFSIM_BUILD_IMAGE_NAME
82 │ --tag $DOCKER_REGISTRY$AFSIM_BUILD_IMAGE_NAME .这里的关键是我传入了两次图像本身:
--build-arg LAST_BUILD_IMAGE=$DOCKER_REGISTRY$AFSIM_BUILD_IMAGE_NAME
--tag $DOCKER_REGISTRY$AFSIM_BUILD_IMAGE_NAME这反过来将告诉docker构建过程拉出最后一个映像-将cmake和cache目录复制到当前docker上下文中
在我的docker文件中,我有:
ARG LAST_BUILD_IMAGE
FROM ${LAST_BUILD_IMAGE} as last_build
# Pass in the base build image
ARG PARENT_IMAGE
FROM ${PARENT_IMAGE}
# Copy the ccache and cmake files from the previous run in order to speed up build speeds
# This will cause issues - if we dont actualy have a last build saved somewhere but we'll deal
# with that when we get to it.
copy --from=last_build /devel/software/build /devel/software/build
copy --from=last_build /root/.ccache /root/.ccache以前有人做过这样的事情吗?它确实对我的ci构建时间产生了很大的影响-但我想知道是否有更好的方法。到目前为止,这是我想出的最好的方法。
发布于 2019-06-14 21:33:23
您可以将缓存目录保存在卷中。以如下方式运行构建容器:
docker run -v ccache:/root/.ccache ...注意,左边没有绝对路径,我们只有ccache。这会创建一个命名卷,该卷不会保存在主机系统上的任何特定目录中。它只能通过名字来访问。
在挂载ccache卷时,写入/root/.ccache的任何数据都将在将来的运行中自动可用。在任何时候,您都可以运行docker volume rm ccache来清空缓存并强制执行新的构建。
https://stackoverflow.com/questions/56599165
复制相似问题