2017-04-08 33 views
0

我想解決當我更改用於創建泊塢窗圖像的本地文件系統時如何更新現有圖像。我以爲我可以使用docker提交來做到這一點,但似乎允許您在正在運行的映像上對文件系統進行更改時更改映像?從文件系統更新碼頭圖像給出了本地文件系統的變化

sudo docker build -t app 

/app.py 

現在構建有局部變化/app.py。如何更改圖片應用以反映對/app.py的更改?現在我不得不刪除舊圖像,然後創建一個新圖像。

sudo docker rmi app 
sudo docker build -t app 

任何幫助表示讚賞!

回答

2

首先,沒有running image,只有running container。圖片是以Docker的方式交付的東西,你建立你的image,然後從它開始container

您的問題,我想你提到你的選擇:

  1. 重建圖像
  2. 運行的容器裏面去,進行修改和docker commit回來。就個人而言,我只能用這種方法來解決一個小問題,或者如果docker build需要很長時間才能對我的映像進行修復。

泊塢窗使用union FScopy on write打造的形象,這意味着如果你想做出改變的圖像,你不能在原地改變它,它會產生額外的層(一個或多個),以反映變化(s),它會在某些情況下使用相同的圖像名稱。從交付的角度來看,我認爲爲每個版本創建一個新的圖像(使用不同的標籤)完全可以,或者甚至應該以這種方式完成,這就是爲什麼你有一個Dockerfile,圖像不僅僅是你開始的東西你的容器,他們實際上是版本化的交付工件,你可以回滾到任何版本,如果你想/需要。所以我認爲你現在的解決方案是可以的。

幾句話在這裏:本地開發和測試,你可以只安裝你/app.py作爲捲到你的容器,當你啓動它,像docker run -v /path/to/host/app.py:/path/to/container/app.py your_base_image_to_run_app,那麼任何你在本地FS改爲app.py,它我會向容器反映。當你完成你的工作,建立一個新的形象。

0

根據您當前的設計解決方案是創建新圖像並分配相同的標籤。

最好的解決方案是從Docker鏡像暴露環境變量,並使用這些變量來更新app.py,以便您不需要每次都更改圖像。只有一個鏡像就足夠了。

+0

所以你的意思是打開碼頭圖像文件系統,並直接在那裏進行編輯? – chris

+0

您可以隨時進入容器並更改文件系統並從中創建新映像,但如果更改基於相同的值或配置,則不是理想的方式。我所說的是,如果圖像中的更改頻繁,則使用環境變量來合併與配置相關的更改。使用這些變量並相應地更新app.py文件。 –