您好,登錄后才能下訂單哦!
有些容器會自動產生一些數據,為了不讓數據隨著container的消失而消失,保證數據的安全性。例如:數據庫容器,數據表的表會產生一些數據,如果我把container給刪除,數據就丟失。為了保證數據不丟失,這就有了Volume的存在。
Data Volume 結構圖
Docker持久化數據的方案
Volume的類型
受管理的data Volume,由docker后臺自動創建。
綁定掛載的Volume,具體掛載位置可以由用戶指定。
數據持久化之Data Volume
以官方鏡像mysql的dockerfile文件為例 。其中dockerfile通過volume指定了當前容器中要備份的文件路徑,但是并沒有指定說要保存到宿主機的哪個位置。
volume:映射容器中的文件到本地宿主機硬盤中
在我們使用 docker run
啟動mysql鏡像容器的時候,容器會默認在宿主機生成一個volume,至于位置在哪,名字是什么,可以通過如下命令查看
#查看所有volume docker volume ls #刪除指定volume docker volume rm [volume name] #查看volume詳細 docker volume inspect [volume name]
此時我們刪除容器,發現volume數據卷還在,有保留。
此時我們會覺得這個data volume name 的名字很長,很不好理解。我們可以通過 -v
如下命令來指定生成的volume name docker run -d -v mysql:/var/lib/mysql --name mysql mysql5.7
-v
:前參數是volume name, :后面的是要備份的文件目錄(容器)
此時我們刪除容器,volume數據卷還在,我們用這個名為mysql的volume作為一個新容器的數據卷,覆蓋它。
docker run -d -v mysql:/var/lib/mysql --name mysql2 mysql5.7
進入mysql2容器中,mysql -uroot 進入數據庫中,發現當前數據庫數據和之前刪除的容器中的數據庫數據一樣。
數據持久化之bind Mounting
和上面Data Volume不同的是,bind Mounting只能通過 docker run -v
方式啟動,無法使用dockerfile文件的方式。
運行容器的時候指定本地的一個文件目錄和容器中的一個文件目錄的映射,通過這個可以做文件數據同步,2方無論哪一方有修改,另一方都會同步內容
docker run -d -v $(pwd):/usr/share/nginx/html -p 80:80 --name nginx nginx
這個時候 -v
:前面的參數是本機文件路徑, :后面是docker文件目錄(容器)
值得注意的是 ,使用bind Mounting方式做數據卷的映射時,首次 docker run -v
運行,如果本機的文件夾是沒有內容的,docker容器中的文件夾是有內容的,則本機的會覆蓋dokcer容器中的,也就是容器中原本有內容的也會沒有內容。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。