【发布时间】:2020-08-26 16:10:41
【问题描述】:
一个应用容器一般由三部分组成:
- 在 Linux 情况下包含核心 POSIX 工具和系统库的基本映像(例如
FROM debian:stable) - 运行时库或帮助工具通常从某种包中安装(例如
RUN apt-get update && apt-get python3-numpy && …——对于基础 python 或 java 等。通常有一个现成的基础容器可供使用,但应用程序可能仍有其他依赖项)。- 同样的问题适用于链接到应用程序的依赖项(例如,由 maven 或 nuget 等引入的外部依赖项)。如果有一个通用的解决方案也能解决这个问题,那就太好了,否则将寻求另一种特定于工具的解决方案。
- 应用程序本身(例如
COPY …/application/ /usr/local/python3.8/dist-packages/application/和设置入口点)。
将进入生产环境的容器通常构建在构建服务器上。现在,当对应用程序进行更改时重建它是显而易见的,以及 CI 服务器的设计目的。
但是前两个组件可能并且经常有针对它们的安全建议文件,当它们出现时,还应该重建映像并将其推送到集成测试,然后要么更新生产环境,要么更新管理员通知尽快触发它。
那么有没有一些方法或工具可以帮助我们设置合适的触发器来在基础容器或其他依赖项有更新时重建容器? Docker 默认是 Debian 基础镜像,但如果它对此有更好的支持,我们会使用另一个发行版。
请注意,只运行docker build --pull --no-cache nightly 不是一个解决方案,因为即使依赖项实际上没有因安装文件的不同时间戳而发生变化,这也会产生一个新容器。并且只运行docker build --pull 也不起作用,因为缓存在那里,但是它只检查Dockerfile 是否已更改并且实际上不检查包列表,或者缓存不存在,因为它正在运行在不同的构建代理上或构建代理被清理,因为它通常应该获得可靠的构建。
它可以使用任何容器构建器,不一定是 docker。
【问题讨论】:
标签: docker kubernetes continuous-integration jib buildah