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

我在Docker容器中运行node js官方镜像,我注意到npm start命令比Docker之外的启动需要更长的时间。

是否有设置,我可以改变,使其运行速度更快? 也许分配更多的内存到容器?

为了参考,我将粘贴下面的相关文件。

Dockerfile:

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 

我用来启动我的容器的命令:

 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 NODE_PATH=. react-scripts start

使用osxfs从主机>虚拟机>容器绑定安装将比正常的文件访问慢 。 Linux文件caching受到影响,以实现主机和容器之间的“一致性”。 一些依靠文件caching来获得速度的应用程序可能会变慢。 带有框架的PHPnetworking应用程序特别在加载每个请求中的所有文件时被击中。

React可能稍微好一点,因为文件读取只会在启动时发生一次,但是这些读取在每次启动时仍然会很慢。

任何积极写入目录的东西都会变慢。

解决方法

高速caching

一些caching选项被添加到Docker 17.06中,所以用户可以控制超出默认“一致”级别的所有读取从容器传递到OSX。

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

根据您的目录结构,此设置可能会变得冗长,因为您必须将每个项目独立安装在应用程序目录中:

 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 

同步

另一个select是使用像rsyncunison这样的工具来保持本地卷同步。

一个叫docker-sync的工具是专门为此编写的。 获得一个工作configuration可能有点困难,有时可能会陷入混乱(如果我把它放在暂停状态,那么会导致一些内核的响应),但最终还是有效的。