搜尋
首頁運維Dockerdocker有哪幾種掛載方式

方式:1、利用run指令,語法為「docker run --name test1 -it -v」;2、利用dockerfile的VOLUME指令建立掛載點,語法為「VOLUME ["/data1" ,"/data2"]”;3、利用容器共享卷。

docker有哪幾種掛載方式

本教學操作環境:linux7.3系統、docker-1.13.1版、Dell G3電腦。

docker有哪幾種掛載方式

在介紹VOLUME指令之前,我們來看下如下場景需求:

1.容器是基於映像建立的,最後的容器檔案系統包括鏡像的唯讀層可寫層,容器中的程序操作的資料持久化都是保存在容器的可寫層上。一旦容器刪除後,這些資料就沒了,除非我們人工備份下來(或基於容器建立新的鏡像)。能否讓容器程序持久化的資料保存在主機上呢?這樣即使容器刪除了,資料還在。

2. 當我們在開發一個web應用時,開發環境是在主機本地,但運行測試環境是放在docker容器上。

這樣的話,我在主機上修改檔案(如html,js等)後,需要再同步到容器中。這顯然比較麻煩。

3. 多個容器運行一組相關聯的服務,如果他們要共享一些資料怎麼辦?

對於這些問題,我們當然能想到各種解決方案。而docker本身提供了一個機制,可以將主機上的某個目錄與容器的某個目錄(稱為掛載點、或稱為卷宗)關聯起來,容器上的掛載點下的內容就是主機的這個目錄下的內容,這類似linux系統下mount的機制。這樣的話,當我們修改主機上該目錄的內容時,不需要同步容器,對容器來說是立即生效的。掛載點可以讓多個容器共用。

下面我們來介紹具體的實作機制。

一透過docker run指令

1.執行指令:docker run --name test -it -v /home/xqh/myimage:/data ubuntu /bin/bash

其中的-v 標記在容器中設定了一個掛載點/data(就是容器中的一個目錄),並將主機上的/home/xqh/myimage 目錄中的內容關聯到/data下。

這樣在容器中對/data目錄下的操作,還是在主機上對/home/xqh/myimage的操作,都是完全即時同步的,因為這兩個目錄實際上都是指向主機目錄。

2.執行指令:docker run --name test1 -it -v /data ubuntu /bin/bash

上面-v的標記只設定了容器的掛載點,並沒有指定關聯的主機目錄。這時docker會自動綁定主機上的目錄。透過docker inspect 指令可以查看到。

xqh@ubuntu:~/myimage$ docker inspect test1
[
{
    "Id": "1fd6c2c4bc545163d8c5c5b02d60052ea41900a781a82c20a8f02059cb82c30c",
.............................
    "Mounts": [
        {
            "Name": "0ab0aaf0d6ef391cb68b72bd8c43216a8f8ae9205f0ae941ef16ebe32dc9fc01",
            "Source": "/var/lib/docker/volumes/0ab0aaf0d6ef391cb68b72bd8c43216a8f8ae9205f0ae941ef16ebe32dc9fc01/_data",
            "Destination": "/data",
            "Driver": "local",
            "Mode": "",
            "RW": true
        }
    ],

上面 Mounts下的每個訊息記錄了容器上一個掛載點的信息,「Destination」 值是容器的掛載點,"Source"值是對應的主機目錄。可以看出這種方式對應的主機目錄是自動建立的,其目的不是讓在主機上修改,而是讓多個容器共用。

二 透過dockerfile建立掛載點

上面介紹的透過docker run指令的-v標識所建立的掛載點只能對所建立的容器有效。透過dockerfile的 VOLUME 指令可以在映像中建立掛載點,這樣只要透過該映像建立的容器都有了掛載點。還有一個差異是,透過 VOLUME 指令建立的掛載點,無法指定主機上對應的目錄,是自動產生的。

#test
FROM ubuntu
MAINTAINER hello1
VOLUME ["/data1","/data2"]

上面的dockfile檔案透過VOLUME指令指定了兩個掛載點/data1 和/data2.

我們透過docker inspect 查看透過該dockerfile所建立的映像所產生的容器,可以看到以下資訊

"Mounts": [
    {
        "Name": "d411f6b8f17f4418629d4e5a1ab69679dee369b39e13bb68bed77aa4a0d12d21",
        "Source": "/var/lib/docker/volumes/d411f6b8f17f4418629d4e5a1ab69679dee369b39e13bb68bed77aa4a0d12d21/_data",
        "Destination": "/data1",
        "Driver": "local",
        "Mode": "",
        "RW": true
    },
    {
        "Name": "6d3badcf47c4ac5955deda6f6ae56f4aaf1037a871275f46220c14ebd762fc36",
        "Source": "/var/lib/docker/volumes/6d3badcf47c4ac5955deda6f6ae56f4aaf1037a871275f46220c14ebd762fc36/_data",
        "Destination": "/data2",
        "Driver": "local",
        "Mode": "",
        "RW": true
    }
],

可以看到兩個掛載點的資訊。

三容器共用磁碟區(掛載點)

下面我們建立另一個容器可以和test1(已經建立好的容器)共用/data1 和/data2卷,這是在docker run中使用--volumes-from標記,如:

可以是來源不同鏡像,如:

docker run --name test2 -it --volumes-from test1 ubuntu /bin/bash

也可以是同一鏡像,如:

docker run --name test3 -it --volumes-from test1 myimage /bin/bash

上面的三個容器test1 , test2 , test3 都有/data1 和/data2 兩個目錄,且目錄中內容是共享的,任何一個容器修改了內容,別的容器都能取得。

四最佳實踐:資料容器

如果多個容器需要共用資料(如持久化資料庫、設定檔或資料檔案等),可以考慮建立一個特定的資料容器,該容器有1個或多個卷。

其它容器透過–volumes-from 來共享這個資料容器的磁碟區。

因為容器的磁碟區本質上對應主機上的目錄,所以這個資料容器也不需要啟動。

如: docker run --name dbdata myimage echo “data container”

說明:有個卷,容器之間的資料共享比較方便,但也有很多問題需要解決,如權限控制、資料的備份、磁碟區的刪除等。這些內容後續文章介紹。

推薦學習:《docker影片教學

以上是docker有哪幾種掛載方式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
Docker監視:收集指標和跟踪集裝箱健康Docker監視:收集指標和跟踪集裝箱健康Apr 10, 2025 am 09:39 AM

Docker監控的核心在於收集和分析容器的運行數據,主要包括CPU使用率、內存使用、網絡流量和磁盤I/O等指標。通過使用Prometheus、Grafana和cAdvisor等工具,可以實現對容器的全面監控和性能優化。

Docker群:建築物可擴展和彈性的容器簇Docker群:建築物可擴展和彈性的容器簇Apr 09, 2025 am 12:11 AM

DockerSwarm可用於構建可擴展和高可用性的容器集群。 1)初始化Swarm集群使用dockerswarminit。 2)加入Swarm集群使用dockerswarmjoin--token:。 3)創建服務使用dockerservicecreate--namemy-nginx--replicas3nginx。 4)部署複雜服務使用dockerstackdeploy-cdocker-compose.ymlmyapp。

Kubernetes的Docker:用於企業應用程序的集裝箱編排Kubernetes的Docker:用於企業應用程序的集裝箱編排Apr 08, 2025 am 12:07 AM

如何利用Docker和Kubernetes進行企業應用的容器編排?通過以下步驟實現:創建Docker鏡像並推送到DockerHub。在Kubernetes中創建Deployment和Service以部署應用。使用Ingress管理外部訪問。應用性能優化和最佳實踐,如多階段構建和資源限制。

Docker故障排除:診斷和解決常見問題Docker故障排除:診斷和解決常見問題Apr 07, 2025 am 12:15 AM

Docker常見問題可以通過以下步驟診斷和解決:1.查看容器狀態和日誌,2.檢查網絡配置,3.確保卷掛載正確。通過這些方法,可以快速定位並修復Docker中的問題,提升系統穩定性和性能。

Docker面試問題:Ace您的DevOps工程採訪Docker面試問題:Ace您的DevOps工程採訪Apr 06, 2025 am 12:01 AM

Docker是DevOps工程師必備的技能。 1.Docker是開源的容器化平台,通過將應用程序及其依賴打包到容器中,實現隔離和可移植性。 2.Docker的工作原理包括命名空間、控制組和聯合文件系統。 3.基本用法包括創建、運行和管理容器。 4.高級用法包括使用DockerCompose管理多容器應用。 5.常見錯誤有容器無法啟動、端口映射問題和數據持久化問題,調試技巧包括查看日誌、進入容器和查看詳細信息。 6.性能優化和最佳實踐包括鏡像優化、資源限制、網絡優化和使用Dockerfile的最佳實踐。

Docker安全硬化:保護您的容器免受漏洞Docker安全硬化:保護您的容器免受漏洞Apr 05, 2025 am 12:08 AM

Docker安全強化的方法包括:1.使用--cap-drop參數限制Linux能力,2.創建只讀容器,3.設置SELinux標籤。這些策略通過減少漏洞暴露面和限制攻擊者能力來保護容器安全。

Docker卷:在容器中管理持久數據Docker卷:在容器中管理持久數據Apr 04, 2025 am 12:19 AM

DockerVolumes可確保數據在容器重啟、刪除或遷移時依然安全。 1.創建Volume:dockervolumecreatemydata。 2.運行容器並掛載Volume:dockerrun-it-vmydata:/app/dataubuntubash。 3.高級用法包括數據共享和備份。

高級Docker網絡:掌握橋樑,主機和覆蓋網絡高級Docker網絡:掌握橋樑,主機和覆蓋網絡Apr 03, 2025 am 12:06 AM

Docker提供了三種主要的網絡模式:橋接網絡、主機網絡和覆蓋網絡。 1.橋接網絡適用於單主機上的容器間通信,通過虛擬網橋實現。 2.主機網絡適用於需要高性能網絡的場景,容器直接使用主機的網絡棧。 3.覆蓋網絡適用於多主機的DockerSwarm集群,通過虛擬網絡層實現跨主機通信。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)