[英]What's the difference between declaring in docker-compose.yml volume as section and under a service?
在docker-compose.yml
文件中聲明卷部分與僅在服務下使用volumes關鍵字有什么區別?
例如,我以此方式為容器映射一個卷:
services:
mysqldb:
volumes:
- ./data:/var/lib/mysql
這將映射到我的工作目錄中名為data的文件夾。
但是我也可以通過聲明一個卷部分並將其別名用作容器來映射一個卷:
services:
mysqldb:
volumes:
- data_volume:/var/lib/mysql
volumes:
data_volume:
driver: local
在這種方法中,存儲映射文件的實際位置似乎由docker compose進行了某種程度的管理。
這兩種方法之間有什么區別或相同? 我應該真正使用哪一個?
使用一種方法相對於另一種方法有什么好處?
您所描述的方法之間的區別在於,第一個方法是綁定安裝 ,另一個是卷 。 這些是更多的Docker函數(而不是Docker Compose),並且從掛載主機文件系統的路徑中,卷提供了許多好處。 如文檔中所述,他們:
docker volumes
或API(而不是原始文件系統)進行管理 使用卷的另一個巨大好處是卷驅動器 ,您可以在local
驅動器中指定它。 它們允許您遠程存儲卷(即雲等)或添加其他功能(如加密)。 這是容器概念的核心,因為如果正在運行的容器是無狀態的並且使用遠程卷,則可以在主機之間移動該容器,並且可以在不重新配置的情況下運行它。
因此,建議使用Docker卷。 另一個很好的例子如下:
services:
webserver_a:
volumes:
- ./serving/prod:/var/www
webserver_b:
volumes:
- ./serving/prod:/var/www
cache_server:
volumes:
- ./serving/prod:/cache_root
如果將./serving
目錄移動到其他位置,則綁定裝入會中斷,因為它是相對路徑。 如您所述,卷具有別名,並且其路徑由Docker管理,因此:
local
將卷存儲在系統上其他位置的數據,並且可以繼續安裝 TL; DR:嘗試使用卷。 它們是可移植的,並鼓勵減少對主機的依賴性的做法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.