python - 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
解决方案
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 总是向互联网询问可用的软件包。
推荐阅读
- redux - 在不使用 bindActionCreaters 的情况下更改 redux 状态
- scala - 如何使用 junit 在 scala 中执行 IOException.class?
- mysql - 查询 sql 以与 python 一起使用
- spring - spring-ws .wsdl 不包含 ObjectFactory.class 或 jaxb.index
- c++ - 有没有办法在编译时获取作用域类名?
- c# - 可重用的非捕获组
- android - SoundPool 内存不足?
- flutter - 设置 Flutter bottomNavigationBar 不活动
- python - 使用 Python-Xarray 重新网格化坐标
- javascript - ubuntu 18.04-ember:找不到命令