首页  >  问答  >  正文

flask - 为什么每次当我workdir所对应的文件的内容发生变化,要重新build images,然后生成container才会生效

dockerfile没有改变,只是workdir所对应的容器外部的文件发生了改变

  1. 请问这是必须的么,如果是这样的话,是要用docker compose-up 自动简化这个过程?

  2. 如果不是必须的话,因为我的dockerfile的问题么?
    dockerfile如下:

    FROM ubuntu
    MAINTAINER Tarty.Phoenix <tartyphoenix@gmail.com>
    RUN apt-get update
    RUN apt-get install -y -q python-all python-pip libffi-dev
    RUN apt-get install -y -q python-dev build-essential
    ADD ./flask_pure/requirements.txt /tmp/requirements.txt
    RUN pip install -qr /tmp/requirements.txt
    
    ADD ./flask_pure /opt/flask_pure/
    WORKDIR /opt/flask_pure
    
    EXPOSE 80
    CMD ["python", "manage.py", "runserver"]
大家讲道理大家讲道理2758 天前528

全部回复(3)我来回复

  • 巴扎黑

    巴扎黑2017-04-24 09:12:59

    1. 首先 workdir 代表的目录是容器里面的目录,不是 host 的。

    2. 下面的内容变化需要重新 build image

      • dockerfile 本身变化

      • COPY / ADD 指令的 source 文件变化

    3. docker-compose 支持运行的时候重新 build image 的

      service:
          - build: <image_base_dir>

    回复
    0
  • 怪我咯

    怪我咯2017-04-24 09:12:59

    你的问题中,有一点需要和你解释。
    通过创建和编辑dockerfile文件后,build创建一个image(镜像),而后run一个image产生一个container(容器),那么image和container是一一对应的关系了。那么当你编辑dockerfile文件改变workdir后,再去创建的container当然就是默认进入了新的workdir。因此你的问题的标题所描述的应该不是一个问题,而是正确的逻辑描述。

    回复
    0
  • 迷茫

    迷茫2017-04-24 09:12:59

    你对docker的理解错了,你这么做只是把某个文件夹的内容打包进镜像。
    建议你了解一下docker中的VOLUME卷的概念,只有通过容器启动时指定-v参数或者在docker-compose.yml中指定VOLUME参数才能实现容器挂载本地目录。

    那么如何区分是否需要容器挂载本地目录,我的理解是处于开发状态还是生产状态。
    如果处于开发状态,则代码需要频繁变动,那么每修改一次代码都需要重新打包进镜像是很难接受的。
    如果处于生产状态,想象一下Docker Hub上提供那么多的镜像吧,如果这些镜像都提供你一个安装环境和源代码,然后你需要手动指定VOLUME把源代码目录挂载进去,再然后启动容器就会进行编译安装,你会觉得这个的体验怎么样?

    回复
    0
  • 取消回复