要知道,當咱們運行一個容器的時候(若是不使用卷的話),咱們作的任何文件修改都會被記錄與容器存儲層裏。而Docker提供了一個docker commit 的命令,能夠將容器的存儲層保存下來成爲鏡像。換句話說,就是在原有鏡像的基礎上,在疊加上容器的存儲層,並構成信的鏡像,之後咱們運行這個新鏡像的時候,就會擁有原有容器最後的文件變化。html
docker commit的語法格式爲:docker
docker commit[選項] <容器id或容器名> [ <倉庫名> [: <標籤> ]]
可是,慎用docker commit
使用docker commit命令雖然能夠比較直觀的幫助理解鏡像分層存儲的概念,可是實際環境中並不會這樣使用。
htm
首先,若是在安裝軟件,編譯構建,那會有大量的無關內容被添加進來,若是不當心清理,將會致使鏡像及其臃腫。blog
此外,使用docker commit 意味着全部對鏡像的操做都是黑箱操做,生成的鏡像也被稱爲黑箱鏡像,換句話說,就是除了制定鏡像的人知道執行過什麼命令,怎麼生成的鏡像,別人根本無從得知,並且,即便是這個製做鏡像的人,過一段時間後也沒法記清具體的操做的。雖然docker diff或許能夠獲得一點線索,可是遠遠不到能夠確保生成一致鏡像的地步。這種黑箱鏡像的維護工做是很是痛苦的。get
並且,任何修改的結果僅僅是在當前層進行標記,添加,修改,而不會改動上一層。若是使用docker commit製做鏡像,以及後期修改的話,每一次修改都會讓鏡像更加臃腫一次,所刪除的上一層的東西並不會丟失,會一直如影隨形的跟着這個鏡像,即便根本沒法訪問到,這會使鏡像更加臃腫。it
docker commit有一些特殊的應用場合,好比被入侵後保存現場等。可是,不要使用docker commmit定製鏡像,定製行爲應該使用Dockerfile來完成。
本文轉載自:http://www.javashuo.com/article/p-qfycxrpt-dp.html編譯