2014-10-11 26 views
6

我正在編寫Dockerfile來設置用於測試Web應用程序的映像。我基於tutum /燈圖像(https://github.com/tutumcloud/tutum-docker-lamp/blob/master/Dockerfile),因爲這似乎是一個很好的基礎。如何在Docker鏡像中顯示「undeclare」卷?

作爲我的dockerfile的一部分,我想創建一個mysql數據庫並在其中設置一些東西。但是,tutum/lamp圖像聲明VOLUME ["/etc/mysql", "/var/lib/mysql" ],所以如果我理解正確,我將對Dockerfile中的MySQL數據庫所做的任何更改都不會被保留。

  • 我能理解嗎?

如果是的話,

  • 有沒有一種方法來「undeclare」那些卷,使這些目錄會像其他一切工會文件系統的一部分?

謝謝!

+1

我實際上正在嘗試做同樣的事情。我編輯了tutum/lamp的卷,但是當我嘗試構建它時,我得到了:'start-apache2.sh:沒有這樣的文件或目錄' – pguardiario 2014-10-13 22:20:02

+0

@pguardiario:你是否從tutum/lamp git目錄中克隆了所有文件?您還需要獲取所有支持文件,而不僅僅是Dockerfile。另外,請確保您在正確的目錄中運行docker build。 – Mikkel 2014-10-14 12:26:51

+0

是的,我也想到了。我讓他們都建立,但我仍然有移動容器的問題。 – pguardiario 2014-10-14 23:47:45

回答

3

你真的不能undeclare卷,但你可以建立自己的版本通過修改它的dockerfile來修改原始圖像。

3

不可能改變現有的容器,所以你有兩個選擇:

  1. 採取Tutum容器,並建立自己的變種
  2. 管理使用數據容器tutum容器的持久性。

數據容器

創建,創建的數據量的參考的容器:

docker run -d --volumes-from dbvol -p 3306:3306 tutum/mysql:5.6 

docker run -it --name dbvol -v /var/lib/mysql ubuntu env 

此運行MySQL數據庫時來持久數據然後可用於

只要存在「dbvol」容器,數據就會一直存在。它可以在任何階段被刪除:

docker rm dbvol 

參考:

+0

謝謝你的回覆。我知道「數據容器」原理,但我不知道如何將它與Dockerfile腳本一起使用?我想創建一個數據庫,並在腳本中進行一些添加和更改。 – Mikkel 2014-10-11 15:01:54

+3

@Mikkel然後採用Tutum使用的dockerfile並在本地運行它以創建自己的圖像。從性能角度來看,使用本地卷數據也更有效率(Aufs速度較慢)。數據容器模式只是一個有用的技巧,可以確保數據卷不會被容器刪除(只有在所有容器引用都不存在的情況下才會刪除容量) – 2014-10-11 15:04:35

+0

我自己也得出了這個結論(構建了我自己的類似tutum的樣式圖片)。我只是想知道是否有辦法「不聲明」一個音量。如果你發表你自己的形象作爲答案的建議,我會將其標記爲正確的答案。 – Mikkel 2014-10-11 15:23:52