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

