首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Docker容器中加速node.js的启动

如何在Docker容器中加速node.js的启动
EN

Stack Overflow用户
提问于 2017-11-26 07:58:47
回答 2查看 5.6K关注 0票数 6

我在Docker容器中运行节点js官方映像,并且我注意到npm命令比在Docker之外运行要花费更长的时间。

是否可以更改设置以使其运行得更快?也许会给容器分配更多的内存?

供参考,我将粘贴相关文件如下。

Dockerfile:

代码语言:javascript
复制
FROM node:8.1

WORKDIR var/www/app

# Global install yarn package manager
RUN apt-get update && apt-get install -y curl apt-transport-https && \
    curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
    echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
    apt-get update && apt-get install -y yarn

RUN npm install -g create-react-app

用于启动容器的命令:

代码语言:javascript
复制
docker run --rm -ti \
--link api-container:api \
--name my-container -p 3000:3000 \
-v $(pwd):/var/www/app nxmohamad/my-container \
bash

开始脚本就是NODE_PATH=. react-scripts start

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-30 01:04:54

使用osxfs或通过HyperV绑定从主机> VM >容器装入目录的将是比正常文件访问慢。Linux文件缓存会受到影响,以实现主机和容器之间的“一致性”。一些依赖于文件缓存的应用程序的速度可能会减慢。带有框架的PHP web应用程序在加载每个请求上的所有文件时都会被击中。

由于文件读取只在启动时发生一次,所以React的位置可能稍微好一些,但是每次启动时读取的速度仍然很慢。

任何主动写入目录的操作都会慢一些。

解决办法

缓存

一些将缓存选项添加到Docker 17.06中的挂载使用户能够控制默认的‘一致性’级别以外的挂载,在这个级别上,所有的读取都从容器传递给OSX。

node_modules目录可能是缓慢的主要原因,也是启用缓存的最安全的地方,因为它不会经常更改。

根据您的目录结构,此设置可能会变得详细,因为您必须独立地挂载应用程序目录中的每个项目:

代码语言:javascript
复制
docker run --rm -ti \
  --link api-container:api \
  --name my-container -p 3000:3000 \
  -v $(pwd)/index.js:/var/www/app/index.js \
  -v $(pwd)/package.json:/var/www/app/package.json \
  -v $(pwd)/src:/var/www/app/src \
  -v $(pwd)/node_modules:/var/www/app/node_modules:cached \
  nxmohamad/my-container \
  bash

同步

另一种选择是使用像rsyncunison这样的工具来保持本地卷保持同步,而不是依赖OSX或unison的绑定挂载。

为此专门编写了一个名为船坞同步的工具。获得一个工作配置可能有点困难,有时会使自己陷入困境(如果我让它运行在挂起上,会导致几个内核选项),但它最终还是有效的。

票数 10
EN

Stack Overflow用户

发布于 2022-09-12 21:44:42

视窗

马特的回答似乎对Mac用户有更多的帮助--比Windows用户更多。如果您使用的是,那么您应该在Linux发行版中运行Docker命令。对我来说,这是一个日夜的差别。不要乱动缓存之类的东西。如果您已经安装了Desktop,您只需确保已经安装了Linux发行版。如果你不这么做的话,就很容易设置。

基本上,Windows和Linux之间的任何读写过程都需要很长的时间。如果在Linux的Windows中运行Docker容器,文件读/写几乎是瞬时的,因为文件是从Linux转到Linux的。您必须将文件从Windows中的任何目录移动到Linux发行版中的某个目录,但假设您使用的是git,这应该不是问题。

资源:

那篇文章解释了这一点

关于设置WSL 2和Linux区的Docker文档

使用WSL 2的VSCode

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47494110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档