避免不断重建Docker映像

Bar*_*iak 0 python layer igraph docker plotly

我正在使用Docker构建应用程序。我的Dockerfile看起来像这样:

FROM python:3.7.0
WORKDIR /app
COPY . /app
RUN apt-get -y update && apt-get -y install apt-utils build-essential libxml2-dev zlib1g-dev python-dev python-pip pkg-config libffi-dev libcairo-dev
RUN pip install -r requirements.txt
CMD ["./run"]
Run Code Online (Sandbox Code Playgroud)

我的项目结构:

.
??? Dockerfile
??? requirements.txt
??? run
??? src
    ??? stuff
Run Code Online (Sandbox Code Playgroud)

在要求,我把plotlypytestpython-igraph。问题是,python-igraph卡在这部分上

Running setup.py bdist_wheel for python-igraph: started
Running setup.py bdist_wheel for python-igraph: still running...
Run Code Online (Sandbox Code Playgroud)

在相当长的一段时间内,但最终它会拉取数据并生成图像。但是,如此长时间每次重建项目都是不可接受的。

提取彼此不依赖的模块的正确方法是什么?

Bar*_*iak 5

当我写最后一句话时,我知道发生了什么。每次我重建应用程序时,COPY . /app都是在“读取”新文件,并且由于docker层的缘故,当第一层发生更改时,所有下一个都必须重建。现在,我的Dockerfile看起来像这样:

FROM python:3.7.0
RUN apt-get -y update && apt-get -y install apt-utils build-essential libxml2-dev zlib1g-dev python-dev python-pip pkg-config libffi-dev libcairo-dev
WORKDIR /app
COPY requirements.txt /app
RUN pip install -r requirements.txt
COPY . /app
CMD ["./run"]
Run Code Online (Sandbox Code Playgroud)

python-igraph每次下载的需求都消失了。无论如何,我要离开这里。