子标题:
- docker 打包 Python 依赖包,不要每次都重新下载依赖包
- Python 使用 docker 避免每次打包都下载 requirements.txt 中的依赖包
- docker 打包 requirements.txt 变化之后自动下载新的包 python
- docker 判断 requirements.txt 是否发生变化 python
- requirements.txt 变化自动更新 python
如果每次 docker build
都需要重新下载 requirements.txt
中的包,太浪费时间了。同样如果 requirements.txt
变化了却不重新下载包就很蠢!
我们希望可以做到,如果 requirements.txt
文件没有发生变化,就不要重复下载;如果 requirements.txt
文件发生变化,则重新下载! 👀
那解决办法是什么呢?就是利用 docker
自带的镜像缓存机制
使用下面的 dockerfile
就好了:👇
FROM python:3.9-buster
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN (/usr/local/bin/python -m pip install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple) && (pip install -i https://mirrors.aliyun.com/pypi/simple -r requirements.txt)
COPY . /code/
关键是这行:COPY requirements.txt /code/
当 requirements.txt
发生变化的时候(通过文件的 hashcode 判断),COPY
命令就会丢弃之前的 cache
镜像,重新打包,因为 docker
的镜像之间是前后关系,后面的镜像也都会 cache
失效,所以重新执行 RUN (/usr/local/bin/python -m pip install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple) && (pip install -i https://mirrors.aliyun.com/pypi/simple -r requirements.txt)
和 COPY . /code/
但是注意:这个方法做不到增量更新,只能是全量更新,什么意思?就是只要增减一个包,都需要重新下载安装 requirements.txt
中的所有内容!😖😖😖
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。