Docker實現(xiàn)掛載的方式匯總
docker掛載
默認情況下,在Docker容器內(nèi)創(chuàng)建的所有文件都只能在容器內(nèi)部使用。容器刪除后,數(shù)據(jù)也跟著刪除,雖然通常我們不會刪除容器,但是一旦宿主機發(fā)生故障,我們重新創(chuàng)建容器恢復(fù)服務(wù),那么之前容器創(chuàng)建的文件就會丟失。所以我們需要將容器數(shù)據(jù)寫到宿主機內(nèi),方便我們數(shù)據(jù)的存儲、修改和共享。
那么這時候就需要使用到我們的掛載技術(shù)了,掛載技術(shù)就是將容器的文件路徑掛載到宿主機的文件系統(tǒng)路徑上,這樣在容器更改文件可以同步到宿主機,在宿主機更改文件也可以同步到容器,而且我們多個容器可以掛載到一個宿主機的文件目錄,實現(xiàn)數(shù)據(jù)共享
實現(xiàn)掛載的方式
Docker實現(xiàn)掛載有多種方式,下面是我了解到的一些方式
綁定掛載
綁定掛載(Bind Mounts):綁定掛載是將主機上的文件或目錄掛載到容器中,是在允許容器時使用-v參數(shù)來指定掛載的目錄,下面是運行指令
docker run -v /host/path:/container/path image_name
注:/host/path:為宿主機地址,/container/path為容器地址
容器啟動起來以后,我們可以通過docker inspect 容器id命令查看是否掛載成功,如果出現(xiàn)“Mounts”屬性則掛載成功。
數(shù)據(jù)卷(Volume)掛載
數(shù)據(jù)卷掛載就是將 Docker 數(shù)據(jù)卷掛載到容器中。數(shù)據(jù)卷是一個可供一個或多個容器使用的特殊目錄,用于存儲數(shù)據(jù)和共享數(shù)據(jù)。它獨立于容器的生命周期,容器可以在掛載點讀取和寫入數(shù)據(jù),就像使用普通目錄一樣。
一般數(shù)據(jù)卷的都放在docker的工作目錄/var/lib/docker/volume/下
數(shù)據(jù)卷分為兩種:一種是具名數(shù)據(jù)卷,一種是匿名數(shù)據(jù)卷。具名是自定義了數(shù)據(jù)卷文件夾的名字,匿名的話就是docker會分配一個默認的名字
下面創(chuàng)建一個具名數(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ù)卷之后,我們就可以使用這個數(shù)據(jù)卷來綁定容器了,綁定容器有以下兩種方式
# 使用-v參數(shù)
docker run -d -v myvolume:/app/logs -p 8000:8000 image_name
# 使用--mount參數(shù)(可指定更詳細參數(shù))
docker run --mount source=myvolume,target=/app/logs -p 8000:8000 image_name
注:image_name為鏡像名下面為匿名掛載
匿名掛載我們不需要先創(chuàng)建數(shù)據(jù)卷,只需要在運行時使用-v參數(shù),并指定容器路徑,那么docker久會為該路徑創(chuàng)建一個隨機名稱的文件夾進行掛載
#下面命令就會為/etc/nginx生成一個數(shù)據(jù)卷,我們可以使用docker volume ls查看 docker run -d -P --name nginx01 -v /etc/nginx nginx
我們掛載的時候還可以指定容器對于數(shù)據(jù)卷的讀寫權(quán)限
:ro 容器只能讀
:rw 容器可讀可寫
不指定的話默認用:rw
#下面設(shè)置為只讀 docker run -d -P --name nginx01 -v /etc/nginx:ro nginx
DockerFile 定義數(shù)據(jù)卷
我們在使用DockerFile進行創(chuàng)建鏡像的時候,就可以創(chuàng)建數(shù)據(jù)卷
DockerFile創(chuàng)建數(shù)據(jù)卷的指令是:VOLUME
注:VOLUME 生成的都是匿名數(shù)據(jù)卷,不能指定主機目錄
語法:
VOLUME ["鏡像內(nèi)部的路徑1","鏡像內(nèi)部的路徑2","鏡像內(nèi)部的路徑3",.......]
實例:
FROM centos VOLUME ["/data1","/data2"]
使用這個DockerFile創(chuàng)建鏡像后,就會自動創(chuàng)建兩個數(shù)據(jù)卷掛載點
對于匿名數(shù)據(jù)卷,我們可以使用下面步驟來查詢?nèi)萜鲗?yīng)的數(shù)據(jù)卷
1、先查詢運行中的容器,獲取到容器ID(container_id)
docker ps -a
2、再使用docker inspect查詢?nèi)萜鞯脑敿毿畔ⅲ业組ounts就是數(shù)據(jù)卷的信息了
docker inspect container_id
臨時文件系統(tǒng)(tmpfs)掛載掛載
臨時文件系統(tǒng)掛載允許將臨時文件系統(tǒng)掛載到容器的指定路徑。與文件掛載和數(shù)據(jù)卷掛載不同,臨時文件系統(tǒng)掛載僅在容器的生命周期內(nèi)存在,并且不會對主機文件系統(tǒng)產(chǎn)生影響。可以通過在運行容器時使用 --tmpfs 參數(shù)來指定臨時文件系統(tǒng)掛載
實例:
docker run --tmpfs /container/path image_name```
到此這篇關(guān)于Docker實現(xiàn)掛載的N種方式的文章就介紹到這了,更多相關(guān)docker掛載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
docker-compose中l(wèi)ink和external_links的區(qū)別及說明
拆分docker-compose.yml導(dǎo)致depends_on、links和external網(wǎng)絡(luò)配置失效,因compose限制及Portainer命名沖突,解決方案為使用external_links或手動創(chuàng)建網(wǎng)絡(luò)2025-09-09
用docker部署RabbitMQ環(huán)境的詳細介紹
這篇文章主要介紹了用docker部署RabbitMQ環(huán)境,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-07-07
Docker容器網(wǎng)絡(luò)互聯(lián)的項目實踐
docker中的容器都是連接到一個虛擬的網(wǎng)橋上的,這為獨立的容器提供了互聯(lián)的可能,本文主要介紹了Docker容器網(wǎng)絡(luò)互聯(lián)的項目實踐,具有一定的參考價值,感興趣的可以了解一下2024-03-03

