我在社区中进行了一次基本搜索,找不到合适的答案,所以我在这里问。抱歉,是早先问到的。
基本上,我正在某个项目上工作,我们会定期更改代码。因此,由于我们需要从头开始安装require.txt的依赖项,因此每次都需要构建docker映像,这大约需要10分钟。
如何直接更改docker映像,以及如何配置入口点(在Docker File中)以反映预构建docker映像中的更改
答案 0 :(得分:0)
构建图像后,您将不再编辑图像。您总是从头开始运行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
步骤改变了。
答案 1 :(得分:0)
就我而言,我面临着同样的问题,经过细微的更改后,我一次又一次地构建图像。
我的旧 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 .
然后是最终的Dockerfile
FROM my_base_img:latest
WORKDIR /app
COPY . .
作为我从这个图像,我无法启动容器,我复制的 python 代码有问题,所以你可以编辑图像/容器代码,以修复容器中的问题,这意味着我避免了一次又一次地构建图像的任务。
当我的代码得到修复后,我将更改从容器复制到我的代码库,最后,我创建了最终图像。