最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Docker?存儲管理的幾種方式

 更新時間:2022年07月01日 16:32:11   作者:小丫么小牛馬  
本文主要使用三種不同的方式將數(shù)據(jù)從Docker主機掛載到容器中,分別為卷(volumes),綁定掛載(bind?mounts),臨時文件系tmpfs,還介紹了數(shù)據(jù)卷容器、數(shù)據(jù)卷的備份與恢復,對Docker?存儲管理相關知識感興趣的朋友一起看看吧

前言

在本文內容中,我們將討論 Docker 中管理數(shù)據(jù)的幾種方式,涉及將數(shù)據(jù)從 Docker 主機掛載到容器中的不同方法。

一、存儲

通過之前的學習,我們學習了有關于容器和鏡像的一些知識。對于數(shù)據(jù)來說,我們可以將其保存在容器中,但是會存在一些缺點:

  • 當容器不再運行時,我們無法使用數(shù)據(jù),并且容器被刪除時,數(shù)據(jù)并不會被保存。
  • 數(shù)據(jù)保存在容器中的可寫層中,我們無法輕松的將數(shù)據(jù)移動到其他地方。

針對上述的缺點而言,有些數(shù)據(jù)信息,例如我們的數(shù)據(jù)庫文件,我們不應該將其保存在鏡像或者容器的可寫層中。Docker 提供三種不同的方式將數(shù)據(jù)從 Docker 主機掛載到容器中,分別為卷(volumes),綁定掛載(bind mounts),臨時文件系統(tǒng)(tmpfs)。很多時候,volumes 總是正確的選擇。

  • volumes 卷存儲在 Docker 管理的主機文件系統(tǒng)的一部分中(/var/lib/docker/volumes/)中,完全由 Docker 管理。
  • bind mounts 綁定掛載,可以將主機上的文件或目錄掛載到容器中。
  • tmpfs 僅存儲在主機系統(tǒng)的內存中,而不會寫入主機的文件系統(tǒng)。

無論使用上述的哪一種方式,數(shù)據(jù)在容器內看上去都是一樣的。它被認為容器文件系統(tǒng)中的目錄或單個文件。

二、卷列表

對于三種不同的存儲數(shù)據(jù)的方式來說,卷是唯一完全由 Docker 管理的。它更容易備份或遷移,并且我們可以使用 Docker CLI 命令來管理卷。

列出本地可用的卷列表可以使用如下命令:

docker volume ls

 運行之后,你可能會看到一些環(huán)境中預置鏡像對應的卷,或者顯示為空。

創(chuàng)建卷

創(chuàng)建卷我們可以直接使用如下命令:

docker volume create

上述命令會創(chuàng)建一個數(shù)據(jù)卷,并且會隨機生成一個名稱。創(chuàng)建之后我們可以查看卷列表:

docker volume ls

請?zhí)砑訄D片描述

這種由系統(tǒng)隨機生成名稱的創(chuàng)建卷的方式被稱為 匿名卷,直接使用該卷需要指定卷名,即自動生成的 ID,所以創(chuàng)建卷時一般手動指定其 name,例如我們創(chuàng)建一個名為 volume1 的卷。

docker volume create volume1

請?zhí)砑訄D片描述

掛載卷

創(chuàng)建卷之后,我們可以用卷來啟動一個容器,這里首先需要學習 docker container run 命令的兩個參數(shù):

  • -v--volume

由三個由冒號(:)分隔的字段組成,[HOST-DIR:]CONTAINER-DIR[:OPTIONS]。

  • HOST-DIR 代表主機上的目錄或數(shù)據(jù)卷的名字。省略該部分時,會自動創(chuàng)建一個匿名卷。如果是指定主機上的目錄,需要使用絕對路徑。
  • CONTAINER-DIR 代表將要掛載到容器中的目錄或文件,即表現(xiàn)為容器中的某個目錄或文件。
  • OPTIONS 代表配置,例如設置為只讀權限(ro),此卷僅能被該容器使用(Z),或者可以被多個容器使用(z)。多個配置項由逗號分隔。

例如,我們使用 -v volume1:/volume1:ro,z。代表的是意思是將卷 volume1 掛載到容器中的 /volume1 目錄。ro,z 代表該卷被設置為只讀(ro),并且可以多個容器使用該卷(z)。

  • --mount 由多個鍵值對組成,鍵值對之間由逗號分隔。

例如:type=volume,source=volume1,destination=/volume1,ro=true。

  • type,指定類型,可以指定為 bind,volume,tmpfs。
  • source,當類型為 volume 時,指定卷名稱,匿名卷時省略該字段。
  • 當類型為 bind,指定路徑。可以使用縮寫 src。
  • destination,掛載到容器中的路徑??梢允褂每s寫 dsttarget。
  • ro 為配置項,多個配置項直接由逗號分隔一般使用 true 或 false。

針對上述創(chuàng)建的卷 volume1,用其來運行一個容器就可以使用如下命令:

docker container run \
    -it \
    --name niuma001 \
    -v volume1:/volume1 \
    --rm ubuntu /bin/bash

請?zhí)砑訄D片描述

或者我們也可以使用 --mount,其語法格式如下:

docker container run \
    -it --name niuma002 \
    --mount type=volume,src=volume1,target=/volume1 \
    --rm ubuntu /bin/bash

請?zhí)砑訄D片描述

從命令中,可以很明顯的得出,--mount 的可讀性更好。所以,推薦大家使用 --mount

docker container run 中我們使用了參數(shù) --rm,它的作用在容器退出時刪除容器。這里我們創(chuàng)建的鏡像只是希望它短期運行,其用戶數(shù)據(jù)并無保留的必要,因而可以在容器啟動時設置 --rm 選項,這樣在容器退出時就能夠自動清理容器內部的文件系統(tǒng)。

值得注意的是,后臺運行的容器無法使用 -d--rm 選項。

上述操作,我們分別運行了兩個容器,并分別掛載了一個卷,還可多次使用該參數(shù)掛載多個卷或目錄。并且對于這兩個容器來說,由于我們使用的是同一個卷,所以他們將共享該數(shù)據(jù)卷,但是對于多個容器共享數(shù)據(jù)卷時,需要注意并發(fā)性。大家可以分別連接到兩個容器中,操作數(shù)據(jù),驗證其是同步的,這里就不再詳細演示了。

三、綁定掛載

 對于數(shù)據(jù)卷來說,其優(yōu)點在于方便管理。而對于綁定掛載 bind-mounts 來說,通過將主機上的目錄綁定到容器中,容器就可以操作和修改主機上該目錄的內容。這既是其優(yōu)點也是其缺點。

 例如,我們將 /home/xiaoniuma 目錄掛載到容器中的 `/home/xiaoniuma 目錄下,使用的命令如下:

docker container run \
    -it \
    -v /home/xiaoniuma:/home/xiaoniuma \
    --name xiaoniuma003 \
    --rm ubuntu /bin/bash

請?zhí)砑訄D片描述

而如果使用的是 --mount,相應的語句如下:

docker container run \
    -it \
    --mount type=bind,src=/home/xiaoniuma,target=/home/xiaoniuma \
    --name xiaoniuma004 \
    --rm ubuntu /bin/bash

請?zhí)砑訄D片描述

如果綁定掛載時指定的容器目錄是非空的,則該目錄中的內容將會被覆蓋。并且如果主機上的目錄不存在,會自動創(chuàng)建該目錄。

上述兩個操作針對的是目錄,而對于掛載文件來說,可能會出現(xiàn)一些特殊情況,涉及到綁定掛載和使用卷的區(qū)別。下面我們重現(xiàn)這一操作:

1.首先在當前目錄,即 /home/xiaoniuma 目錄下,創(chuàng)建一個 test.txt 文件。并向其中寫入文本內容 “test1”:

echo "test1" > test.txt

請?zhí)砑訄D片描述

2.接著創(chuàng)建一個容器 xiaoniuma005,將 test.txt 文件掛載到容器中的 /test.txt 文件,并查看容器中 /test.txt 文件的內容:

docker container run \
    -it \
    -v /home/xiaoniuma/test.txt:/test.txt \
    --name xiaoniuma005 ubuntu /bin/bash

請?zhí)砑訄D片描述

請?zhí)砑訄D片描述

3.這時新打開一個終端,通過 echo 命令向 /home/xiaoniuma/test.txt 文件追加內容 “test2”,并在容器中查看 /test.txt 文件的內容:

echo "test2" >> test.txt

請?zhí)砑訄D片描述

4.這時無論是在容器中還是主機上都能查看到該文件的內容。接下來在主機上查看 test.txt 的 inode 號。

請?zhí)砑訄D片描述

使用 VIM 編輯該文件,添加 “test3”,并查看該文件的內容:

請?zhí)砑訄D片描述

請?zhí)砑訄D片描述

 

請?zhí)砑訄D片描述

 

請?zhí)砑訄D片描述

如上圖所示,在主機上使用 VIM 編輯后,通過 VIM 做出的修改不能在容器中查看到。這是因為 VIM 編輯保存文件的時候,會將文件內容寫入到一個新的文件中,保存好后,刪除掉原來的文件,并將新文件重命名,從而完成保存的操作。但是我們標識文件是通過 inode,因此 Docker 綁定的主機文件,依舊是 VIM 編輯之前的 inode,即舊文件。所以容器中看到的,依然是舊的內容。
對于數(shù)據(jù)卷來說,由 Docker 完全管理,而綁定掛載,則需要我們自己去維護。我們需要自己手動去處理這些問題,這些問題并不僅僅是上面演示的內容,還可能有用戶權限,SELINUX 等問題。

最后簡單說一下臨時文件系統(tǒng) tmpfs。它只存儲在主機的內存中。當容器停止時,相應的數(shù)據(jù)就會被移除。

docker run \
    -it \
    --mount type=tmpfs,target=/test \
    --name xiaoniuma008 \
    --rm ubuntu bash

四、數(shù)據(jù)卷容器

如果容器之間需要共享一些持續(xù)更新的數(shù)據(jù),最簡單的方式就是使用用戶數(shù)據(jù)卷容器。其他容器通過掛載這個容器實現(xiàn)數(shù)據(jù)共享,這個掛載數(shù)據(jù)卷的容器就叫做數(shù)據(jù)卷容器。數(shù)據(jù)卷容器就是一種普通容器,它專門提供數(shù)據(jù)卷供其它容器掛載使用。

首先,我們創(chuàng)建一個數(shù)據(jù)卷和數(shù)據(jù)卷容器,執(zhí)行的命令如下:

# 創(chuàng)建一個名為 vdata 的數(shù)據(jù)卷
docker volume create vdata
# 創(chuàng)建一個掛載了 vdata 的容器,這個容器就是數(shù)據(jù)卷容器
docker container run \
    -it \
    -v vdata:/vdata \
    --name XiaoniumaVolume ubuntu /bin/bash
# 在 /vdata 目錄下創(chuàng)建一個文本文件
echo "I am XiaoniumaVolume" > /vdata/f.txt

請?zhí)砑訄D片描述

接下來我們分別打開新的終端輸入以下命令,創(chuàng)建兩個容器,在執(zhí)行 docker container run 時,我們添加參數(shù) --volumes-from 繼承數(shù)據(jù)卷容器 XiaoniumaVolume 掛載的數(shù)據(jù)卷。進入容器后分別創(chuàng)建文件

# 創(chuàng)建容器 test1
docker container run \
    -it \
    --volumes-from XiaoniumaVolume \
    --name test1 ubuntu /bin/bash

# 查看 vdata 目錄是否存在
ls -dl /vdata/

# 創(chuàng)建一個文件,并寫入內容
echo "I am test1" > /vdata/test1.txt

請?zhí)砑訄D片描述

同樣的,我們執(zhí)行上述操作,創(chuàng)建容器 test2。

# 創(chuàng)建容器 test2
docker container run \
    -it \
    --volumes-from XiaoniumaVolume \
    --name test2 ubuntu /bin/bash

# 查看 vdata 目錄是否存在
ls -dl /vdata/

# 創(chuàng)建一個文件,并寫入內容
echo "I am test2" > /vdata/test2.txt

請?zhí)砑訄D片描述

我們進入到 XiaoniumaVolume 容器所在的終端,在掛載的數(shù)據(jù)中查看文件的內容:

# 查看數(shù)據(jù)卷中的內容
ls -al /vdata/

請?zhí)砑訄D片描述

從上圖的結果中我們可以看到,數(shù)據(jù)卷在三個容器之間是共享的。

五、數(shù)據(jù)備份

 數(shù)據(jù)存在于數(shù)據(jù)卷中,如果我們想要備份它,可以采用創(chuàng)建備份容器的方式。

docker container run \
   --volumes-from XiaoniumaVolume \
   -v /home/xiaoniuma/backup:/backup \
   ubuntu tar cvf /backup/backup.tar /vdata/
  • --volumes-from XiaoniumaVolume 使得備份容器繼承容器 XiaoniumaVolumeVolume 的數(shù)據(jù)卷。
  • -v /home/xiaoniuma/backup:/backup/home/xiaoniuma/backup 目錄采用綁定掛載的方式,掛載到容器的 /backup 目錄上。
  • tar cvf /backup/backup.tar /vdata 容器中執(zhí)行了這么一條壓縮歸檔命令,將 /vdata 中的全部數(shù)據(jù)打包到了 /backup/backup.tar,而剛剛的數(shù)據(jù)綁定,使得整個壓縮包存在于主機中,從而達到了數(shù)據(jù)備份的效果。

請?zhí)砑訄D片描述

如上圖所示,數(shù)據(jù)卷中的所有數(shù)據(jù)都被打包到了 /home/xiaoniuma/backup 目錄中。

六、數(shù)據(jù)恢復

與數(shù)據(jù)備份相同的方式,我們可以使用如下命令創(chuàng)建恢復容器,來還原數(shù)據(jù)卷中的數(shù)據(jù)。

docker container run \
   --volumes-from XiaoniumaVolume \
   -v /home/xiaoniuma/backup:/backup \
   ubuntu tar xvf /backup/backup.tar -C /

這里解壓的路徑為 / 即 /vdata 的上一級目錄。由于與數(shù)據(jù)備份非常相似,這里不再給出結果分析。

總結

本文主要使用三種不同的方式將數(shù)據(jù)從 Docker 主機掛載到容器中,分別為卷(volumes),綁定掛載(bind mounts),臨時文件系統(tǒng)(tmpfs)。還介紹了數(shù)據(jù)卷容器、數(shù)據(jù)卷的備份與恢復。

下文講解Docker網(wǎng)絡管理。

到此這篇關于Docker 存儲管理的文章就介紹到這了,更多相關Docker 存儲管理內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 基于docker的redis主從及哨兵配置方式

    基于docker的redis主從及哨兵配置方式

    這篇文章主要介紹了基于docker的redis主從及哨兵配置方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Docker 常用命令整理并介紹

    Docker 常用命令整理并介紹

    這篇文章主要介紹了Docker 常用命令的知識,這里介紹了Docker 的操作容器,Image,網(wǎng)絡操作,等內容,有需要的小伙伴可以參考下
    2016-10-10
  • Docker安裝iTop快速搭建IT服務管理平臺

    Docker安裝iTop快速搭建IT服務管理平臺

    本文主要介紹了Docker安裝iTop快速搭建IT服務管理平臺,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-01-01
  • 解決Docker錯誤“docker?build“?requires?exactly?1?argument(s)問題

    解決Docker錯誤“docker?build“?requires?exactly?1?argument(s)

    這篇文章主要介紹了解決Docker錯誤“docker?build“?requires?exactly?1?argument(s)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • docker-compose中的redis-stack詳解

    docker-compose中的redis-stack詳解

    Redis是一個開源的內存數(shù)據(jù)結構存儲系統(tǒng),主要用于數(shù)據(jù)庫、緩存和消息代理,支持多種數(shù)據(jù)結構,RedisStack則基于Redis,提供棧的操作及擴展功能,適合復雜數(shù)據(jù)處理,本文給大家介紹docker-compose中的redis-stack,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • 使用docker運行jenkins期間遇到的問題及解決方案

    使用docker運行jenkins期間遇到的問題及解決方案

    文章介紹了在使用Docker運行Jenkins時遇到的一些問題及其解決方法,包括使用jenkins/jenkins鏡像、解決多分支流水項目創(chuàng)建問題、以及解決Docker容器內部調用宿主機Docker權限問題,感興趣的朋友一起看看吧
    2025-03-03
  • 使用Docker-compose離線部署Django應用的方法

    使用Docker-compose離線部署Django應用的方法

    這篇文章主要介紹了使用Docker-compose離線部署Django應用的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • Docker部署nGrinder性能測試平臺過程解析

    Docker部署nGrinder性能測試平臺過程解析

    這篇文章主要介紹了Docker部署nGrinder性能測試平臺過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • 詳解Docker容器數(shù)據(jù)卷

    詳解Docker容器數(shù)據(jù)卷

    這篇文章主要介紹了Docker容器數(shù)據(jù)卷的相關知識,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • docker-compose部署etcd集群的實現(xiàn)步驟

    docker-compose部署etcd集群的實現(xiàn)步驟

    本文主要介紹了docker-compose部署etcd集群的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10

最新評論

台山市| 浪卡子县| 南澳县| 新宁县| 金沙县| 灯塔市| 广宗县| 华亭县| 麦盖提县| 东辽县| 台湾省| 东源县| 铁力市| 福海县| 容城县| 永安市| 衡阳市| 韩城市| 阿拉善盟| 穆棱市| 双江| 武川县| 娱乐| 乐安县| 黑水县| 九龙城区| 顺义区| 黎平县| 瑞昌市| 鹤壁市| 虞城县| 辽阳市| 昌图县| 柯坪县| 乌鲁木齐市| 乡宁县| 轮台县| 冀州市| 陆良县| 肥乡县| 北碚区|