1. 程式人生 > >docker commit不適合生成映象

docker commit不適合生成映象

知道,當我們執行一個容器的時候(如果不使用卷的話),我們做的任何檔案修改都會被記錄與容器儲存層裡。而Docker提供了一個docker commit 的命令,可以將容器的儲存層儲存下來成為映象。換句話說,就是在原有映象的基礎上,在疊加上容器的儲存層,並構成信的映象,以後我們執行這個新映象的時候,就會擁有原有容器最後的檔案變化。

docker commit的語法格式為:

docker commit[選項] <容器ID或容器名> [<倉庫名>[:<標籤>]]

但是,慎用docker commit

使用docker commit命令雖然可以比較直觀的幫助理解映象分層儲存的概念,但是實際環境中並不會這樣使用。

首先,如果在安裝軟體,編譯構建,那會有大量的無關內容被新增進來,如果不小心清理,將會導致映象及其臃腫。

此外,使用docker commit 意味著所有對映象的操作都是黑箱操作,生成的映象也被稱為黑箱映象,換句話說,就是除了制定映象的人知道執行過什麼命令,怎麼生成的映象,別人根本無從得知,而且,即使是這個製作映象的人,過一段時間後也無法記清具體的操作的。雖然docker diff或許可以得到一點線索,但是遠遠不到可以確保生成一致映象的地步。這種黑箱映象的維護工作是非常痛苦的。

而且,任何修改的結果僅僅是在當前層進行標記,新增,修改,而不會改動上一層。如果使用docker commit製作映象,以及後期修改的話,每一次修改都會讓映象更加臃腫一次,所刪除的上一層的東西並不會丟失,會一直如影隨形的跟著這個映象,即使根本無法訪問到,這會使映象更加臃腫。

docker commit有一些特殊的應用場合,比如被入侵後儲存現場等。但是,不要使用docker commmit定製映象,定製行為應該使用Dockerfile來完成。