Docker用Commit给容器做快照
關于?commit
鏡像是容器的基礎,每次執行?docker?run?的時候都會指定哪個鏡像作為容器運行的基礎。
鏡像是多層存儲,每一層是在前一層的基礎上進行修改;而容器同樣也是多層存儲,是在以鏡像為基礎,在其基礎上加一層作為容器運行的時的存儲層。
以下是用來理解鏡像構建:
docker?run?--name?webserver?-d?-p?80:80?nginx
以nginx鏡像為基礎,啟動一個容器,命名為webserver?映射80端口
?
我本地沒有nginx鏡像,所以顯示自動拉取然后創建啟動容器。
?
Ps:我是用的虛擬機,虛擬機ip是上面那個所以這么訪問的。如果是本機或者其他請自行轉換。
Docker?ps?確認下,看容器正跑著呢
?
接下來對鏡像進行操作。
登入這個容器的bash?:?docker?exec?-it?webserver?bash?
把網頁內容改下:??echo?'<h1>Hello,?Docker!</h1>'?>?/usr/share/nginx/html/index.html
?
改完后記得exit退出容器連接。
剛剛修改了容器的文件,也就是改動了容器的存儲層。
接下來要把這次改動的容器狀態打包成鏡像。也就是把基本鏡像啟動成容器(此時已經疊加了存儲層),然后我們又改變了存儲層。現在把目前的這個最新狀態再打包成鏡像。
docker?commit?--author?"13?xxxxx"?webserver?nginx:v2
然后看下鏡像列表里已經有這個了
docker?image?ls
然后用這個新鏡像?nginx:v2?跑一個容器
docker?run?--name?web2?-d?-p?81:80?nginx:v2
Ok上面就是關于commit的基本操作,大體來說就是能把一個活動的容器的當前狀態打包成一個鏡像,以后可以繼續把這個鏡像跑起來成一個容器,有點快照的意思。但是切記不要用commit來真正的打包東西,除非是一些保存環境現場啥的特殊需求。因為鏡像是分層存儲的,這么搞會導致鏡像一層一層的非常臃腫,更難受的是,這個會導致黑盒問題。迭代十幾個版本之后,每一層做過什么改動光憑幾行描述備注或者是docker?diff啥的很難搞清楚。打包生成鏡像通常正確姿勢是用Dockerfile
?
總結
以上是生活随笔為你收集整理的Docker用Commit给容器做快照的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker镜像基本使用
- 下一篇: Docker用Dockerfile定制镜