淺談Docker數(shù)據(jù)持久化
容器中數(shù)據(jù)持久化主要有兩種方式:
- 數(shù)據(jù)卷(Data Volumes)
- 數(shù)據(jù)卷容器(Data Volumes Dontainers)
數(shù)據(jù)卷
數(shù)據(jù)卷是一個(gè)可供一個(gè)或多個(gè)容器使用的特殊目錄,可以繞過(guò)UFS(Unix File System)。
- 數(shù)據(jù)卷可以在容器之間共享和重用
- 對(duì)數(shù)據(jù)卷的修改會(huì)立馬生效
- 對(duì)數(shù)據(jù)卷的更新,不會(huì)影響鏡像
- 數(shù)據(jù)卷默認(rèn)會(huì)一直存在,即使容器被刪除
- 一個(gè)容器可以掛載多個(gè)數(shù)據(jù)卷
注意:數(shù)據(jù)卷的使用,類似于 Linux 下對(duì)目錄或文件進(jìn)行 mount。
創(chuàng)建數(shù)據(jù)卷
示例:
docker run --name nginx-data -v /mydir nginx
執(zhí)行如下命令即可查看容器構(gòu)造的詳情:
docker inspect 容器ID
由測(cè)試可知:
- Docker會(huì)自動(dòng)生成一個(gè)目錄作為掛載的目錄。
- 即使容器被刪除,宿主機(jī)中的目錄也不會(huì)被刪除。
刪除數(shù)據(jù)卷
數(shù)據(jù)卷是被設(shè)計(jì)來(lái)持久化數(shù)據(jù)的,因此,刪除容器并不會(huì)刪除數(shù)據(jù)卷。如果想要在刪除容器時(shí)同時(shí)刪除數(shù)據(jù)卷,可使用如下命令:
docker rm -v 容器ID
這樣既可在刪除容器的同時(shí)也將數(shù)據(jù)卷刪除。
掛載宿主機(jī)目錄作為數(shù)據(jù)卷
docker run --name nginx-data2 -v /host-dir:/container-dir nginx
這樣既可將宿主機(jī)的/host-dir路徑加載到容器的/container-dir中。
需要注意的是:
宿主機(jī)路徑盡量設(shè)置絕對(duì)路徑——如果使用相對(duì)路徑會(huì)怎樣?
- 測(cè)試給答案
如果宿主機(jī)路徑不存在,Docker會(huì)自動(dòng)創(chuàng)建
TIPS
Dockerfile暫時(shí)不支持這種形式。
掛載宿主機(jī)文件作為數(shù)據(jù)卷
docker run --name nginx-data3 -v /文件路徑:/container路徑 nginx
指定權(quán)限
默認(rèn)情況下,掛載的權(quán)限是讀寫權(quán)限。也可使用:ro 參數(shù)指定只讀權(quán)限。
示例:
docker run --name nginx-data4 -v /host-dir:/container-dir:ro nginx
這樣,在容器中就只能讀取/container-dir中的文件,而不能修改了。
數(shù)據(jù)卷容器
如果有數(shù)據(jù)需要在多個(gè)容器之間共享,此時(shí)可考慮使用數(shù)據(jù)卷容器。
創(chuàng)建數(shù)據(jù)卷容器:
docker run --name nginx-volume -v /data nginx
在其他容器中使用-volumes-from 來(lái)掛載nginx-volume容器中的數(shù)據(jù)卷。
docker run --name v1 --volumes-from nginx-volume nginx docker run --name v2 --volumes-from nginx-volume nginx
這樣:
v1、v2兩個(gè)容器即可共享nginx-volume這個(gè)容器中的文件。
即使nginx-volume停止,也不會(huì)有任何影響。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Docker下MySQL配置文件不生效的解決方法(超全面!)
在Docker中運(yùn)行MySQL并遇到需要調(diào)整配置的情況時(shí),比如想要關(guān)閉ONLY_FULL_GROUP_BY的嚴(yán)格模式,我們可以通過(guò)以下步驟來(lái)實(shí)現(xiàn)sql_mode的修改:以下是解決此類問(wèn)題的步驟和思路,需要的朋友可以參考下2024-09-09docker內(nèi)的容器如何與宿主機(jī)共享IP的方法
本文主要介紹了docker內(nèi)的容器如何與宿主機(jī)共享IP的方法,文中根據(jù)實(shí)例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03docker部署Vaultwarden密碼共享管理系統(tǒng)的實(shí)現(xiàn)(圖文)
Vaultwarden是一個(gè)開源的密碼管理器,它提供了類似于Bitwarden的功能,允許用戶安全地存儲(chǔ)和管理密碼、敏感數(shù)據(jù)和身份信息,本文主要介紹了docker部署Vaultwarden密碼共享管理系統(tǒng)的實(shí)現(xiàn),感興趣的可以了解一下2023-10-10Docker 容器內(nèi)存監(jiān)控原理及應(yīng)用
這篇文章主要介紹了Docker 容器內(nèi)存監(jiān)控原理及應(yīng)用的相關(guān)資料,需要的朋友可以參考下2016-10-10用Docker搭建nextcloud個(gè)人網(wǎng)盤教程
大家好,本篇文章主要講的是用Docker搭建nextcloud個(gè)人網(wǎng)盤教程,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下2021-12-12docker安裝后導(dǎo)致的網(wǎng)絡(luò)問(wèn)題及解決
這篇文章主要介紹了docker安裝后導(dǎo)致的網(wǎng)絡(luò)問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11docker rm -f 容器id 無(wú)效的問(wèn)題解決
當(dāng)遇到“Error response from daemon: cannot stop container: d208b8055fd0: permission denied”錯(cuò)誤,表示缺乏停止Docker容器的權(quán)限,本文就來(lái)介紹一下如何解決,感興趣的可以了解一下2024-09-09