Python 3.x 在dockerfile中缓存PIP包
我正在尝试为我的python项目设置docker,该项目使用虚拟环境,并在Python 3.x 在dockerfile中缓存PIP包,python-3.x,docker,pip,docker-compose,dockerfile,Python 3.x,Docker,Pip,Docker Compose,Dockerfile,我正在尝试为我的python项目设置docker,该项目使用虚拟环境,并在requirements.txt中定义了一些依赖项 我还安装了docker compose,它使用Dockerfile命令docker compose up--build 我的Dockerfile: FROM ubuntu:16.04 FROM python:3.5 MAINTAINER **** ADD . /core-proejct WORKDIR /core-project RUN pip3 instal
requirements.txt
中定义了一些依赖项
我还安装了docker compose
,它使用Dockerfile
命令docker compose up--build
我的Dockerfile:
FROM ubuntu:16.04
FROM python:3.5
MAINTAINER ****
ADD . /core-proejct
WORKDIR /core-project
RUN pip3 install virtualenv
RUN . /bin/activate
RUN pip install -r requirements.txt
因此,每当我试图构建映像时,它都会从requirements.txt
安装所有pip模块
是否有任何方法可以缓存pip模块并在构建映像时使用缓存版本。首先,dockerfile中ubuntu:16.04的
是多余的,因为单个映像只能有一个上游映像
解决问题的简单方法是在添加项目之前将pip
命令移动到,这样更改项目不会使整个缓存失效
最后,您真的不需要在容器中使用virtualenv,否则您将无法使用它
例如:
ADD代码>将遇到更少的问题我听到过关于在容器中使用virtualenv的各种不同意见。尽管无可争议的是,每个容器在理想情况下都应该有一个单一的用途,但有很多人选择使用virtualenv进一步分离应用程序依赖项和操作系统依赖项,即使在docker容器中也是如此。请注意,当使用COPY而不是docker容器时,这不起作用ADD@VME我的观察并不能证实这一点<代码>复制
工作得相当好,而且更可取,因为它有一个更窄的用例(没有URL源,没有存档解包)。
FROM python:3.5
# MAINTAINER is deprecated. Use LABEL instead.
LABEL maintainer "your info here"
WORKDIR /core-project
ADD ./requirements.txt .
RUN pip install -r requirements.txt
# Add everything else now.
ADD . .