7-Docker之資料卷
阿新 • • 發佈:2020-08-25
一 Docker 資料卷簡介
1.1 為什麼用資料卷
•宿主機無法直接訪問容器中的檔案
•容器中的檔案沒有持久化,導致容器刪除後,檔案資料也隨之消失
•容器之間也無法直接訪問互相的檔案
為解決這些問題,docker加入了資料卷(volumes)機制,能很好解決上面問題,以實現:
•容器與主機之間、容器與容器之間共享檔案
•容器中資料的持久化
•將容器中的資料備份、遷移、恢復等
1.2 資料卷的特點
•資料卷存在於宿主機的檔案系統中,獨立於容器,和容器的生命週期是分離的。
•資料卷可以目錄也可以是檔案,容器可以利用資料卷與宿主機進行資料共享,實現了容器間的資料共享和交換。
•容器啟動初始化時,如果容器使用的映象包含了資料,這些資料會拷貝到資料卷中。
•容器對資料卷的修改是實時進行的。
•資料卷的變化不會影響映象的更新。資料卷是獨立於聯合檔案系統,映象是基於聯合檔案系統。映象與資料卷之間不會有相互影響。
二 Docker 資料卷管理
2.1 Docker掛載容器資料卷的三種方式
•bind mounts:將宿主機上的一個檔案或目錄被掛載到容器上。
•volumes:由Docker建立和管理。使用docker volume命令管理
•tmpfs mounts:tmpfs 是一種基於記憶體的臨時檔案系統。tmpfs mounts 資料不會儲存在磁碟上。
2.2 bind mounts方式掛載資料卷
# 利用docker run/create的引數為容器掛載資料卷 # 用法: 方式一: -v, --volume引數 -v 宿主機檔案或資料夾路徑:容器中的檔案或者資料夾路徑 方式二:--mount引數 --mount type=bind, src=宿主機檔案或資料夾路徑, dst=容器中的檔案或者資料夾路徑 注意:src指定的檔案和路徑必須提前建立或存在 # 命令演示:
2.3 volumes方式掛載資料卷
# 利用docker run/create為容器掛載資料卷 # 用法: 方式一: -v, --volume引數 -v VOLUME-NAME:容器中的檔案或者資料夾路徑 方式二:--mount 引數 --mount type=volume, src=VOLUME-NAME, dst=容器中的檔案或者資料夾路徑 # volume物件管理: docker volume 命令管理volume資料卷物件 docker volume create 建立資料卷物件 docker volume inspect 檢視資料卷詳細資訊 docker volume ls 檢視已建立的資料卷物件 docker volume prune 刪除未被使用的資料卷物件 docker volume rm 刪除一個或多個數據卷物件
2.4 tmpfs mount方式掛載資料卷
# 利用docker run/create為容器掛載資料卷
# 用法:
--mount type=tmpfs, dst=PATH
2.5 共享其他容器的資料卷-資料卷容器
# 利用docker run/create 的--volumes-from引數指定資料卷容器
# 用法:
docker run/create --volumes-from CONTAINER
三 Docker 資料卷注意事項
Docker的資料卷更多會是使用volumes方式來進行使用。使用時需注意:
•如果掛載一個空的資料捲到容器中的一個非空目錄中,那麼這個目錄下的檔案會被複制到資料卷中。
•如果掛載一個非空的資料捲到容器中的一個目錄中,那麼容器中的目錄中會顯示資料卷中的資料。如果原來容器中的目錄中有資料,那麼這些原始資料會被隱藏掉。
這兩個規則都非常重要,靈活利用第一個規則可以幫助我們初始化資料卷中的內容。掌握第二個規則可以保證掛載資料卷後的資料總是你期望的結果。