面试真题

运维 · 中等 · 金山

Dockerfile中实现编译和运行阶段,如果有一个依赖库不想每次都编译该怎么办

中等 运维 🎤 金山
参考答案
结论:用多阶段构建并将不变依赖库固化到基础镜像或利用层缓存避免重复编译。方案:1.多阶段:第一阶段FROM编译镜像构建依赖库和二进制,第二阶段FROM精简运行镜像COPY产物;2.若依赖库不变,先将其编译成独立基础镜像(如mydeps:1.0),后续Dockerfile FROM mydeps再编应用,跳过库编译;3.利用Docker层缓存:先COPY依赖描述文件(如CMakeLists),RUN安装/编译库,再COPY源码,只要库文件不变则缓存命中;4.使用BuildKit缓存挂载(--mount=type=cache)。
题目整理自公开面经,答案由校招宝自研生成,仅供参考