如何编辑Docker映像?

时间:2019-06-11 20:29:05

标签: docker docker-compose dockerfile docker-image

我在社区中进行了一次基本搜索,找不到合适的答案,所以我在这里问。抱歉,是早先问到的。

基本上,我正在某个项目上工作,我们会定期更改代码。因此,由于我们需要从头开始安装require.txt的依赖项,因此每次都需要构建docker映像,这大约需要10分钟。

如何直接更改docker映像,以及如何配置入口点(在Docker File中)以反映预构建docker映像中的更改

2 个答案:

答案 0 :(得分:0)

构建图像后,您将不再编辑图像。您总是从头开始运行docker build;它始终在干净的环境中运行。

另一方面,Docker会缓存生成的映像。如果您有图片01234567,运行了RUN pip install -r requirements.txt,并取出了图片2468ace0,那么下次您运行docker build时,它将看到相同的源图像和相同的命令,并跳过工作,直接跳至输出图像。更改的COPYADD文件会使高速缓存无效,以备将来使用。

所以标准模式是

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 buildCOPY文件都没有,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 代码有问题,所以你可以编辑图像/容器代码,以修复容器中的问题,这意味着我避免了一次又一次地构建图像的任务。

当我的代码得到修复后,我将更改从容器复制到我的代码库,最后,我创建了最终图像。