【问题标题】:Running Webpack-dev-server in docker is significantly slower than on local machine在 docker 中运行 Webpack-dev-server 比在本地机器上运行慢得多
【发布时间】:2018-03-01 22:58:21
【问题描述】:

我正在将我的大部分开发过程转移到 docker 中,以确保计算机之间的并行开发环境,因此不会出现由于版本不匹配等导致的奇怪错误或问题。

所有这一切都很好,除了在 docker 内运行 webpack-dev-server 时,构建过程比我在本地计算机上运行时要慢得多。 (比如在 docker 中 3-5 分钟,而在本地 30 秒到 1 分钟)。有什么办法可以加快这个速度吗?这只是 docker/webpack 通过挂载卷与我硬盘上的大量文件交互的问题吗?

如果重要的话,我的主机系统是在 i7 上运行 High Sierra 的 Mac,内存为 16bg。

我正在为 mac 运行 docker,docker -v 返回:Docker version 17.12.0-ce,build c97c6d6

我希望所有这些都足够清楚,如果我可以添加任何信息,请告诉我!

【问题讨论】:

  • 哪个版本的 docker?
  • 我更新了我的问题,但我使用的是 docker for mac,docker -v 返回:Docker version 17.12.0-ce, build c97c6d6
  • 您是否将本地 dev 目录挂载到容器中?
  • 如果你是这样的话:*.com/q/47494110/1318694
  • 这正是我正在做的!我切换到缓存模式,我的构建时间从 3 多分钟缩短到 30-40 秒。仍然比本地慢,但更易于管理。

标签: macos docker webpack


【解决方案1】:

对于那些处于类似位置的人,正如马特建议的那样,问题来自安装的卷。我通过使用 docker 的卷缓存模式显着加快了构建速度。 The docs on it are here.

命令看起来像这样:

docker run -v \local\director:docker\directory:cached dockerImage

【讨论】:

  • 谢谢!花了很长时间弄清楚这一点,这个答案是关键,它将我的构建时间从 30 秒减少到 :cached 添加到卷的末尾。
【解决方案2】:

根据文档,我建议使用delegated 而不是cached

缓存:在这种情况下主机是权威的。可能会有延误 在主机上的写入可用于容器之前。

委托:容器是权威的。可能会延迟到 容器内的更新出现在主机上。

所以 docker-compose 文件如下:

version: '3'
services:
  front:
    container_name: my-front-dev
    image: my-front-dev-image
    build:
      context: .
      dockerfile: front/Dockerfile.dev
    ports:
      - 5002:80
    volumes:
      - ./front/:/app/:rw:delegated

【讨论】:

    【解决方案3】:

    除了将 cached 卷标志添加到您的 docker-compose.yaml 文件:

    version: '3'
    services:
      front:
        container_name: my-front-dev
        image: my-front-dev-image
        build:
          context: .
          dockerfile: front/Dockerfile.dev
        ports:
          - 5002:80
        volumes:
          - ./front/:/app/:rw,cached
    

    我还建议您将 docker-for-mac 升级到最新版本(升级到 2.0.0 版对我的 mac 有显着的性能提升)。

    最后的建议是在 docker-for-mac 设置中提高默认 CPU/内存限制

    【讨论】:

    • 你的卷中有这个./front/:/app/:rw,cached。最后一部分:rw做了什么?
    最近更新 更多