【DevOps系列】Docker數(shù)據(jù)卷(volume)詳解
一、概述
Docker的鏡像是由多個只讀的文件系統(tǒng)疊加在一起形成。啟動一個容器的時候,docker會加載只讀層并在只讀層的上面(棧頂)增加一個讀寫層。如果需要修改只讀層的文件,那么這個文件層需要復(fù)制到讀寫層。該文件的只讀版本還在,只是被上面寫層的文件副本隱藏。當(dāng)刪除docker或重新啟動時,之前的更改文件會消失。在Docker中,只讀層與讀寫層的組合稱為Union File System(聯(lián)合文件系統(tǒng))。Docker將運用與運行的環(huán)境打包形成容器運行,Docker容器產(chǎn)生的數(shù)據(jù),如果不通過docker commits生成新的鏡像,使得數(shù)據(jù)做為鏡像的一部分保存下來,那么當(dāng)容器刪除后,數(shù)據(jù)自然也就沒有,為了能保存數(shù)據(jù)在Docker,Docker設(shè)計了一個機制既卷(Volume)
為了很好的實現(xiàn)數(shù)據(jù)保存和數(shù)據(jù)共享,Docker提出了Volume這個概念,就是繞過默認(rèn)的聯(lián)合文件系統(tǒng),而以正常的文件或者目錄的形式存在于宿主機上,這個目錄或文件稱為數(shù)據(jù)卷。
二、數(shù)據(jù)卷
數(shù)據(jù)卷(Volume)是一個可供一個或多個容器使用的特殊目錄,它繞過UFS,可以提供以下一些特性:
- 數(shù)據(jù)卷可在容器之間共享或重用數(shù)據(jù)。
- 卷中的更改可以直接生效。
- 數(shù)據(jù)卷中的更改不會包含在鏡像的更新中。
- 數(shù)據(jù)卷的生命周期一直持續(xù)到?jīng)]有容器使用它為止。
三、為什么使用數(shù)據(jù)卷volume
卷是在一個或多個容器內(nèi)被選定的目錄,為docker提供持久化數(shù)據(jù)或共享數(shù)據(jù),是docker存儲容器生成和使用的數(shù)據(jù)的首選機制。對卷的修改會直接生效,當(dāng)提交或創(chuàng)建鏡像時,卷不被包括在鏡像中。
數(shù)據(jù)卷的作用:
- 持久化數(shù)據(jù)
- 共享數(shù)據(jù)
數(shù)據(jù)卷的特點:
- 即使生效
- 卷的更新不影響鏡像
- 即使容器停止或被刪除,卷默認(rèn)也一致存在
四、數(shù)據(jù)卷volume基本操作
4.1 創(chuàng)建數(shù)據(jù)卷
使用如下命令可以創(chuàng)建一個數(shù)據(jù)卷
- docker volume create 卷名
docker volume create db_vol
使用這種方式創(chuàng)建的數(shù)據(jù)卷可也被docker volume管理,如查看,刪除等。
4.2 查看數(shù)據(jù)卷
docker volume ls
4.3 查看數(shù)據(jù)卷詳細(xì)信息
- docker volume inspect 卷名
docker volume inspect db_vol
4.4 數(shù)據(jù)卷刪除
- docker volume rm 卷名
docker volume rm db_vol
五、數(shù)據(jù)卷的使用
5.1 先創(chuàng)建數(shù)據(jù)卷在掛載
docker volume create data_volume
5.2 創(chuàng)建容器使用數(shù)據(jù)卷
docker run -d -it \
> --name volumetest \
> --mount source=data-vol,target=/data \
> ubuntu
注:加了“\”意為將最后的回車換行給注釋了,系統(tǒng)理解為命令還沒有結(jié)束,因而是繼續(xù)等待用戶進(jìn)行輸入,直到讀到結(jié)束符。
簡寫方式(-v):
docker run -d -it \
> --name volumetest \
> -v data-vol:/data \
> ubuntu
5.3 直接掛載宿主機目錄
通過這種方式不需要事先創(chuàng)建數(shù)據(jù)卷,直接指定宿主機的一個目錄掛載到容器中,但宿主機中對應(yīng)的目錄要存在,否則會報一下異常
docker: Error response from daemon: invalid mount config for type "bind": bind source path does not exist: /root/vdata.
1). mount方式創(chuàng)建容器命令如下:
docker run -d -it \
> --name volumetest02 \
> --mount type=bind,source=/home/lisen/vdata,target=/vdata \
> ubuntu
2). -v方式創(chuàng)建命令如下:
docker run -dit --name volumetest02 -v /home/lisen/vdata:/vdata ubuntu
5.4 只讀數(shù)據(jù)卷
創(chuàng)建的數(shù)據(jù)卷默認(rèn)是可以讀寫的,這適合于絕大多數(shù)情況,也可以將卷設(shè)置為只讀的
1). mount方式創(chuàng)建容器命令如下:
docker run -d -it \
> --name volumetest02 \
> --mount type=bind,source=/home/lisen/vdata,target=/vdata,ro \
> ubuntu
2). -v方式創(chuàng)建(可以理解為簡寫方式):
docker run -dit --name volumetest02 -v /home/lisen/vdata:/vdata:ro ubuntu
數(shù)據(jù)卷的主要作用是數(shù)據(jù)持久化和數(shù)據(jù)共享,所以一般不用只讀方式。
5.5 數(shù)據(jù)卷容器
用途:數(shù)據(jù)卷容器主要目的是多個容器之間共享一些持續(xù)更新的數(shù)據(jù),數(shù)據(jù)卷容器也是一個容器,專門提供數(shù)據(jù)卷給其他容器掛載。
1).新建數(shù)據(jù)卷容器
docker run -it -d --name data-volume-con -v /data ubuntu
2).新建一個容器來使用數(shù)據(jù)卷容器
docker run -it -d --name db-con-1 --volumes-from data-volume-con ubuntu
參數(shù)–volumes-from用于指定數(shù)據(jù)卷容器;進(jìn)入新建的容器,在掛載的目錄中(data目錄,既創(chuàng)建數(shù)據(jù)卷容器時指定的目錄)新建一個測試文件。
5.6 數(shù)據(jù)卷容器
1).?dāng)?shù)據(jù)卷的備份
創(chuàng)建一個容器,該容器既掛載了需要備份的數(shù)據(jù)卷(有volumes-from參數(shù)指定),又掛載了用來備份數(shù)據(jù)的數(shù)據(jù)卷(可以用-v參數(shù)指定),通過tar壓縮命令,將volumes-from參數(shù)指定的需要備份的數(shù)據(jù)卷,壓縮到用來備份的數(shù)據(jù)卷中(等同于保存到了宿主機對應(yīng)的目錄中)。
docker run --rm \
> --name backup \
> --volumes-from data-volume-con \
> -v /host-backup:/con-backup \
> ubuntu tar cvf /con-backup/backup200201.tar /data
- –rm 參數(shù),指定了創(chuàng)建的容器為臨時容器,運行完后將自動刪除,我們只是借助這個容器完成備份,備份完成后數(shù)據(jù)存放于宿主機中,容器自然也就不需要了。
- –volumes-from 參數(shù),指定了需要備份的數(shù)據(jù)卷容器
- -v 參數(shù),指定了用來備份數(shù)據(jù)的數(shù)據(jù)卷,/host-backup為宿主機目錄,/con-backup為對應(yīng)的容器目錄
- tar 命令完成數(shù)據(jù)壓縮,注意壓縮的源為容器目錄,因為壓縮命令實際上實在容器中執(zhí)行的,確切的說是在backup容器中執(zhí)行(–name參數(shù)指定的),壓縮完成后自然也會保存到宿主機目錄。
2).?dāng)?shù)據(jù)還原
新建一個數(shù)據(jù)卷容器,這個容器作為存放還原數(shù)據(jù)的容器。文章來源:http://www.zghlxwxcb.cn/news/detail-724241.html
docker run -it --name data-volume-con2 -v /data ubuntu
創(chuàng)建一個臨時容器,既掛載了用于存放還原數(shù)據(jù)的數(shù)據(jù)卷容器,又掛載了存有備份數(shù)據(jù)的數(shù)據(jù)卷,然后使用tar命令,將備份的數(shù)據(jù)解壓到存放還原數(shù)據(jù)的數(shù)據(jù)卷中。文章來源地址http://www.zghlxwxcb.cn/news/detail-724241.html
- –rm 參數(shù),請參見“數(shù)據(jù)備份”部分的解釋
- –volumes-from 參數(shù),指定用于保存還原數(shù)據(jù)的容器
- -v 參數(shù), 用于指定存有備份數(shù)據(jù)的數(shù)據(jù)卷,/host-backup是宿主機上用來存放備份數(shù)據(jù)的目錄,將其掛載到容器的/container-back目錄,tar命令通過/container-back
到了這里,關(guān)于【DevOps系列】Docker數(shù)據(jù)卷(volume)詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!