flask - 为什么每次当我workdir所对应的文件的内容发生变化,要重新build images,然后生成container才会生效
大家讲道理
大家讲道理 2017-04-24 09:10:59
0
3
551

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"]
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(3)
巴扎黑
  1. 首先 workdir 代表的目录是容器里面的目录,不是 host 的。

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

    • dockerfile 本身变化

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

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

    service:
        - build: <image_base_dir>
刘奇

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

迷茫

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

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板