如何编辑Docker图像?

3pvhb19x  于 2022-11-22  发布在  Docker
关注(0)|答案(3)|浏览(99)

我在社区里做了一个基本的搜索,没有找到合适的答案,所以我在这里问。如果之前被问到了,很抱歉。
基本上,我正在做一个特定的项目,我们会定期更改代码。所以,我们每次都需要构建Docker映像,因为我们需要从头开始安装requirement.txt中的依赖项,每次都需要大约10分钟。
如何直接更改Docker映像,以及如何配置反映预构建Docker映像中更改的入口点(在Docker文件中)

s4chpxco

s4chpxco1#

映像一旦生成就不能再编辑了,总是从一开始就运行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 build将跳到COPY步骤,因为package.jsonyarn.lock文件没有改变。

oogrdqng

oogrdqng2#

在我的情况下,我面对同样的,经过微小的变化,我是建立形象一次又一次。
我的旧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代码,所以你可以编辑图像/容器代码,以修复容器中的问题,通过这种方式,我避免了建设图像的任务一次又一次.
当我的代码得到修复后,我将更改从容器复制到我的代码库中,最后,我创建了最终的映像。

fcwjkofz

fcwjkofz3#

共有4个步骤

1.启动要编辑的图像
1.修改正在运行的映像,但使用docker exec -it <container-id>对其进行 shell 化(您可以使用docker ps获取容器id)
1.进行任何修改(安装新内容、创建目录或文件)
1.在新的终端选项卡/窗口中运行docker commit c7e6409a22bf my-new-image(替换为要保存的容器的容器ID)

示例

# Run an existing image
docker run -dt existing_image 

# See that it's running
docker ps
# CONTAINER ID   IMAGE            COMMAND   CREATED              STATUS              
# c7e6409a22bf   existing-image   "R"       6 minutes ago        Up 6 minutes

# Shell into it
docker exec -it c7e6409a22bf bash

# Make a new directory for demonstration purposes
# (note that this is inside the existing image)
mkdir NEWDIRECTORY

# Open another terminal tab/window, and save the running container you modified
docker commit c7e6409a22bf my-new-image

# Inspect to ensure it saved correctly
docker image ls
# REPOSITORY           TAG       IMAGE ID       CREATED         SIZE
# existing-image       latest    a7dde5d84fe5   7 minutes ago   888MB
# my-new-image         latest    d57fd15d5a95   2 minutes ago   888MB

相关问题