2016-09-04 62 views
1

它看起來像任何體積結合-v)一起使用時你run基底圖像將不會被您提交衍生圖像中保留,而體積綁定選項必須是每次通過run傳遞的派生圖像。多克爾體積結合:基本圖像VS衍生物圖像

實施例:


docker run -it -v /opt/hostappsdir:/apps ubuntu 

使在容器中的變化(命名爲:john_doe即)和commit到一個新的圖像(本地/測試

docker commit john_doe local/test 

然後,這不會列出主機目錄中的文件

docker run --rm local/test ls /apps 

但是這一次確實是

docker run --rm -v /opt/hostappsdir:/apps local/test ls /apps 

有沒有什麼方法可以讓我避免將音量每次綁定選項?

+0

如果降低了我的問題的人解釋了它的問題,這將會有所幫助。 – devlent

+0

好的。更正'commit'命令中的語法錯誤。等待一個答案... – devlent

+0

我也不知道爲什麼這個問題已被投票 - 這是一個合法的爭議,因此一個澄清的有效問題 –

回答

3

根據定義,卷不是容器圖層的一部分,因此不會成爲從容器創建圖像時提交的圖層的一部分。

如果您喜歡例如添加特定的配置,添加一些擴展,添加一些包,你應該總是從基礎圖像派生,不要只是「提交」任意的,沒有形式化的變化。

from <baseimage> 
COPY yourconfig /etc/somewhere 
COPY yourasset /var/www 

RUN sed ... \ // change some configuration 
    && apt-get update && apt-get install curl // some packages 

提示創建一個Dockerfile:我做自己不喜歡的「commiting改變容器的圖像」的理念 - 這是有風險的,每次都不會產生相同的結果多了,並沒有正式確定你實際改變了什麼。你會有困難的時候。例如,由於基礎圖像的更新而更新圖像,因爲你不知道,你做了什麼 - 即使你已經寫下了它,也需要很多努力來再次這樣做。再次。

+0

謝謝。答覆中的第一行是我想要的答案。我的意思是添加額外的apt包。代碼更改只能在綁定到容器的主機目錄上完成。 – devlent

+0

我可能生活在一塊石頭之類的東西里,但我剛剛學會了「碼頭合成」......哇!這就是我期待的那種東西,而docker-compose使得我寫的所有bash腳本完全是多餘的! – devlent