將數(shù)據(jù)存儲在容器中,一旦容器被刪除,數(shù)據(jù)也會被刪除。同時也會使容器變得越來越大,不方便恢復和遷移。
將數(shù)據(jù)存儲到容器之外,這樣刪除容器也不會丟失數(shù)據(jù)。一旦容器故障,我們可以重新創(chuàng)建一個容器,將數(shù)據(jù)掛載到容器里,就可以快速的恢復。
存儲方式
-
volume 卷
卷存儲在主機文件系統(tǒng)分配一塊專有存儲區(qū)域,由 Docker(在 Linux 上)管理,并且與主機的核心功能隔離。非 Docker 進程不能修改文件系統(tǒng)的這一部分。卷是在 Docker 中持久保存數(shù)據(jù)的最佳方式。 -
bind mount 綁定掛載
綁定掛載可以將主機文件系統(tǒng)上目錄或文件裝載到容器中,但是主機上的非 Docker 進程可以修改它們,同時在容器中也可以更改主機文件系統(tǒng),包括創(chuàng)建、修改或刪除文件或目錄,使用不當,可能會帶來安全隱患。 -
tmpfs 臨時掛載
tmpfs掛載僅存儲在主機系統(tǒng)的內(nèi)存中,從不寫入主機系統(tǒng)的文件系統(tǒng)。當容器停止時,數(shù)據(jù)將被刪除。
?綁定掛載(bind mount)
綁定掛載適用以下場景:
- 將配置文件從主機共享到容器。
- 在 Docker 主機上的開發(fā)環(huán)境和容器之間共享源代碼或編譯目錄。
例如,可以將 Maven 的target/
目錄掛載到容器中,每次在主機上用 Maven打包項目時,容器內(nèi)都可以使用新編譯的程序包。
-V
綁定掛載將主機上的目錄或者文件裝載到容器中。綁定掛載會覆蓋容器中的目錄或文件。
如果宿主機目錄不存在,docker會自動創(chuàng)建這個目錄。但是docker只自動創(chuàng)建文件夾,不會創(chuàng)建文件。
例如,mysql的配置文件和數(shù)據(jù)存儲目錄使用主機的目錄??梢詫⑴渲梦募O置為只讀(read-only)防止容器更改主機中的文件。
docker run -e MYSQL_ROOT_PASSWORD=123456 \
-v /home/mysql/mysql.cnf:/etc/mysql/conf.d/mysql.cnf:ro \
-v /home/mysql/data:/var/lib/mysql \
-d mysql:5.7
--tmpfs 臨時掛載?
docker run -d -it --tmpfs /tmp nginx:1.22-alpine
volume 卷?
卷是docker 容器存儲數(shù)據(jù)的首選方式,卷有以下優(yōu)勢:
- 卷可以在多個正在運行的容器之間共享數(shù)據(jù)。僅當顯式刪除卷時,才會刪除卷。
- 當你想要將容器數(shù)據(jù)存儲在外部網(wǎng)絡存儲上或云提供商上,而不是本地時。
- 卷更容易備份或遷移,當您需要備份、還原數(shù)據(jù)或?qū)?shù)據(jù)從一個 Docker 主機遷移到另一個 Docker 主機時,卷是更好的選擇。
創(chuàng)建和掛載卷
docker volume create my-data
docker run -e MYSQL_ROOT_PASSWORD=123456 \
-v /home/mysql/conf.d/my.cnf:/etc/mysql/conf.d/my.cnf:ro \
-v my-data:/var/lib/mysql \
-d mysql:5.7
創(chuàng)建nfs卷文章來源:http://www.zghlxwxcb.cn/news/detail-829583.html
docker volume create --driver local \
--opt type=nfs \
--opt o=addr=192.168.10.1,rw \
--opt device=:/path/to/dir \
vol-nfs
?文章來源地址http://www.zghlxwxcb.cn/news/detail-829583.html
到了這里,關于docker (五)-docker存儲-數(shù)據(jù)持久化的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!