6

我有一个在文件 io 方面非常密集的构建。它涉及 70k 个松散文件以及相当数量的压缩/解压缩。

当使用主机卷挂载在 Docker Desktop 2.2+ 容器内运行时,此构建的性能会直线下降。

12 分钟 - 直接 Windows 10

19 分钟 - Docker Desktop 2.1.0.5 针对主机安装的卷(Windows /c 驱动器)

71 分钟 - Docker Desktop 2.3.0.2 针对主机安装的卷(Windows /c 驱动器)

2 分钟 - Docker Desktop 2.1.0.5 针对容器文件系统

2 分钟 - Docker Desktop 2.3.0.2 针对容器文件系统

即使使用 Docker 2.1.0.5 针对主机卷挂载,性能也不是很好。但是随着 DD 2.3 从约 19 分钟变为约 71 分钟,这让人心烦意乱。

还有其他人在文件 io 密集型任务上看到这种性能吗?

4

2 回答 2

1

真实的故事,根据我的基准测试,混合负载(读/写)慢了 10 倍。

尽管他们承诺 Linux 子系统会更快,但它看起来仍然是一个灰色地带

于 2021-01-22T10:24:15.000 回答
0

拿了一个类似的项目,遇到了同样的问题,我决定做一些简单的事情,相当于为开发人员提供与 docker 挂载点相同的解决方案:

1 - 检查容器是否有 rsync 工具,如果没有安装它。

2 -使用以下说明通过dockerfile生成一个 shell 脚本文件:

WORKDIR /var/www/html
RUN mkdir -p /folder-shared
RUN echo "#!/bin/bash" > sync-windows-files.sh
RUN echo 'while true; do' >> sync-windows-files.sh
RUN echo '  rsync -avu "/folder-shared/" "/var/www/html"' >> sync-windows-files.sh
RUN echo '  sleep 2;' >> sync-windows-files.sh
RUN echo 'done' >> sync-windows-files.sh
COPY . .

将命令添加到最后一行以在后台运行它:

CMD ["bash", "-c", "sh sync-windows-files.sh &]

注意:我的网络服务器正在查看/var/www/htmldockerfile应该始终位于项目根目录中,以加快进程。

3 - 准备 DockerCompose.yml:

services:
  regulacao:
    container_name: shared-windows-files
    build:
      context: .
      network: host

    volumes:
      - ./:/folder-shared
    working_dir: /var/www/html/
    ports:
      - "8587:80"

说明:此问题的解决方法是将 docker 共享映射到另一个目录,在这种情况下,名为folder-shared的目录是在构建期间在容器映像的根目录中创建的。映射目录后,您将创建一个 shell 脚本sync-windows-files.sh执行无限循环,将文件夹共享共享文件夹中的文件同步到网络服务器将指向的文件夹,在我的例子中是/var/万维网/html

这样问题就成功解决了,希望大家能理解。

于 2021-08-26T01:01:52.417 回答