首页 > 解决方案 > Dockerfile:使用带有 pip install -U pip 的 RUN 语句

问题描述

Dockerfile 最佳实践给出了以下使用建议apt-get update

始终在同一 RUN 语句中将 RUN apt-get update 与 apt-get install 结合使用。

我也应该使用相同的规则pip install -U pip吗?例如,在 Dockerfile 中哪种做法更可取:

# Separate statements
RUN pip install -U pip
RUN pip install opencv-python==4.4.0.46

# Single statement
RUN pip install -U pip && pip install opencv-python==4.4.0.46

标签: pythondockerpip

解决方案


Dockerfile 最佳实践的要点是在创建缓存的同一层中删除缓存。使用pip,这意味着使用该--no-cache-dir选项或在安装后显式删除缓存。

这两个代码片段最终将导致相同的图像大小。但是 docker 也建议尽可能使用更少的层,所以我更喜欢第一种方式(使用一条RUN指令)。

RUN pip install -U --no-cache-dir pip \
    && pip install --no-cache-dir opencv-python==4.4.0.46
RUN pip install -U --no-cache-dir pip
RUN pip install --no-cache-dir opencv-python==4.4.0.46

关于的建议apt-get update && apt-get install ...并不真正适用于pip. Apt 依赖于 下载的一些文件,apt-get update最好的做法是删除这些文件apt-get install。这减少了 Docker 映像的大小。Pip 总是向互联网询问可用的软件包。


推荐阅读