防止docker在更改代码后从头开始构build映像

docker工人新手,试图在docker集装箱中发展; 我有一个问题,每次我做一个代码的单行更改,并尝试重新运行容器,docker将从头开始重build图像,这需要很长的时间; 我应该如何正确设置项目,以便充分利用caching ? 很确定,无需重新安装所有的apt-getpip install (每当我对源代码进行一些修改的时候,我正在用python开发)。 任何人都有任何想法我想念。 感谢任何帮助。

我目前的docker文件:

 FROM tiangolo/uwsgi-nginx-flask:python3.6 # Copy the current directory contents into the container at /app ADD ./app /app # Run python's package manager and install the flask package RUN apt-get update -y \ && apt-get -y install default-jre \ && apt-get install -y \ build-essential \ gfortran \ libblas-dev \ liblapack-dev \ libxft-dev \ && rm -rf /var/lib/apt/lists/* WORKDIR /app ADD ./requirements.txt /app/requirements.txt RUN pip3 install -r requirements.txt 

一旦Dockerfile中的caching中断,下面的所有行都将需要重build,因为它们不再有caching命中。 高速cachingsearch将查找现有的先前层和相同的命令(或类似于COPY )以重新使用高速caching。 如果两者不匹配,那么你有一个caching未命中,它执行构build步骤。 对于你的情况,你只需要重新sorting你的行,以确保经常变化的部分是在最后,而不是文件的开始:

 FROM tiangolo/uwsgi-nginx-flask:python3.6 # Run python's package manager and install the flask package RUN apt-get update -y \ && apt-get -y install default-jre \ && apt-get install -y \ build-essential \ gfortran \ libblas-dev \ liblapack-dev \ libxft-dev \ && rm -rf /var/lib/apt/lists/* WORKDIR /app COPY requirements.txt /app/requirements.txt RUN pip3 install -r requirements.txt # Copy the current directory contents into the container at /app COPY app /app 

我也修改了你的ADD行到COPY因为你不需要ADD提供的额外function。

在开发过程中,我build议将应用程序作为容器安装在容器中,以便在每次更改代码时不需要重新构build图像。 您可以将COPY app /app保留在Dockerfile中,并且卷挂载将简单地覆盖该目录,从而在该位置隐藏图像中的任何内容。 你只需要重新启动你的容器来获取你的修改。 一旦完成,构build将创build一个与您的开发环境看起来相同的图像。