Docker實(shí)現(xiàn)掛載的方式匯總
docker掛載
默認(rèn)情況下,在Docker容器內(nèi)創(chuàng)建的所有文件都只能在容器內(nèi)部使用。容器刪除后,數(shù)據(jù)也跟著刪除,雖然通常我們不會(huì)刪除容器,但是一旦宿主機(jī)發(fā)生故障,我們重新創(chuàng)建容器恢復(fù)服務(wù),那么之前容器創(chuàng)建的文件就會(huì)丟失。所以我們需要將容器數(shù)據(jù)寫到宿主機(jī)內(nèi),方便我們數(shù)據(jù)的存儲(chǔ)、修改和共享。
那么這時(shí)候就需要使用到我們的掛載技術(shù)了,掛載技術(shù)就是將容器的文件路徑掛載到宿主機(jī)的文件系統(tǒng)路徑上,這樣在容器更改文件可以同步到宿主機(jī),在宿主機(jī)更改文件也可以同步到容器,而且我們多個(gè)容器可以掛載到一個(gè)宿主機(jī)的文件目錄,實(shí)現(xiàn)數(shù)據(jù)共享
實(shí)現(xiàn)掛載的方式
Docker實(shí)現(xiàn)掛載有多種方式,下面是我了解到的一些方式
綁定掛載
綁定掛載(Bind Mounts):綁定掛載是將主機(jī)上的文件或目錄掛載到容器中,是在允許容器時(shí)使用-v參數(shù)來指定掛載的目錄,下面是運(yùn)行指令
docker run -v /host/path:/container/path image_name
注:/host/path:為宿主機(jī)地址,/container/path為容器地址
容器啟動(dòng)起來以后,我們可以通過docker inspect 容器id命令查看是否掛載成功,如果出現(xiàn)“Mounts”屬性則掛載成功。
數(shù)據(jù)卷(Volume)掛載
數(shù)據(jù)卷掛載就是將 Docker 數(shù)據(jù)卷掛載到容器中。數(shù)據(jù)卷是一個(gè)可供一個(gè)或多個(gè)容器使用的特殊目錄,用于存儲(chǔ)數(shù)據(jù)和共享數(shù)據(jù)。它獨(dú)立于容器的生命周期,容器可以在掛載點(diǎn)讀取和寫入數(shù)據(jù),就像使用普通目錄一樣。
一般數(shù)據(jù)卷的都放在docker的工作目錄/var/lib/docker/volume/下
數(shù)據(jù)卷分為兩種:一種是具名數(shù)據(jù)卷,一種是匿名數(shù)據(jù)卷。具名是自定義了數(shù)據(jù)卷文件夾的名字,匿名的話就是docker會(huì)分配一個(gè)默認(rèn)的名字
下面創(chuàng)建一個(gè)具名數(shù)據(jù)卷
# 創(chuàng)建數(shù)據(jù)卷 docker volume create myvolume 注:myvolume為數(shù)據(jù)卷的名稱 # 查看所有數(shù)據(jù)卷 docker volume ls # 查看指定數(shù)據(jù)卷Mountpoint屬性,可以看到數(shù)據(jù)卷的具體位置 docker volume inspect myvolume [ { "CreatedAt": "2023-11-08T14:44:09+08:00", "Driver": "local", "Labels": null, "Mountpoint": "/var/lib/docker/volumes/myvolume/_data", "Name": "myvolume", "Options": null, "Scope": "local" } ] 創(chuàng)建了具名數(shù)據(jù)卷之后,我們就可以使用這個(gè)數(shù)據(jù)卷來綁定容器了,綁定容器有以下兩種方式 # 使用-v參數(shù) docker run -d -v myvolume:/app/logs -p 8000:8000 image_name # 使用--mount參數(shù)(可指定更詳細(xì)參數(shù)) docker run --mount source=myvolume,target=/app/logs -p 8000:8000 image_name 注:image_name為鏡像名
下面為匿名掛載
匿名掛載我們不需要先創(chuàng)建數(shù)據(jù)卷,只需要在運(yùn)行時(shí)使用-v參數(shù),并指定容器路徑,那么docker久會(huì)為該路徑創(chuàng)建一個(gè)隨機(jī)名稱的文件夾進(jìn)行掛載
#下面命令就會(huì)為/etc/nginx生成一個(gè)數(shù)據(jù)卷,我們可以使用docker volume ls查看 docker run -d -P --name nginx01 -v /etc/nginx nginx
我們掛載的時(shí)候還可以指定容器對(duì)于數(shù)據(jù)卷的讀寫權(quán)限
:ro 容器只能讀
:rw 容器可讀可寫
不指定的話默認(rèn)用:rw
#下面設(shè)置為只讀 docker run -d -P --name nginx01 -v /etc/nginx:ro nginx
DockerFile 定義數(shù)據(jù)卷
我們?cè)谑褂肈ockerFile進(jìn)行創(chuàng)建鏡像的時(shí)候,就可以創(chuàng)建數(shù)據(jù)卷
DockerFile創(chuàng)建數(shù)據(jù)卷的指令是:VOLUME
注:VOLUME 生成的都是匿名數(shù)據(jù)卷,不能指定主機(jī)目錄
語法:
VOLUME ["鏡像內(nèi)部的路徑1","鏡像內(nèi)部的路徑2","鏡像內(nèi)部的路徑3",.......]
實(shí)例:
FROM centos VOLUME ["/data1","/data2"]
使用這個(gè)DockerFile創(chuàng)建鏡像后,就會(huì)自動(dòng)創(chuàng)建兩個(gè)數(shù)據(jù)卷掛載點(diǎn)
對(duì)于匿名數(shù)據(jù)卷,我們可以使用下面步驟來查詢?nèi)萜鲗?duì)應(yīng)的數(shù)據(jù)卷
1、先查詢運(yùn)行中的容器,獲取到容器ID(container_id)
docker ps -a
2、再使用docker inspect查詢?nèi)萜鞯脑敿?xì)信息,找到Mounts就是數(shù)據(jù)卷的信息了
docker inspect container_id
臨時(shí)文件系統(tǒng)(tmpfs)掛載掛載
臨時(shí)文件系統(tǒng)掛載允許將臨時(shí)文件系統(tǒng)掛載到容器的指定路徑。與文件掛載和數(shù)據(jù)卷掛載不同,臨時(shí)文件系統(tǒng)掛載僅在容器的生命周期內(nèi)存在,并且不會(huì)對(duì)主機(jī)文件系統(tǒng)產(chǎn)生影響??梢酝ㄟ^在運(yùn)行容器時(shí)使用 --tmpfs 參數(shù)來指定臨時(shí)文件系統(tǒng)掛載
實(shí)例:
docker run --tmpfs /container/path image_name```
到此這篇關(guān)于Docker實(shí)現(xiàn)掛載的N種方式的文章就介紹到這了,更多相關(guān)docker掛載內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
docker部署MongoDB數(shù)據(jù)庫(kù)的實(shí)現(xiàn)步驟
Docker可以提供一個(gè)輕量級(jí)、可移植的容器化環(huán)境,使得MongoDB的部署變得更加簡(jiǎn)單和靈活,本文主要介紹了docker部署MongoDB數(shù)據(jù)庫(kù)的實(shí)現(xiàn)步驟,具有一定的參考價(jià)值,感興趣的可以了解一下2024-04-04一文詳解如何修改Docker的默認(rèn)存儲(chǔ)路徑
這篇文章主要介紹了關(guān)于如何修改Docker的默認(rèn)存儲(chǔ)路徑的相關(guān)資料,默認(rèn)安裝的情況下,會(huì)使用 /var/lib/docker/ 目錄作為存儲(chǔ)目錄,用以存放拉取的鏡像和創(chuàng)建的容器等,這個(gè)路徑是系統(tǒng)存儲(chǔ)目錄,一般空間會(huì)比較小,需要的朋友可以參考下2023-08-08docker-compose ports和expose的區(qū)別詳解
這篇文章主要介紹了docker-compose ports和expose的區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01Docker容器定時(shí)備份數(shù)據(jù)庫(kù)并發(fā)送到指定郵箱(設(shè)計(jì)思路)
這篇文章主要介紹了Docker容器定時(shí)備份數(shù)據(jù)庫(kù)并發(fā)送到指定郵箱,文中寫了一下shell腳本,邏輯也很簡(jiǎn)單,當(dāng)前時(shí)間與啟動(dòng)時(shí)間相同時(shí),則調(diào)用sendmail函數(shù)發(fā)送郵件,具體腳本跟隨小編一起看看吧2022-01-01