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

 毒菇求败的zyqy_654 发布于 2022-10-25 18:42

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

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

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

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

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

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

    2022-10-27 00:35 回答
    1. 首先 workdir 代表的目录是容器里面的目录,不是 host 的。

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

      • dockerfile 本身变化

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

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

      service:
          - build: <image_base_dir>
    2022-10-27 00:35 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有