詳解Docker的持久化儲存和資料共享

2022-09-25 04:24:07 字數 1579 閱讀 6910

有些容器會自動產生一些資料,為了不讓資料隨著container的消失而消失,保證資料的安全性。例如:資料庫容器,資料表的表會產生一些資料,如果我把container給刪除,資料就丟失。為了保證資料不丟失,這就有了volume的存在。

data www.cppcns.comvolume 結構圖

docker持久化資料的方案

volume的型別

受程式設計客棧管理的data vol程式設計客棧ume,由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 namedocker 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 方式做資料卷的對映時,首次docker run -v執行,如果本機的資料夾是沒有內容的,docker容器中的資料夾是有內容的,則本機程式設計客棧的會覆蓋dokcer容器中的,也就是容器中原本有內容的也會沒有內容。

本文標題: 詳解docker的持久化儲存和資料共享

本文位址:

docker 儲存持久化

docker容器不適合存放資料,重要的資料要用外部卷儲存,容器可以掛載真實機目錄或者共享儲存為卷 儲存卷對映 docker run itd v 真實機目錄 容器目錄 映象 標籤可以做一台nfs伺服器host01共享 var webroot目錄 docker01伺服器把host01的共享目錄掛載到 m...

Docker 持久化儲存

參考 命令 volume 1 檢視所有的掛載 docker volume ls 檢視具體掛載資訊 docker volume inspect 掛載名 自行建立volume docker volume create 自定義掛載名 掛載方式 1.先通過volume建立掛載點,後在run的時候掛載指定資訊...

docker持久化儲存與網路架構

docker容器不保持任何資料 可將真機目錄掛載到容器內提供持久化儲存 root docker1 docker run v data data it docker.io centos bash我們可以利用nfs建立儲存伺服器,將客戶端掛載到nfs共享中,實現同一資料對映到多台客戶端的容器中去。nfs...