Docker數據存儲之Volumes詳解
默認容器的數據的讀寫發(fā)生在容器的存儲層,當容器被刪除時其上的數據將會丟失。所以我們應該盡量保證容器存儲層不發(fā)生寫操作,為了實現數據的持久化存儲我們需要選擇一種方案來保存數據,當前有以下幾種方式:
- Volumes
- Bind mounts
- tmpfs mounts
下圖展示了這三種技術:
Volumes
Volumes(數據卷)是一個可供一個或多個容器使用的位于宿主機上特殊目錄,它擁有以下特性:
- 數據卷可以在容器間共享和重用
- 對數據卷的寫入操作,不會對鏡像有任何影響
- 數據卷默認會一直存在,即使容器被刪除
使用數據卷的目的是持久化容器中的數據,以在容器間共享或者防止數據丟失(寫入容器存儲層的數據會丟失)。
使用數據卷的步驟一般分為兩步:
- 創(chuàng)建一個數據卷
- 使用-v或--mount參數將數據卷掛載容器指定目錄中,這樣所有該容器針對該指定目錄的寫操作都會保存在宿主機上的Volume中。
Volume管理
創(chuàng)建一個Volume:
$ docker volume create my-vol
查看Volumes:
$ docker volume ls local my-vol
$ docker volume inspect my-vol [ { "Driver": "local", "Labels": {}, "Mountpoint": "/var/lib/docker/volumes/my-vol/_data", "Name": "my-vol", "Options": {}, "Scope": "local" } ]
我么可以看到創(chuàng)建的Volume my-vol保存在目錄/var/lib/docker/volumes/
下,以后所有針對該Volume的寫數據都會保存中目錄/var/lib/docker/volumes/my-vol/_data
下。
刪除一個Volume:
$ docker volume rm my-vol
或者刪除所有未使用的Volumes:
docker volume prune
掛載數據卷到容器目錄
創(chuàng)建了一個Volume之后,我們可以在運行容器時通過指定-v或--mount參數來使用該Volume:
使用--mount
參數:
$ docker run -d \ --name=nginxtest \ --mount source=nginx-vol,destination=/usr/share/nginx/html \ nginx:latest
source指定volume,destination指定容器內的文件或文件夾。
或者使用-v參數:
$ docker run -d \ --name=nginxtest \ -v nginx-vol:/usr/share/nginx/html \ nginx:latest
掛載成功后,容器從/usr/share/nginx/html目錄下讀取或寫入數據,實際上都是從宿主機的nginx-vol數據卷中讀取或寫入數據。因此Volumes或Bind mounts也可以看作是容器和宿主機共享文件的一種方式。
-v參數使用冒號分割source和destination,冒號前半部分是source,后半部分是destination。
如果你掛載一個還不存在的數據卷,Docker會自動創(chuàng)建它。(因此創(chuàng)建數據卷那一步非必需)
如果容器中的待掛載的目錄不是一個空目錄,那么該目錄下的文件會被復制到數據卷中。(Bind mounts下,宿主機上的目錄總會覆蓋容器中的待掛載目錄)
-v參數和--mount參數總的來說功能幾乎相同,唯一的區(qū)別是在運行一個service時只能夠--mount參數來掛載數據卷。
使用只讀數據卷
有些情況下,我們希望某個數據卷對某個容器來說是只讀的,可以通過添加readonly選項來實現:
$ docker run -d \ --name=nginxtest \ --mount source=nginx-vol,destination=/usr/share/nginx/html,readonly \ nginx:latest
或者使用-v參數:
$ docker run -d \ --name=nginxtest \ -v nginx-vol:/usr/share/nginx/html:ro \ nginx:latest
Volumes使用場景
請參考這篇文章:Docker數據存儲總結
參考文章
https://docs.docker.com/storage/volumes/#share-data-among-machines
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關內容請查看下面相關鏈接
相關文章
使用?Docker安裝?Zabbix并配置自定義監(jiān)控項的過程詳解
Zabbix?可以用來監(jiān)控各種網絡參數,來保證服務器和系統(tǒng)的安全運行,是一個基于?Web?界面提供的分布式系統(tǒng)監(jiān)控以及網絡監(jiān)控功能的企業(yè)級開源解決方案,對Docker?安裝?Zabbix配置自定義監(jiān)控項相關知識感興趣的朋友一起看看吧2022-04-04docker運行PostgreSQL數據庫維護執(zhí)行腳本備份數據庫與更新表結構的方法
這篇文章主要介紹了docker運行PostgreSQL數據庫維護,執(zhí)行腳本備份數據庫與更新表結構,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-05-05