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)萜鞯脑敿毿畔?,找到Mounts就是數(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部署MongoDB數(shù)據(jù)庫的實現(xiàn)步驟
Docker可以提供一個輕量級、可移植的容器化環(huán)境,使得MongoDB的部署變得更加簡單和靈活,本文主要介紹了docker部署MongoDB數(shù)據(jù)庫的實現(xiàn)步驟,具有一定的參考價值,感興趣的可以了解一下2024-04-04docker-compose ports和expose的區(qū)別詳解
這篇文章主要介紹了docker-compose ports和expose的區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01Docker容器定時備份數(shù)據(jù)庫并發(fā)送到指定郵箱(設(shè)計思路)
這篇文章主要介紹了Docker容器定時備份數(shù)據(jù)庫并發(fā)送到指定郵箱,文中寫了一下shell腳本,邏輯也很簡單,當前時間與啟動時間相同時,則調(diào)用sendmail函數(shù)發(fā)送郵件,具體腳本跟隨小編一起看看吧2022-01-01