我在Docker容器中运行节点js官方映像,并且我注意到npm命令比在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
发布于 2017-11-30 01:04:54
使用osxfs或通过HyperV绑定从主机> VM >容器装入目录的将是比正常文件访问慢。Linux文件缓存会受到影响,以实现主机和容器之间的“一致性”。一些依赖于文件缓存的应用程序的速度可能会减慢。带有框架的PHP web应用程序在加载每个请求上的所有文件时都会被击中。
由于文件读取只在启动时发生一次,所以React的位置可能稍微好一些,但是每次启动时读取的速度仍然很慢。
任何主动写入目录的操作都会慢一些。
解决办法
缓存
一些将缓存选项添加到Docker 17.06中的挂载使用户能够控制默认的‘一致性’级别以外的挂载,在这个级别上,所有的读取都从容器传递给OSX。
node_modules目录可能是缓慢的主要原因,也是启用缓存的最安全的地方,因为它不会经常更改。
根据您的目录结构,此设置可能会变得详细,因为您必须独立地挂载应用程序目录中的每个项目:
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同步
另一种选择是使用像rsync或unison这样的工具来保持本地卷保持同步,而不是依赖OSX或unison的绑定挂载。
为此专门编写了一个名为船坞同步的工具。获得一个工作配置可能有点困难,有时会使自己陷入困境(如果我让它运行在挂起上,会导致几个内核选项),但它最终还是有效的。
发布于 2022-09-12 21:44:42
视窗
马特的回答似乎对Mac用户有更多的帮助--比Windows用户更多。如果您使用的是,那么您应该在Linux发行版中运行Docker命令。对我来说,这是一个日夜的差别。不要乱动缓存之类的东西。如果您已经安装了Desktop,您只需确保已经安装了Linux发行版。如果你不这么做的话,就很容易设置。
基本上,Windows和Linux之间的任何读写过程都需要很长的时间。如果在Linux的Windows中运行Docker容器,文件读/写几乎是瞬时的,因为文件是从Linux转到Linux的。您必须将文件从Windows中的任何目录移动到Linux发行版中的某个目录,但假设您使用的是git,这应该不是问题。
资源:
https://stackoverflow.com/questions/47494110
复制相似问题