我在社区里做了一个基本的搜索,找不到合适的答案,所以我在这里问。如果之前有人问我,我很抱歉。
基本上,我正在做一个特定的项目,我们会定期更改代码。因此,我们每次都需要构建docker镜像,因为我们需要从头开始从requirement.txt安装依赖项,每次大约需要10分钟。
如何对docker镜像执行直接更改,以及如何配置入口点(在Docker File中)以反映预先构建的docker镜像中的更改
发布于 2019-06-12 04:37:34
一旦构建了镜像,就不能对其进行编辑。您总是从头开始运行docker build;它总是在干净的环境中运行。
另一方面,Docker缓存构建的镜像。如果您有图像01234567,运行RUN pip install -r requirements.txt,并输出图像2468ace0,那么下次运行docker build时,它将看到相同的源图像和相同的命令,并且跳过所做的工作,直接跳到输出图像。更改的COPY或ADD文件将使缓存在以后的步骤中失效。
所以标准模式是
FROM node:10 # arbitrary choice of language
WORKDIR /app
# Copy in _only_ the requirements and package lock files
COPY package.json yarn.lock ./
# Install dependencies (once)
RUN yarn install
# Copy in the rest of the application and build it
COPY src/ src/
RUN yarn build
# Standard application metadata
EXPOSE 3000
CMD ["yarn", "start"]如果您只更改了src树中的某些内容,docker build将跳到COPY步骤,因为package.json和yarn.lock文件没有更改。
发布于 2021-05-04 18:08:09
在我的例子中,我面对的是同样的情况,经过微小的改变,我一次又一次地构建图像。
我的旧DockerFile
FROM python:3.8.0
WORKDIR /app
# Install system libraries
RUN apt-get update && \
apt-get install -y git && \
apt-get install -y gcc
# Install project dependencies
COPY ./requirements.txt .
RUN pip install --upgrade pip
RUN pip install --no-cache-dir -r requirements.txt --use-deprecated=legacy-resolver
# Don't use terminal buffering, print all to stdout / err right away
ENV PYTHONUNBUFFERED 1
COPY . .所以我所做的,首先像这样创建了一个基础图像文件(避免了最后一行,没有复制我的代码)
FROM python:3.8.0
WORKDIR /app
# Install system libraries
RUN apt-get update && \
apt-get install -y git && \
apt-get install -y gcc
# Install project dependencies
COPY ./requirements.txt .
RUN pip install --upgrade pip
RUN pip install --no-cache-dir -r requirements.txt --use-deprecated=legacy-resolver
# Don't use terminal buffering, print all to stdout / err right away
ENV PYTHONUNBUFFERED 1然后使用以下命令构建此映像
docker build -t my_base_img:latest -f base_dockerfile .然后是最终的文档文件
FROM my_base_img:latest
WORKDIR /app
COPY . .从这个图像开始,我无法启动容器,复制的python代码出现了问题,所以你可以编辑图像/容器代码,来修复容器中的问题,通过这种方式,我避免了一次又一次构建图像的任务。
当我的代码被修复后,我将更改从容器复制到我的代码库,最后,我创建了最终的图像。
https://stackoverflow.com/questions/56551276
复制相似问题