我已经设置了一个用于开发node.js项目的Docker容器。我想使用所有的ES6特性,所以我使用babel-node作为转换程序,但是遇到了一个问题,即堆叠过程在Docker中花费了太多的时间。
我正在从我的主机挂载应用程序目录(这样我就可以在webstorm中编辑),我使用nodemon来跟踪所有的更改并自动重新启动服务器。
docker build -t lazarev/an_app .
docker run -d -p 49160:8080 --name map -v $HOME/projects/app:/usr/src/app lazarev/an_app tail -f /dev/nullnodemon -l命令是在一个shell脚本中设置的,这个脚本是在我的Dockerfile中的ENTRYPOINT中设置的。
Dockerfile
FROM node:argon
MAINTAINER Lazarev Alexandr <lazarev@elje-group.com>
RUN mkdir /docker-entrypoint
ADD ./bootstrap.sh /docker-entrypoint
RUN locale -a
EXPOSE 8080
RUN npm install nodemon -g
RUN npm install babel-cli -g
ENTRYPOINT ["/docker-entrypoint/bootstrap.sh"]bootstarp.sh
#!/bin/bash
echo "******INSTALL NODE MODULES******"
npm install
date
echo "******RUN THE SERVER******"
nodemon -L
datepackege.json
{
"name": "app",
"version": "1.0.0",
"description": "desc",
"author": "Lazarev Alexandr <lazarev@elje-group.com>",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "babel-node --presets es2015 --debug server.js"
},
"license": "ISC",
"dependencies": {
"express": "^4.13.4",
"mapnik": "^3.5.2",
"babel-preset-es2015": "^6.6.0"
}
}我使用bootstrap.sh的原因可能有些奇怪,但还有其他命令我没有粘贴在这里。
因此,我的问题是,在我对主机进行一些更改之后,nodemon会立即检测到更改,但是重新启动服务器需要大约半分钟的时间。如果不通过babel编译ES6,速度就会快得多。
此外,当我在我的主机上运行相同的项目(我的主机是一个MacbookPro,带有2.5 GHz英特尔核心i7处理器和16 my内存),省略Docker时,一切都足够快了。所以我确信问题出在Docker上。
我的问题是:为什么babel-节点在码头容器中的传输速度这么慢?有办法控制它吗?
发布于 2016-03-04 13:23:31
在OS上运行Docker需要使用Docker机器。来自Docker OS X文档
因为Docker守护进程使用Linux特有的内核特性,所以不能在OS中本地运行Docker。相反,您必须使用docker机器来创建并附加到虚拟机(VM)。这台机器是一个Linux,它在Mac上为您托管Docker。
通过VM挂载文件,然后再装入运行中的容器是slow。使文件可以从您的主机一般是可以的,但希望这些文件被监视,编译和同步不是。
几年前在运行boot2Docker时,我在Windows上遇到了同样的问题,最终您没有什么办法。(通过简单的搜索(如https://github.com/boot2docker/boot2docker/issues/593),有许多关于这方面的文章可供使用)
我的解决方案是转到Ubuntu。在非linux机器上共享卷的性能不太可能很快改变。
您可能想看看docker-osx-dev项目,该项目使用rsync并声称“挂载文件夹与本机OS性能相当,标准文件监视机制正常工作”。
https://stackoverflow.com/questions/35794197
复制相似问题