搜尋

首頁  >  問答  >  主體

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"]
大家讲道理大家讲道理2775 天前542

全部回覆(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
  • 取消回覆