詳解Docker的持久化存儲(chǔ)和數(shù)據(jù)共享
有些容器會(huì)自動(dòng)產(chǎn)生一些數(shù)據(jù),為了不讓數(shù)據(jù)隨著container的消失而消失,保證數(shù)據(jù)的安全性。例如:數(shù)據(jù)庫(kù)容器,數(shù)據(jù)表的表會(huì)產(chǎn)生一些數(shù)據(jù),如果我把container給刪除,數(shù)據(jù)就丟失。為了保證數(shù)據(jù)不丟失,這就有了Volume的存在。
Data Volume 結(jié)構(gòu)圖
Docker持久化數(shù)據(jù)的方案
- 基于本地文件系統(tǒng)的Volume??梢栽賵?zhí)行Docker create或Docker run時(shí),通過(guò)-v參數(shù)將主機(jī)的目錄作為容器的數(shù)據(jù)卷。這部分功能便是基本的本地文件系統(tǒng)的volume管理。
- 基于plugin的Volume,支持第三方的存儲(chǔ)方案,比如NAS,aws
Volume的類(lèi)型
受管理的data Volume,由docker后臺(tái)自動(dòng)創(chuàng)建。
綁定掛載的Volume,具體掛載位置可以由用戶(hù)指定。
數(shù)據(jù)持久化之Data Volume
以官方鏡像mysql的dockerfile文件為例 。其中dockerfile通過(guò)volume指定了當(dāng)前容器中要備份的文件路徑,但是并沒(méi)有指定說(shuō)要保存到宿主機(jī)的哪個(gè)位置。
volume:映射容器中的文件到本地宿主機(jī)硬盤(pán)中
在我們使用 docker run
啟動(dòng)mysql鏡像容器的時(shí)候,容器會(huì)默認(rèn)在宿主機(jī)生成一個(gè)volume,至于位置在哪,名字是什么,可以通過(guò)如下命令查看
#查看所有volume docker volume ls #刪除指定volume docker volume rm [volume name] #查看volume詳細(xì) docker volume inspect [volume name]
此時(shí)我們刪除容器,發(fā)現(xiàn)volume數(shù)據(jù)卷還在,有保留。
此時(shí)我們會(huì)覺(jué)得這個(gè)data volume name 的名字很長(zhǎng),很不好理解。我們可以通過(guò) -v
如下命令來(lái)指定生成的volume name docker run -d -v mysql:/var/lib/mysql --name mysql mysql5.7
-v
:前參數(shù)是volume name, :后面的是要備份的文件目錄(容器)
此時(shí)我們刪除容器,volume數(shù)據(jù)卷還在,我們用這個(gè)名為mysql的volume作為一個(gè)新容器的數(shù)據(jù)卷,覆蓋它。
docker run -d -v mysql:/var/lib/mysql --name mysql2 mysql5.7
進(jìn)入mysql2容器中,mysql -uroot 進(jìn)入數(shù)據(jù)庫(kù)中,發(fā)現(xiàn)當(dāng)前數(shù)據(jù)庫(kù)數(shù)據(jù)和之前刪除的容器中的數(shù)據(jù)庫(kù)數(shù)據(jù)一樣。
數(shù)據(jù)持久化之bind Mounting
和上面Data Volume不同的是,bind Mounting只能通過(guò) docker run -v
方式啟動(dòng),無(wú)法使用dockerfile文件的方式。
運(yùn)行容器的時(shí)候指定本地的一個(gè)文件目錄和容器中的一個(gè)文件目錄的映射,通過(guò)這個(gè)可以做文件數(shù)據(jù)同步,2方無(wú)論哪一方有修改,另一方都會(huì)同步內(nèi)容
docker run -d -v $(pwd):/usr/share/nginx/html -p 80:80 --name nginx nginx
這個(gè)時(shí)候 -v
:前面的參數(shù)是本機(jī)文件路徑, :后面是docker文件目錄(容器)
值得注意的是 ,使用bind Mounting方式做數(shù)據(jù)卷的映射時(shí),首次 docker run -v
運(yùn)行,如果本機(jī)的文件夾是沒(méi)有內(nèi)容的,docker容器中的文件夾是有內(nèi)容的,則本機(jī)的會(huì)覆蓋dokcer容器中的,也就是容器中原本有內(nèi)容的也會(huì)沒(méi)有內(nèi)容。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
在docker中部署tomcat并且部署java應(yīng)用程序的步驟詳解
本文給大家介紹如何在docker中部署tomcat及如何部署我們的應(yīng)用程序到docker容器的tomcat里,本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,一起看看吧2016-10-10解決Mac下 docker 無(wú)法 ping 通宿主機(jī)的問(wèn)題
這篇文章主要介紹了解決Mac下 docker 無(wú)法 ping 通宿主機(jī)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11Docker部署RabbitMQ的實(shí)現(xiàn)方法(圖文并茂)
本文詳細(xì)介紹了如何使用Docker部署RabbitMQ的步驟,包括拉取RabbitMQ鏡像,創(chuàng)建與授權(quán)文件夾,創(chuàng)建RabbitMQ容器,查看啟動(dòng)日志,訪(fǎng)問(wèn)控制臺(tái)和登錄等,全程詳細(xì)的參數(shù)解釋和操作步驟,讓Docker部署RabbitMQ變得簡(jiǎn)單易行2024-10-10Docker 學(xué)習(xí)文檔(知識(shí)結(jié)構(gòu)整理)
這篇文章主要介紹了Docker 學(xué)習(xí)文檔的相關(guān)資料,需要的朋友可以參考下2016-11-11Docker 使用 Supervisor 來(lái)管理進(jìn)程操作
這篇文章主要介紹了Docker 使用 Supervisor 來(lái)管理進(jìn)程操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11生產(chǎn)環(huán)境中安全運(yùn)行Docker容器
本文是一篇譯文,給大家詳細(xì)介紹如何在生產(chǎn)環(huán)境中安全運(yùn)行Docker容器,有需要的小伙伴可以參考下2017-01-01Docker 命令自動(dòng)補(bǔ)全的實(shí)現(xiàn)
這篇文章主要介紹了Docker 命令自動(dòng)補(bǔ)全的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12