簡體   English   中英

在部分中和服務下聲明docker-compose.yml卷有什么區別?

[英]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(而不是原始文件系統)進行管理
  • 在Linux和Windows容器上均可工作
  • 可以在多個容器之間安全共享
  • 可以由容器預先填充內容(使用綁定掛載,有時您必須將數據復制出來,然后重新啟動容器)

使用卷的另一個巨大好處是卷驅動器 ,您可以在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管理,因此:

  1. 您無需查找並替換路徑3次
  2. 使用local將卷存儲在系統上其他位置的數據,並且可以繼續安裝

TL; DR:嘗試使用卷。 它們是可移植的,並鼓勵減少對主機的依賴性的做法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM