在 Docker Compose 中使用 delegated 与不使用 delegatedvolumes 的性能和行为有一些区别:

  • 默认(不写 delegated:
    • 默认情况下,Docker 会尽量保持容器和主机之间的数据同步。也就是说,主机和容器之间的数据更新是同步进行的,以确保文件系统的一致性。虽然这种方式确保了文件的同步性,但在高 I/O 场景下会导致性能开销较大,尤其是当主机和容器之间频繁交换文件时。
  • delegated 选项:
    • 使用 delegated 选项时,Docker 优化了卷的性能,容器对文件系统的写入操作会被优先处理,而同步回主机的操作则可能会被延迟。这意味着主机上的文件更新可能会稍微滞后于容器中的更新,但在容器内的文件读写性能会更好,特别是在高并发写入的情况下。

总结来说,使用 delegated 可以提升容器内高 I/O 场景下的性能,但会稍微牺牲主机与容器之间的文件同步及时性。如果你的应用需要频繁读写文件并且性能是一个重要因素,可以考虑使用 delegated。否则,默认设置通常已经足够。