自反docker映像构建的健全性检查?

时间:2019-06-14 13:25:40

标签: docker

我正在使用docker编译一个相当慢的C ++进程。构建我的软件大约需要3个小时。为了加快处理速度,我将ccache添加到了组合中。

因此,在构建之后,我正在执行以下操作:

docker create --name=ccache LAST_IMAGE 然后使用docker cp复制出/root/.ccache目录-将其焦油,然后使用ADD命令将tar重新插入到下一个映像中。

我刚刚切换到以下方法-因为它似乎占用了驱动器上更少的中间空间:

当我调用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构建过程提取最后一个图像-将cmakecache目录复制到当前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生成时间有很大的影响-但我想知道是否有更好的方法。到目前为止,这是我想出的最好的。

1 个答案:

答案 0 :(得分:1)

您可以将缓存目录保存在卷中。将构建容器运行为:

docker run -v ccache:/root/.ccache ...

请注意,除了左侧没有绝对路径外,我们只有ccache。这将创建一个没有保存在主机系统上任何特定目录中的命名卷。只能按名称访问。

在装入/root/.ccache卷后,任何写入ccache的数据将在以后的运行中自动提供。您随时可以运行docker volume rm ccache清除缓存并强制重新构建。