【问题标题】:How to Edit Docker Image?如何编辑 Docker 镜像?
【发布时间】:2019-06-11 20:29:05
【问题描述】:

我在社区进行了基本搜索,找不到合适的答案,所以我在这里问。抱歉,如果之前有人问过。

基本上,我正在从事某个项目,我们会定期更改代码。所以,我们每次都需要构建docker镜像,因为我们需要从头开始安装requirements.txt的依赖项,每次大约需要10分钟。

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

【问题讨论】:

    标签: docker docker-compose dockerfile docker-image


    【解决方案1】:

    图像一旦生成就不能编辑。你总是从一开始就运行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 文件没有更改。

    【讨论】:

      【解决方案2】:

      在我的情况下,我也面临同样的问题,经过细微的更改后,我一次又一次地构建图像。

      我的旧 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 代码出现问题,因此您可以编辑图像/容器代码,以修复容器中的问题,这意味着我避免了一次又一次地构建图像的任务。

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

      【讨论】:

        猜你喜欢
        • 2022-10-15
        • 2020-01-20
        • 2014-02-19
        • 1970-01-01
        • 2022-12-26
        • 2015-07-14
        • 2014-05-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多