Docker构建复用缓存不更新pip与conan最新版本的最佳处理方案是什么
容器镜像构建拉取最新pip/conan的最佳实践
方案1:单次强制跳过指定层缓存
如果仅偶尔需要拉取最新版本,可单独跳过对应安装层的缓存,其余层仍复用缓存,兼顾更新需求和构建效率,该方案同时兼容docker和buildah,需启用BuildKit(Docker 18.09+默认开启)。
首先给对应安装层加可识别的标记注释:
# pip-conan-install RUN /bin/bash -c "python3 -m pip install --upgrade pip && python3 -m pip install conan"
构建时执行对应命令即可跳过该层缓存:
# Docker 构建命令 docker build --no-cache-filter "pip-conan-install" . # Buildah 构建命令 buildah build --no-cache-filter "pip-conan-install" .
方案2:自动检测新版本触发缓存失效
要实现自动检测版本更新、自动决定是否复用缓存的需求,可通过动态构建参数实现:
- 先在Dockerfile中声明两个无默认值的构建参数,参数值变化会触发后续层缓存失效
ARG PIP_LATEST_VERSION ARG CONAN_LATEST_VERSION RUN /bin/bash -c "python3 -m pip install --upgrade pip && python3 -m pip install conan"
- 构建前先查询两个包的最新版本号,作为参数传入构建流程,只要任意包有新版本发布,参数值变化就会自动重新执行安装命令:
# 查询PyPI上最新版本号 PIP_VER=$(curl -s https://pypi.org/pypi/pip/json | jq -r '.info.version') CONAN_VER=$(curl -s https://pypi.org/pypi/conan/json | jq -r '.info.version') # Docker 构建 docker build --build-arg PIP_LATEST_VERSION=$PIP_VER --build-arg CONAN_LATEST_VERSION=$CONAN_VER . # Buildah 构建 buildah build --build-arg PIP_LATEST_VERSION=$PIP_VER --build-arg CONAN_LATEST_VERSION=$CONAN_VER .
方案3:固定版本主动管控(生产环境推荐)
不指定版本拉取最新版存在兼容性风险,生产环境更建议固定安装版本,定期巡检版本更新,完成兼容性测试后再主动修改Dockerfile中的版本号:
RUN /bin/bash -c "python3 -m pip install --upgrade pip==24.0 && python3 -m pip install conan==2.22.0"
该方案版本变更完全可控,不会出现静默使用旧版本、或自动升级到有兼容性问题的新版本的故障。
内容的提问来源于stack exchange,提问作者無名前
相关产品推荐
相关产品推荐

