數據卷簡介

      網友投稿 1615 2025-04-02

      Docker啟動后,容器內的文件和宿主機是隔離的,如果不使用docker commit 操作提交容器為鏡像把數據保存下來,數據就會因為容器的刪除而丟失。而且盡量不使用 docker commit 提交鏡像,因為會導致鏡像無法通過Dockerfile 復現,不利于遷移、重新構建等情況。

      為了可以保存數據,又不至于破壞鏡像的可復現特性,Docker 提出了數據卷的概念。數據卷又分為兩種,即數據卷和數據卷容器。

      一、什么是數據卷

      數據卷簡單來講就是一個目錄,它是由Docker daemon 掛載到容器中的,因此數據卷并不屬于聯合文件系統。也就是說數據卷里面的內容不會因為容器的刪除而丟失。

      形象說明數據卷好比一個U盤,可以連接計算機,即使計算機硬盤壞了,只要不影響U盤的,U盤里面的數據不會被損壞。

      二、數據卷特性

      -數據卷可以在容器之間共享和重用,容器間傳遞數據將變得高效方便;

      -對數據卷內數據的修改會立馬生效,無論是容器內操作還是本地操作;

      -對數據卷的更新不會影響鏡像,解耦了應用和數據;

      -卷會一直存在,直到沒有容器使用,可以安全地卸載它。

      三、數據卷的使用

      1.在容器內創建一個數據卷

      在用docker run命令的時候,使用-v標記可以在容器內創建一個數據卷。多次重復使用-v標記可以創建多個數據卷。

      下面使用training/webapp鏡像創建一個web容器,并創建一個數據卷掛載到容器的/webapp目錄:

      $?docker?run?-d?-P?--name?web?-v?/webapp?training/webapp?python?app.py

      數據卷簡介

      -P是將容器服務暴露的端口,是自動映射到本地主機的臨時端口。

      2.掛載一個主機目錄作為數據卷

      使用-v標記也可以指定掛載一個本地的已有目錄到容器中去作為數據卷(推薦方式)。

      $?docker?run?-d?-P?--name?web?-v?/src/webapp:/opt/webapp?training/webapp?python?app.py

      上面的命令加載主機的/src/webapp目錄到容器的/opt/webapp目錄。這個功能在進行測試的時候十分方便,比如用戶可以將一些程序或數據放到本地目錄中,然后在容器內運行和使用。另外,本地目錄的路徑必須是絕對路徑,如果目錄不存在,Docker會自動創建。

      Docker掛載數據卷的默認權限是讀寫(rw),用戶也可以通過ro指定為只讀:

      $?docker?run?-d?-P?--name?web?-v?/src/webapp:/opt/webapp:ro?training/webapp?python?app.py

      加了:ro之后,容器內對所掛載數據卷內的數據就無法修改了。

      3.掛載一個本地主機文件作為數據卷

      -v標記也可以從主機掛載單個文件到容器中作為數據卷(不推薦)。

      $?docker?run?--rm?-it?-v?~/.bash_history:/.bash_history?ubuntu?/bin/bash

      這樣就可以記錄在容器輸入過的命令歷史了。如果直接掛載一個文件到容器,使用文件編輯工具,包括vi或者sed--in-place的時候,可能會造成文件inode的改變,從Docker 1.1.0起,這會導致報錯誤信息。所以推薦的方式是直接掛載文件所在的目錄。

      三、什么是數據卷容器

      使用特定容器維護數據卷。如何使用數據卷容器在容器和主機、容器和容器之間共享數據,并實現數據的備份和恢復。

      如果用戶需要在多個容器之間共享一些持續更新的數據,最簡單的方式是使用數據卷容器。數據卷容器也是一個容器,但是它的目的是專門用來提供數據卷供其他容器掛載。

      四、數據卷容器實現數據遷移

      1.備份

      使用下面的命令來備份dbdata數據卷容器內的數據卷:

      $?docker?run?--volumes-from?dbdata?-v?$(pwd):/backup?--name?worker?ubuntu?tar?cvf?/backup/backup.tar?/dbdata

      首先利用ubuntu鏡像創建了一個容器worker。使用--volumes-from dbdata參數來讓worker容器掛載dbdata容器的數據卷(即dbdata數據卷),使用-v ?$(pwd):/backup參數來掛載本地的當前目錄到worker容器的/backup目錄。worker容器啟動后,使用了tar cvf ?/backup/backup.tar /dbdata命令來將/dbdata下內容備份為容器內的/backup/backup.tar,即宿主主機當前目錄下的backup.tar。

      2.恢復

      如果要將數據恢復到一個容器,可以按照下面的步驟操作。

      首先創建一個帶有數據卷的容器dbdata2:

      $?docker?run?-v?/dbdata?--name?dbdata2?ubuntu?/bin/bash

      然后創建另一個新的容器,掛載dbdata2的容器,并使用untar解壓備份文件到所掛載的容器卷中:

      $?docker?run?--volumes-from?dbdata2?-v?$(pwd):/backup?--name?worker?ubuntu?bashcd?/dbdatatar?xvf?/backup/backup.tar

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

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

      上一篇:調整數據 (Power Query)
      下一篇:當紙張設為橫向時,如何在左右兩邊添加類似于頁眉的內容(只當前頁紙張方向為橫向?)
      相關文章
      亚洲精品天堂成人片AV在线播放| 亚洲精品**中文毛片| 亚洲国产情侣一区二区三区| 亚洲av色福利天堂| 久久精品国产亚洲网站| 亚洲日韩欧洲乱码AV夜夜摸| 亚洲中文字幕无码久久2017| 亚洲一区二区三区AV无码| 中文字幕亚洲综合久久男男| 国产亚洲精品成人AA片新蒲金| 久久久亚洲精品蜜桃臀| 曰韩亚洲av人人夜夜澡人人爽| 亚洲啪啪AV无码片| 久久精品国产精品亚洲蜜月| 亚洲av无码潮喷在线观看| 亚洲人成电影福利在线播放| 亚洲黄色中文字幕| 亚洲性一级理论片在线观看| 亚洲专区一路线二| 亚洲中文字幕久久精品蜜桃| 亚洲av无码一区二区三区在线播放| 亚洲av永久无码精品秋霞电影秋| 久久亚洲精品无码av| 亚洲精品老司机在线观看| 中文字幕精品亚洲无线码二区| 亚洲精品无码永久在线观看你懂的| 日本红怡院亚洲红怡院最新| 亚洲av永久无码精品表情包| 亚洲国产精品人久久| 亚洲成人福利在线观看| 亚洲一区二区三区丝袜| 豆国产96在线|亚洲| 中文字幕无码精品亚洲资源网| 亚洲日本va在线视频观看| 亚洲an天堂an在线观看| 亚洲国产成AV人天堂无码| 亚洲精品无码永久在线观看男男| 午夜亚洲福利在线老司机| 亚洲无av在线中文字幕| 亚洲视频一区调教| 亚洲高清有码中文字|