docker容器數據卷 - 具名掛載和匿名掛載

      網友投稿 988 2022-05-29

      什么是容器數據卷

      容器數據卷就是目錄的掛載,將我們的容器的目錄掛載到宿主機上,從而實現打通宿主機和容器之間的文件共享功能;

      為什么需要容器數據卷

      docker理念就是將應用和環境打包成一個鏡像;但是數據怎么辦呢?且不說數據庫,一個項目在運行過程種肯定會產生大量的日志,這些日志對開發人員來說是非常重要的, 因為有了這些日志,我們才知道運行的過程中出現了哪些問題,然后進行排查找錯;

      但是在容器中,項目每次更新迭代都會將容器刪除,直接替換新鏡像運行;那么在這種情況下,要保存這些日志文件的話,如果每次都去往容器里復制到宿主機,這個工作量會有點大,并且如果日志文件太大的話,復制的工作也是很耗時耗力的;所以這時候就需要用到容器數據卷的功能了,說白了這個功能非常地簡單,就是打通宿主和容器的文件共享功能;docker容器中產生的數據文件,會實時同步到宿主機中;相反的,宿主機產生的文件葉會同步到容器中;這樣就打通了雙向傳輸的管道;

      容器和容器之間實現數據共享之后,就沒有主容器和子容器之分了,因為它們共享的數據只有一份,是保存在宿主機上面的,刪除任何一個容器,都不會影響其他容器的數據同步;

      使用

      使用容器數據卷非常簡單,只需要在運行的時候加上 -v 選項即可

      docker run -d -v 主機目錄:容器目錄 tomcat

      1

      運行以上命令后,會在容器和宿主機上自動創建相應的目錄,在目錄下創建或者修改文件都會自動同步過去;

      如何查看是否使用了數據卷

      查看一個容器是否使用了容器數據卷功能,可以通過inspect 功能查看容器的詳細信息

      docker inspect 容器id/容器名稱

      1

      執行以上命令后會打印一大堆已經格式化的json字符串,這時候我們找到key為 Mounts的項就是容器數據卷的相關配置了,

      "Mounts": [ { "Type": "bind", "Source": "/root/dockerContainer", # 宿主機的目錄 "Destination": "/text", # 容器的目錄 "Mode": "", "RW": true, # RW可讀可寫;ro為只讀,只能修改宿主機的文件; "Propagation": "rprivate" } ],

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      具名掛載和匿名掛載

      指定路徑掛載

      上面的例子中我們用的都是指定路徑掛載,就是即配置宿主機路徑,又配置了容器路徑;

      docker run -d -v 主機目錄:容器目錄 tomcat

      1

      具名掛載

      掛載到指定名稱的目錄;

      # /xxx 是目錄, xxx是卷名,沒有斜桿的就是卷名 docker run -d -v 卷名:容器目錄 tomcat # 查找卷名所在的目錄 docker volume inspect 卷名

      1

      2

      3

      4

      5

      光說無益,測試一下,先創建容器并且掛載好目錄

      docker run -d --name my_tomcat -v my_folder:/data/my_folder tomcat

      1

      docker容器數據卷 - 具名掛載和匿名掛載

      使用 inspect 命令查看容器信息

      docker inspect my_tomcat

      1

      在打印信息中找到 Mounts 項,其中Source的目錄就是宿主機的目錄;Destination的目錄是掛載的容器目錄;

      "Mounts": [ { "Type": "volume", "Name": "my_folder", "Source": "/var/lib/docker/volumes/my_folder/_data", "Destination": "/data/my_folder", "Driver": "local", "Mode": "z", "RW": true, "Propagation": "" } ]

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      接著進入容器

      docker exec -it my_tomcat /bin/bash # 在容器內也已經創建好了這個目錄 root@ef94ff8928a1:/data/my_folder# pwd /data/my_folder

      1

      2

      3

      4

      5

      匿名掛載

      匿名掛載就是只有容器目錄,沒有宿主機的目錄,所以生成出來的目錄是一個長長的加密字符串,一般情況下不建議使用匿名掛載;加密字符串會導致不易查找;

      docker run -d -v \容器目錄 tomcat

      1

      來,測試一下,先創建容器并且掛載好目錄

      docker run -d --name my_tomcat_2 -v /my_folder_2 tomcat

      1

      使用 inspect 命令查看容器信息

      docker inspect my_tomcat_2

      1

      在打印信息中找到 Mounts 項,其中Source的目錄就是宿主機的目錄;Destination的目錄是掛載的容器目錄

      "Mounts": [ { "Type": "volume", "Name": "df4c649772a5ae65716de8ede0607d0776f8c1e2eda1d87b3ec9eaf011b43616", "Source": "/var/lib/docker/volumes/df4c649772a5ae65716de8ede0607d0776f8c1e2eda1d87b3ec9eaf011b43616/_data", "Destination": "/my_folder_2", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" } ]

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      容器與容器之間的數據共享 --volumes-from

      有這么一個場景,我們需要容器A和容器B實現數據共享,就是在A容器上修改的內容我希望能在B容器上看到,那么這個功能應該要怎么做到呢?那么這時候就可以使用數據卷容器功能,數據卷容器還可以實現多個容器之間的數據同步功能,不只是2個容器共享;

      1、先創建第一個容器centos_1,并將/data/centos目錄掛載到宿主機上,宿主機和容器的目錄都是/data/centos;

      docker run -it --name centos_1 -v /data/centos:/data/centos centos /bin/bash

      1

      2、創建第二個容器并且將其綁定到第一個容器;--volumes-from centos_1 選項就是將當前容器的掛載目錄綁定到 centos_1 容器上,從而實現了個容器的數據同步;

      docker run -it --name centos_2 --volumes-from centos_1 centos /bin/bash

      1

      3、現在我們在創建第三個容器,將其綁定到第二個容器centos_2上

      docker run -it --name centos_3 --volumes-from centos_2 centos /bin/bash

      1

      接下來,我們在每個容器里面的/data/centos目錄里面都創建一個文件

      在宿主機的/data/centos目錄里面創建了main.java文件

      在centos_1容器的/data/centos目錄里面創建了centos_1.java文件

      在centos_2容器的/data/centos目錄里面創建了centos_2.java文件

      在centos_3容器的/data/centos目錄里面創建了centos_3.java文件

      最后在面四個環境中的/data/centos目錄執行ls命令,都能看到所有容器創建的文件,這樣我們就實現了各個容器之間的數據同步;

      [root@259efdc362b4 centos]# ls centos_1.java centos_2.java centos_3.java main.java

      1

      2

      CentOS Docker 容器

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:提升Python技能的工具有哪些?
      下一篇:使用Latex制作分享,演講,Presentation用的Slides,PPT——Beamer教程
      相關文章
      亚洲AV无一区二区三区久久| 亚洲精品国产自在久久| 亚洲一区AV无码少妇电影☆| 亚洲精品99久久久久中文字幕| 亚洲av无码一区二区三区天堂| 亚洲欧美不卡高清在线| 亚洲精品天堂在线观看| 亚洲国产精品一区二区三区在线观看| 亚洲免费观看在线视频| 亚洲男女一区二区三区| 亚洲国产成人九九综合| 亚洲成a人片在线网站| 亚洲伊人久久大香线蕉影院| 亚洲精品国产肉丝袜久久| 亚洲一级二级三级不卡| 中文字幕亚洲色图| 亚洲国产人成在线观看| 亚洲毛片一级带毛片基地| 亚洲中文字幕无码av在线| 国产成人亚洲精品| 亚洲AV无码资源在线观看| 亚洲a∨无码精品色午夜| 亚洲国产av无码精品| 久久久久国产亚洲AV麻豆| 久久国产亚洲精品麻豆| 亚洲精品免费在线观看| 91亚洲国产成人精品下载| 亚洲一区在线观看视频| 亚洲一区二区三区成人网站| 蜜桃传媒一区二区亚洲AV| 亚洲精品视频在线观看你懂的| 色噜噜亚洲精品中文字幕| 亚洲av午夜福利精品一区| 久久亚洲AV无码精品色午夜| 亚洲av无码不卡久久| 亚洲成在人线在线播放无码 | 一本久到久久亚洲综合| 色噜噜AV亚洲色一区二区| 亚洲国产精品久久久久婷婷软件| 亚洲国产综合精品| 亚洲AV综合色区无码一二三区 |