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

标签 docker

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

因此,在构建之后,我正在执行以下操作:
docker create --name=ccache LAST_IMAGE然后使用docker cp复制/root/.ccache目录-将其压缩,然后使用ADD命令在重新构建时将tar重新插入到下一个图像中。

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

当我调用docker build时,我传入一个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生成时间产生了很大影响-但我想知道是否有更好的方法。到目前为止,这是我想出的最好的。

最佳答案

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

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

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

挂载/root/.ccache卷后,写入ccache的所有数据将在以后的运行中自动可用。您可以随时运行docker volume rm ccache清除缓存并强制重新构建。

关于docker - 自反docker镜像构建的健全性检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56599165/

相关文章:

apache - Docker 消息:由于服务器/代理的响应不正确,自动禁用 Acquire::http::Pipeline-Depth

docker - Docker:-在Postgresql Docker容器中创建数据库

python - 运行docker镜像提供-无法找到镜像错误

Gitlab 代理 SSL (Docker) 证书验证失败

docker - 我可以向Docker容器添加新的环境变量吗

ssl - 是否可以为不安全的 docker 注册表提供 CA 签名证书,以便客户端自动信任它?

docker - 无法从前端解析 docker compose 服务名称

python - Django 和 docker : outputting information to console

docker - 创建一个 “Best-effort” pod,其oom得分不是1000,而是-999

docker - "Failed to start ' npm远程访问页面时出现'"错误信息