1. 程式人生 > 實用技巧 >7-Docker之資料卷

7-Docker之資料卷

一 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方式來進行使用。使用時需注意:

•如果掛載一個空的資料捲到容器中的一個非空目錄中,那麼這個目錄下的檔案會被複制到資料卷中。

•如果掛載一個非空的資料捲到容器中的一個目錄中,那麼容器中的目錄中會顯示資料卷中的資料。如果原來容器中的目錄中有資料,那麼這些原始資料會被隱藏掉。

這兩個規則都非常重要,靈活利用第一個規則可以幫助我們初始化資料卷中的內容。掌握第二個規則可以保證掛載資料卷後的資料總是你期望的結果。