溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

docker中怎么掛載數(shù)據(jù)卷

發(fā)布時間:2021-06-18 16:16:13 來源:億速云 閱讀:239 作者:Leah 欄目:大數(shù)據(jù)

這期內(nèi)容當中小編將會給大家?guī)碛嘘P(guān)docker中怎么掛載數(shù)據(jù)卷,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

一、創(chuàng)建和加載一個數(shù)據(jù)卷容器

1.創(chuàng)建一個數(shù)據(jù)卷容器

查看命令參數(shù):docker run --help

看到-v的命令幫助

docker中怎么掛載數(shù)據(jù)卷

這里我們可以看到-v相關(guān)命令一共有三個參數(shù)

--volume(等同于-v)

解釋:創(chuàng)建一個容器數(shù)據(jù)卷,要掛載容器數(shù)據(jù)卷首先要有容器數(shù)據(jù)卷,這個命令就是創(chuàng)建一個容器數(shù)據(jù)卷。

比如:

docker run -d --volume /var/volume --name DATA centos ls

上面的命令即從名為centos的鏡像啟動(守護線程)一個容器,容器命名為DATA,啟動之后執(zhí)行l(wèi)s命令。并且將容器中的/var/volume目錄(或文件)分享出去,這樣就創(chuàng)建了一個數(shù)據(jù)卷容器。上面的命令等價于:docker run -v /var/volume -name DATA centos

這里的/var/valume建議寫成絕對路徑,雖然相對路徑?jīng)]有報錯,但是很容易引起誤解。因為這里即使寫成相對路徑,docker也會當成絕對路徑來處理。比如把這里的/var/valume寫成./var/volume或var/valume結(jié)果都一樣,這對于開發(fā)者來說很容易誤解,所以建議寫成絕對路徑。

我們注意到上面查詢出來的--volume命令的參數(shù)類型是list,所以我們可以在一個容器中創(chuàng)建多個數(shù)據(jù)卷。

比如:

docker run -d --volume /var/volume1 --volume /var/volume2 --name DATA centos ls

這樣我們就在DATA 容器中創(chuàng)建了兩個數(shù)據(jù)卷

除了上面的創(chuàng)建數(shù)據(jù)卷容器外,我們還可以在Dockerfile中創(chuàng)建數(shù)據(jù)卷,使用 VOLUME 命令。

比如:

# BUILD-USING:        docker build -t data .
# RUN-USING:          docker run -name DATA data
FROM          base-image
VOLUME        ["/var/volume1", "/var/volume2"]
CMD           ["ls"]

注:這里的ls命令并不是必須的,因為容器啟動后要執(zhí)行一個命令,這個命令可以寫在docker啟動命令行的最后,也可以寫在Dockerfile的CMD命令中,且命令行中的命令會覆蓋Dockerfile中的CMD命令

2.加載數(shù)據(jù)卷

--volumes-from

解釋:從指定容器安裝數(shù)據(jù)卷

當我們已經(jīng)創(chuàng)建好一個數(shù)據(jù)卷容器后或者已經(jīng)存在一個數(shù)據(jù)卷容器,我們?nèi)绾稳ゼ虞d這個數(shù)據(jù)卷容器到另一個容器呢?這就需要用到--volumes-from命令。

這個命令就是從指定的一個或多個數(shù)據(jù)卷容器加載數(shù)據(jù)卷到當前的容器中。加載的意思就是如果當前容器如果存在數(shù)據(jù)卷的目錄結(jié)果則被覆蓋,如果沒有則直接加載。

比如:

docker run -d --volumes-from DATA:rw --name client centos ls

上面的命令即從名為centos的鏡像中啟動(守護線程)一個容器,容器命名為client,并且從名為DATA的容器中加載數(shù)據(jù)卷(讀寫),啟動后執(zhí)行l(wèi)s命令。這樣DATA中的數(shù)據(jù)卷(/var/volume)就和client中的加載的數(shù)據(jù)卷(/var/volume)共享了,只要任意一方對數(shù)據(jù)卷做出更改都會同步到另一方。值得注意的時這里并不是利用類似復制粘貼的功能實現(xiàn)的同步數(shù)據(jù),而是直接修改數(shù)據(jù),這對于超大文件很有用。

這里的--volumes-from命令的參數(shù)類型同樣是list,所以也是可以指定多個數(shù)據(jù)卷容器的。

比如:

docker run -d --volumes-from DATA1:ro --volumes-from DATA2:ro --name client centos ls

注:--volumes-from加載的數(shù)據(jù)卷可以賦予讀寫權(quán)限[rw|ro],也就是read write和read only,只讀和讀寫。默認使用數(shù)據(jù)卷相同的權(quán)限。

--volume-driver

解釋:為容器選擇數(shù)據(jù)卷驅(qū)動

此命令不在此次討論范圍內(nèi),讀者有興趣可自行查閱相關(guān)資料。

二、掛載主機目錄作為容器卷

上面講了如何把容器作為一個數(shù)據(jù)卷,在容器之間共享數(shù)據(jù)的方法。但其實更多的時候我們是把主機中的目錄作為一個數(shù)據(jù)卷加載到容器中,容器中的目錄“外掛”,以方便運維人員維護和修改項目配置。

--volume [host-dir]:[container-dir]:[rw|ro]

上面的命令等價于:-v [host-dir]:[container-dir]:[rw|ro]

解釋:將主機的目錄(host-dir)作為數(shù)據(jù)卷加載到容器(container-dir)中,并指定讀寫權(quán)限默認使用數(shù)據(jù)卷的權(quán)限

比如:

docker run -d --volume /var/logs:/var/host_logs:ro tomcat

上面的命令即從名為tomcat的鏡像(守護線程)啟動一個容器,容器名隨機。掛載主機目錄/var/logs作為數(shù)據(jù)卷,并加載到當前啟動的容器/var/host_logs,指定只讀權(quán)限。這樣的話就把主機的logs目錄和容器的host_logs目錄數(shù)據(jù)共享,當容器(數(shù)據(jù)卷)中或主機(數(shù)據(jù)卷)數(shù)據(jù)更改會同步。實際的以些應用場景有項目的配置文件掛載、日志文件掛載等,因為這些文件都是經(jīng)常查看和修改的,如果每次都進入容器修改和查看十分麻煩,所以直接掛載一個主機數(shù)據(jù)卷就可以通過修改和查看主機的數(shù)據(jù)卷同步容器中的數(shù)據(jù),簡化的操作步驟。

這里有幾個點需要注意:

主機目錄和容器目錄需要絕對路徑,如果不指定絕對路徑啟動會報錯,錯誤提示為invalid mount path,mount path must be abstract。

如果主機目錄不存在則會自動創(chuàng)建,創(chuàng)建的目錄權(quán)限為docker容器中對應的目錄權(quán)限。

如果容器目錄不存在則會自動創(chuàng)建,創(chuàng)建的權(quán)限為宿主機對應的目錄權(quán)限,用戶和用戶組為1000(貌似默認的)

如果主機目錄和容器目錄都存在,則主機目錄的內(nèi)容會覆蓋掉容器目錄的內(nèi)容,但目錄名不會改變。

容器內(nèi)部無法刪除掛載的數(shù)據(jù)卷(目錄),但主機可以刪除掛載的數(shù)據(jù)卷,刪除后容器內(nèi)的目錄依舊存在但內(nèi)容為空。刪除失敗 Device or resource busy

容器停止和刪除都不影響主機數(shù)據(jù)卷,即使容器已經(jīng)刪除了,主機數(shù)據(jù)卷內(nèi)容任然存在。

掛載數(shù)據(jù)卷的操作是在容器執(zhí)行啟動成功后的命令之前完成的,也就是在Dockerfile的CMD命令之前。所以你可能會在掛載數(shù)據(jù)卷后進容器查看數(shù)據(jù)卷內(nèi)容發(fā)現(xiàn)與進容器之前看到的主機數(shù)據(jù)卷不一致,其實數(shù)據(jù)卷已經(jīng)被容器啟動后做了數(shù)據(jù)數(shù)據(jù)更改了,當你退出容器查看主機數(shù)據(jù)卷已經(jīng)同步。

上述就是小編為大家分享的docker中怎么掛載數(shù)據(jù)卷了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI