Docker基礎(chǔ):數(shù)據(jù)卷技術(shù)介紹
?今天給大家簡單聊聊Docker中的數(shù)據(jù)卷知識。
1.Docker數(shù)據(jù)管理
大家在生產(chǎn)環(huán)境使用Docker部署項(xiàng)目的時(shí)候,基本都需要進(jìn)行數(shù)據(jù)持久化、或多個(gè)容器間進(jìn)行數(shù)據(jù)共享,這個(gè)就需要容器的數(shù)據(jù)管理來進(jìn)行操作。
1.2 Docker數(shù)據(jù)持久化
Docker數(shù)據(jù)持久化就是容器中的數(shù)據(jù)不會隨著容器的結(jié)束而隨之結(jié)束,在Docker中如果需要實(shí)現(xiàn)數(shù)據(jù)的持久化,前提把數(shù)據(jù)從Docker容器掛載到宿主主機(jī)上去。
1.2 容器中數(shù)據(jù)管理的方式
數(shù)據(jù)卷(Data Volumes):容器內(nèi)的數(shù)據(jù)直接映射到宿主主機(jī)環(huán)境
數(shù)據(jù)卷容器(Data Volume Containers):使用特定容器維護(hù)數(shù)據(jù)卷
2.數(shù)據(jù)卷的介紹
數(shù)據(jù)卷是一個(gè)可供容器內(nèi)部使用的特殊目錄,它將宿主主機(jī)的操作系統(tǒng)目錄直接映射進(jìn)容器內(nèi),類似于Linux系統(tǒng)中的 mount 操作。
2.1 數(shù)據(jù)卷作用
容器的持久化、容器間繼承 + 共享數(shù)據(jù)
2.2 卷的概念
本質(zhì)就是目錄或文件,存在于一個(gè)或多個(gè)容器中,由docker掛載到容器中,但不屬于聯(lián)合文件系統(tǒng),因此能夠繞過合文件系統(tǒng)提供一些用于持續(xù)存儲或共享數(shù)據(jù)的特性。卷的目的就是實(shí)現(xiàn)數(shù)據(jù)的持久化,完全獨(dú)立于容器的生存周期,因此Docker不會在容器刪除時(shí)同時(shí)刪除其掛載的數(shù)據(jù)卷。
2.3 數(shù)據(jù)卷的特點(diǎn)
- 數(shù)據(jù)卷可以在容器之間實(shí)現(xiàn)共享和重用,容器間傳遞數(shù)據(jù)將變的高效方便
- 對數(shù)據(jù)卷內(nèi)數(shù)據(jù)的修改會立馬生效,無論是容器內(nèi)操作還是本地操作
- 對數(shù)據(jù)卷的更新不會影響Docker鏡像,解耦了應(yīng)用和數(shù)據(jù)
- 數(shù)據(jù)卷的生命令周期不受容器的影響,除非你卸載它。
3.Docker數(shù)據(jù)卷常見的作用
- 數(shù)據(jù)持久化:比如MySQL數(shù)據(jù)庫,數(shù)據(jù)目錄要掛載到宿主主機(jī)或者別的地方,否則MySQL容器刪除你的數(shù)據(jù)也會隨之刪除。
- 同步操作:比如我需要修改nginx的配置文件,不需要在進(jìn)入容器內(nèi)部,可以直接修改數(shù)據(jù)卷對應(yīng)的文件就可以進(jìn)行配置實(shí)時(shí)同步。
- 容器間數(shù)據(jù)共享:多個(gè)容器之間需要數(shù)據(jù)共享的時(shí)候
4.操作數(shù)據(jù)卷
4.1 常用命令
docker volume 指令值
指令值:
- create:創(chuàng)建一個(gè)volume
- inspect:顯示一個(gè)或多個(gè)volume的信息
- ls :列出所有的volume
- prune :刪除未使用的volume
- rm:刪除一個(gè)或多個(gè)指定的volume
4.2 掛載數(shù)據(jù)卷
創(chuàng)建數(shù)據(jù)卷myvolume;
docker volume create myvolume
運(yùn)行nginx容器;
docker run --name nginxtest -v myvolume:/usr/share/nginx/html -p 8000:80 -d nginx
查看數(shù)據(jù)卷掛載信息;
docker volume inspect myvolume
數(shù)據(jù)卷新增文件并查看容器內(nèi)掛載的目錄文件是否同步;
cd /var/lib/docker/volumes/myvolume/_data #進(jìn)入容器卷目錄
vi test.html #創(chuàng)建test.html 目錄
ls
進(jìn)入容器查看目錄是否正常同步;
docker exec -it nginxtest /bin/bash
cd /usr/share/nginx/html
ls
容器內(nèi)刪除test.html 查看myvolume是否也刪除了;
rm test.html