基于plugin的Volume,支持第三方的存儲方案,比如NAS,aws
Volume的類型
受管理的data Volume,由docker后臺自動創(chuàng)建。
綁定掛載的Volume,具體掛載位置可以由用戶指定。
數(shù)據(jù)持久化之Data Volume
以官方鏡像mysql的dockerfile文件為例 。其中dockerfile通過volume指定了當(dāng)前容器中要備份的文件路徑,但是并沒有指定說要保存到宿主機(jī)的哪個位置。
volume:映射容器中的文件到本地宿主機(jī)硬盤中
在我們使用 docker run
啟動Mysql鏡像容器的時候,容器會默認(rèn)在宿主機(jī)生成一個volume,至于位置在哪,名字是什么,可以通過如下命令查看
#查看所有volume docker volume ls #刪除指定volume docker volume rm [volume name] #查看volume詳細(xì) docker volume inspect [volume name]
此時我們刪除容器,發(fā)現(xiàn)volume數(shù)據(jù)卷還在,有保留。
此時我們會覺得這個data volume name 的名字很長,很不好理解。我們可以通過 -v 如下命令來指定生成的volume name docker run -d -v MYSQL:/var/lib/mysql --name mysql mysql5.7
-v
:前參數(shù)是volume name, :后面的是要備份的文件目錄(容器)
此時我們刪除容器,volume數(shù)據(jù)卷還在,我們用這個名為mysql的volume作為一個新容器的數(shù)據(jù)卷,覆蓋它。
docker run -d -v mysql:/var/lib/mysql --name mysql2 mysql5.7
進(jìn)入mysql2容器中,mysql -uroot 進(jìn)入數(shù)據(jù)庫中,發(fā)現(xiàn)當(dāng)前數(shù)據(jù)庫數(shù)據(jù)和之前刪除的容器中的數(shù)據(jù)庫數(shù)據(jù)一樣。
數(shù)據(jù)持久化之bind Mounting
和上面Data Volume不同的是,bind Mounting只能通過 docker run -v 方式啟動,無法使用dockerfile文件的方式。
運(yùn)行容器的時候指定本地的一個文件目錄和容器中的一個文件目錄的映射,通過這個可以做文件數(shù)據(jù)同步,2方無論哪一方有修改,另一方都會同步內(nèi)容
docker run -d -v $(pwd):/usr/share/nginx/html -p 80:80 --name nginx nginx
這個時候 -v :前面的參數(shù)是本機(jī)文件路徑, :后面是docker文件目錄(容器)
值得注意的是 ,使用bind Mounting方式做數(shù)據(jù)卷的映射時,首次 docker run -v 運(yùn)行,如果本機(jī)的文件夾是沒有內(nèi)容的,docker容器中的文件夾是有內(nèi)容的,則本機(jī)的會覆蓋dokcer容器中的,也就是容器中原本有內(nèi)容的也會沒有內(nèi)容。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持西部數(shù)碼。
更多關(guān)于云服務(wù)器,域名注冊,虛擬主機(jī)的問題,請?jiān)L問西部數(shù)碼官網(wǎng):www.ps-sw.cn