我已经读到,在Windows上安装共享卷时会对性能产生重大影响。与仅在docker卷(不与主机OS共享)中说postgres DB或从平面文件读取/写入数据的速率相比,这又如何呢?
有人找到这个附近的具体数字吗?我认为,即使仅针对磁盘IO性能,我的用例也可以接受4倍的速度降低...我给人的印象是,挂载+共享卷的在Windows上的明显较慢...所以我想知道是否在此之上共享组件有助于将事务改进到可接受的范围内。
另外,如果我将Postgres留在裸机上,我所有的docker应用程序能否仍以这种方式访问Postgres? (我想这可能是更可取的-我已经看到报告读/写速度比裸机快4倍)-但我仍然需要知道...,因为我的应用程序还处理大量复制/读取/移动平面文件。 ..所以需要知道什么是最好的。
例如,如果共享卷确实很糟糕而不是仅将其保存在容器上,那么我可以选择通过网络推送文件,以避免将共享的已装入卷作为瓶颈。
感谢您的任何见解
最佳答案
您只需为绑定(bind)安装的主机目录支付此性能成本。命名的Docker卷或Docker容器文件系统将更快。标准Docker Hub数据库镜像已配置为始终使用卷进行存储,因此在这种情况下,应使用命名卷。
docker volume create pgdata
docker run -v pgdata:/var/lib/postgresql/data -p 5432:5432 postgres:12
您也可以直接在主机上运行PostgreSQL。在使用Docker Desktop应用程序的系统上,您可以通过特殊的主机名host.docker.internal
访问它。这在From inside of a Docker container, how do I connect to the localhost of the machine?中进行了详细讨论。如果您使用的是Docker Desktop应用程序,并且将卷用于以下用途: