避免不断重建 docker 图像
Avoid contantly rebuild docker image
我正在使用 Docker 构建应用程序。我的 Docker 文件如下所示:
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"]
我的项目结构:
.
├── Dockerfile
├── requirements.txt
├── run
└── src
├── stuff
在要求中,我输入了plotly
、pytest
和python-igraph
。问题是,python-igraph
卡在这部分
Running setup.py bdist_wheel for python-igraph: started
Running setup.py bdist_wheel for python-igraph: still running...
花了相当长的时间,但最终它提取了数据并构建了图像。但是,每次都重建项目这么长时间是不可接受的。
以某种方式提取不相互依赖的模块的正确方法是什么?
当我写最后一句话时,我明白了是怎么回事。每次我重建应用程序时,COPY . /app
都是 "readding" 个新文件,并且由于 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"]
不需要每次下载python-igraph
。无论如何我都会把它留在这里。
我正在使用 Docker 构建应用程序。我的 Docker 文件如下所示:
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"]
我的项目结构:
.
├── Dockerfile
├── requirements.txt
├── run
└── src
├── stuff
在要求中,我输入了plotly
、pytest
和python-igraph
。问题是,python-igraph
卡在这部分
Running setup.py bdist_wheel for python-igraph: started
Running setup.py bdist_wheel for python-igraph: still running...
花了相当长的时间,但最终它提取了数据并构建了图像。但是,每次都重建项目这么长时间是不可接受的。
以某种方式提取不相互依赖的模块的正确方法是什么?
当我写最后一句话时,我明白了是怎么回事。每次我重建应用程序时,COPY . /app
都是 "readding" 个新文件,并且由于 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"]
不需要每次下载python-igraph
。无论如何我都会把它留在这里。