【发布时间】:2016-03-04 10:53:30
【问题描述】:
我已经设置了一个 Docker 容器来开发 node.js 项目。我想使用所有 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/null
nodemon -l commang 在 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
date
packege.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 Intel Core i7 处理器和 16gb 内存),省略 Docker,一切都足够快。所以我确信问题出在Docker。
我的问题是: 为什么 babel-node 在 Docker 容器中转译这么慢?有办法限制吗?
【问题讨论】:
-
Dors
docker stats your_container或docker top展示什么有趣的东西?您也可以docker exec然后启动top或任何其他命令 -
docker stats命令显示编译开始时cpu使用率达到75-99%,内存使用率没有明显变化,在10%左右。 -
能否将 node_modules 目录挂载为卷?例如:`volumes: - .node_modules_docker:/app/node_modules:delegated`
标签: node.js docker ecmascript-6 babeljs