湯雪秋
你是不是也經(jīng)常在使用Docker的時(shí)候,遇到“數(shù)據(jù)持久化”相關(guān)的困惑?容器刪了,數(shù)據(jù)也跟著沒了?今天就帶你深入了解Docker的Volume機(jī)制,搞懂什么是Volume、怎么使用、存儲在哪,以及如何實(shí)現(xiàn)多個(gè)容器共享存儲!
一、什么是DockerVolume?
Docker的Volume(卷)是官方推薦的數(shù)據(jù)持久化方案,用來將容器中的數(shù)據(jù)獨(dú)立存儲在宿主機(jī)上。與容器生命周期解耦,刪除容器不會影響數(shù)據(jù),非常適合用于數(shù)據(jù)庫、日志等場景。
簡單理解就是:容器內(nèi)的數(shù)據(jù)->Volume->宿主機(jī)目錄。
二、Volume的使用場景
容器內(nèi)服務(wù)需要持久化數(shù)據(jù),比如MySQL、Redis、PostgreSQL
??多個(gè)容器之間需要共享數(shù)據(jù)
防止重要數(shù)據(jù)在容器銷毀時(shí)丟失
容器頻繁更新、遷移,但數(shù)據(jù)需要保留
三、Volume怎么使用?
1.創(chuàng)建Volume
dockervolumecreatemydata
查看:
dockervolumels
2.使用Volume運(yùn)行容器
dockerrun-d\--namemysql\-vmydata:/var/lib/mysql\mysql:5.7
這條命令把宿主機(jī)上的mydata卷掛載到了容器中的/var/lib/mysql,MySQL的數(shù)據(jù)就存儲在這個(gè)卷里。
3.查看卷掛載路徑
dockervolumeinspectmydata
輸出中Mountpoint字段會告訴你這個(gè)卷實(shí)際掛載到了宿主機(jī)的哪個(gè)路徑,例如:
"Mountpoint":"/var/lib/docker/volumes/mydata/_data"
也就是說,你的數(shù)據(jù)其實(shí)是存在宿主機(jī)這個(gè)目錄下的。
四、DockerVolume存儲在哪?
默認(rèn)情況下,Docker會將Volume存儲在:
/var/lib/docker/volumes/卷名/_data/
你也可以用第三方存儲驅(qū)動(如NFS、GlusterFS、Ceph等)把Volume存儲到遠(yuǎn)程服務(wù)器或分布式存儲系統(tǒng)。
五、如何共享Volume?
方式1:多個(gè)容器掛載同一個(gè)Volume
dockerrun-d--namecontainer1-vmydata:/app/databusyboxsleep3600dockerrun-d--namecontainer2-vmydata:/app/databusyboxsleep3600
兩個(gè)容器就可以共享/app/data目錄下的內(nèi)容了。
方式2:使用--volumes-from繼承掛載
dockerrun-d--namecontainer1-v/databusyboxdockerrun-d--namecontainer2--volumes-fromcontainer1busybox
適合某些場景下的依賴?yán)^承,比如日志采集、配置共享等。
六、Volume的清理
刪除未使用的卷
dockervolumeprune
刪除指定卷
dockervolumermmydata
??注意:如果卷還在使用中,刪除會失敗。
七、補(bǔ)充:VolumevsBindMount
總結(jié)一下
DockerVolume是實(shí)現(xiàn)容器數(shù)據(jù)持久化和共享的關(guān)鍵工具。掌握Volume,可以讓你:
保證數(shù)據(jù)不隨容器銷毀而丟失
實(shí)現(xiàn)多個(gè)容器的數(shù)據(jù)共享
更安全、便捷地管理容器生命周期中的數(shù)據(jù)
別再讓數(shù)據(jù)隨風(fēng)而去了,趕緊用Volume把數(shù)據(jù)穩(wěn)穩(wěn)托住吧!
來源:紅網(wǎng)
作者:興梅紅
編輯:戚以晴
本文為紅辣椒評論 原創(chuàng)文章,僅系作者個(gè)人觀點(diǎn),不代表紅網(wǎng)立場。轉(zhuǎn)載請附原文出處鏈接和本聲明。