有些容器會自動產(chǎn)生一些數(shù)據(jù),為了不讓數(shù)據(jù)隨著container的消失而消失,保證數(shù)據(jù)的安全性。例如:數(shù)據(jù)庫容器,數(shù)據(jù)表的表會產(chǎn)生一些數(shù)據(jù),如果我把container給刪除,數(shù)據(jù)就丟失。為了保證數(shù)據(jù)不丟失,這就有了Volume的存在。
Data Volume 結(jié)構(gòu)圖
![](/d/20211016/f54e42d931b61d8b6a92549a97a1e952.gif)
Docker持久化數(shù)據(jù)的方案
- 基于本地文件系統(tǒng)的Volume??梢栽賵?zhí)行Docker create或Docker run時,通過-v參數(shù)將主機的目錄作為容器的數(shù)據(jù)卷。這部分功能便是基本的本地文件系統(tǒng)的volume管理。
- 基于plugin的Volume,支持第三方的存儲方案,比如NAS,aws
Volume的類型
受管理的data Volume,由docker后臺自動創(chuàng)建。
綁定掛載的Volume,具體掛載位置可以由用戶指定。
數(shù)據(jù)持久化之Data Volume
以官方鏡像mysql的dockerfile文件為例 。其中dockerfile通過volume指定了當前容器中要備份的文件路徑,但是并沒有指定說要保存到宿主機的哪個位置。
volume:映射容器中的文件到本地宿主機硬盤中
![](/d/20211016/e58484a63d635d0e6ded366438cb0423.gif)
在我們使用 docker run
啟動mysql鏡像容器的時候,容器會默認在宿主機生成一個volume,至于位置在哪,名字是什么,可以通過如下命令查看
#查看所有volume
docker volume ls
#刪除指定volume
docker volume rm [volume name]
#查看volume詳細
docker volume inspect [volume name]
![](/d/20211016/c649fd75e93eb7adc0dbf6b617279c9d.gif)
此時我們刪除容器,發(fā)現(xiàn)volume數(shù)據(jù)卷還在,有保留。
![](/d/20211016/d5cdc3e5b95add3707ed8013ea1cdc57.gif)
此時我們會覺得這個data volume name 的名字很長,很不好理解。我們可以通過 -v
如下命令來指定生成的volume name docker run -d -v mysql:/var/lib/mysql --name mysql mysql5.7
-v
:前參數(shù)是volume name, :后面的是要備份的文件目錄(容器)
![](/d/20211016/af2123fe1fe364fb48eaa87ecbd1e57e.gif)
此時我們刪除容器,volume數(shù)據(jù)卷還在,我們用這個名為mysql的volume作為一個新容器的數(shù)據(jù)卷,覆蓋它。
docker run -d -v mysql:/var/lib/mysql --name mysql2 mysql5.7
進入mysql2容器中,mysql -uroot 進入數(shù)據(jù)庫中,發(fā)現(xiàn)當前數(shù)據(jù)庫數(shù)據(jù)和之前刪除的容器中的數(shù)據(jù)庫數(shù)據(jù)一樣。
數(shù)據(jù)持久化之bind Mounting
和上面Data Volume不同的是,bind Mounting只能通過 docker run -v
方式啟動,無法使用dockerfile文件的方式。
運行容器的時候指定本地的一個文件目錄和容器中的一個文件目錄的映射,通過這個可以做文件數(shù)據(jù)同步,2方無論哪一方有修改,另一方都會同步內(nèi)容
docker run -d -v $(pwd):/usr/share/nginx/html -p 80:80 --name nginx nginx
這個時候 -v
:前面的參數(shù)是本機文件路徑, :后面是docker文件目錄(容器)
值得注意的是 ,使用bind Mounting方式做數(shù)據(jù)卷的映射時,首次 docker run -v
運行,如果本機的文件夾是沒有內(nèi)容的,docker容器中的文件夾是有內(nèi)容的,則本機的會覆蓋dokcer容器中的,也就是容器中原本有內(nèi)容的也會沒有內(nèi)容。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。