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

Psi*_*dom 6 docker docker-build

一个码头工人新手,试图在码头工人的容器中发展; 我有一个问题,即每次我对代码进行单行更改并尝试重新运行容器时,docker将从头开始重建图像,这需要很长时间; 我应该如何正确设置项目,以便充分利用缓存?很确定,每当我对源代码进行一些更改时,它都不必重新安装所有apt-getpip installs(顺便说一句,我在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
Run Code Online (Sandbox Code Playgroud)

BMi*_*tch 9

一旦缓存在Dockerfile中中断,则需要重建以下所有行,因为它们不再具有缓存命中.高速缓存搜索查找现有的先前层和相同的命令(或类似a的内容COPY)以重用高速缓存.如果两者都不匹配,那么您有一个缓存未命中并执行构建步骤.对于您的场景,您只需要对行进行重新排序,以确保频繁更改的部分位于文件的末尾而不是文件的开头:

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
Run Code Online (Sandbox Code Playgroud)

我还修改了你的ADD行,COPY因为你不需要提供的额外功能ADD.

在开发过程中,我建议将应用程序作为卷安装在容器中,这样您就不需要为每次代码更改重建映像.您可以将COPY app /appDockerfile 保留在内部,并且卷装置将简单地覆盖目录,隐藏图像中该位置的任何内容.您只需重新启动容器即可获取修改.完成后,构建将创建一个与您的开发环境完全相同的图像.