请问这是必须的么,如果是这样的话,是要用docker compose-up 自动简化这个过程?
如果不是必须的话,因为我的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"]
首先 workdir 代表的目錄是容器裡面的目錄,不是 host 的。
下面的內容變化需要重新 build image
dockerfile 本身變化
COPY / ADD 指令的 source 檔案變化
docker-compose 支援運行的時候重新 build image 的
你的問題中,有一點要跟你解釋。
透過建立和編輯dockerfile檔案後,build建立一個image(映像),而後run一個image產生一個container(容器),那麼image和container是一一對應的關係了。那麼當你編輯dockerfile檔案改變workdir後,再去創建的container當然就是預設進入了新的workdir。因此你的問題的標題所描述的應該不是一個問題,而是正確的邏輯描述。
你對docker的理解錯了,你這麼做只是把某個資料夾的內容打包進鏡像。
建議你了解docker中的VOLUME磁碟區的概念,只有透過容器啟動時指定-v參數或在docker-compose.yml中指定VOLUME參數才能實現容器掛載本機目錄。
那麼如何區分是否需要容器掛載本地目錄,我的理解是處於開發狀態還是生產狀態。
如果處於開發狀態,則程式碼需要頻繁變動,那麼每修改一次程式碼都需要重新打包進鏡像是很難接受的。
如果處於生產狀態,想像一下Docker Hub上提供那麼多的鏡像吧,如果這些鏡像都提供你一個安裝環境和源代碼,然後你需要手動指定VOLUME把源代碼目錄掛載進去,再然後啟動容器就會進行編譯安裝,你會覺得這個的體驗怎麼樣?