【发布时间】:2018-10-01 08:09:54
【问题描述】:
我们公司有一个基于 c++ 的大型代码,我们正在尝试迁移到基于 docker 的微服务基础架构。
我们内部有几个库可以帮助我们处理我们经常在代码中使用的辅助函数和实用程序。我们的想法是为已经安装了这个库的开发人员创建一个基础镜像,并将其用作我们的“基础”镜像。这将使我们受益于我们所有的软件始终使用我们自己库的最新版本。
我的问题与 Docker 的缓存系统与 CI 和外部依赖关系有关。假设我们有一个像这样的 Docker 文件:
FROM ubuntu:latest
# Install External dependencys
RUN apt update && apt install -y\
boost-libs \
etc...
# Copy our software
...
# Build it
...
# Install it
...
如果我们的代码更改,我们可以触发 CI,并且 docker 会理解它可以使用之前创建的缓存图像,直到它复制我们的软件。如果我们的外部依赖之一提供了更新的版本,会发生什么?缓存会自动失效吗?如果我们的任何包收到新版本,我们如何触发 CI 构建?
本质上,我们如何确保始终使用可用于外部依赖项的最新包?
请记住,上面的 Dockerfile 只是一个示例,以说明我们正在尝试使用剧本中的其他技巧,例如我们使用更轻的基础映像(不是 Ubuntu)和多阶段构建来避免生产容器中的开发包。
【问题讨论】:
-
不,缓存的中间层不会自动失效。您有时需要从头显式重建以查看容器依赖项的更新。
标签: docker dependencies apt