# Docker开发环境 [高质量Node.js微服务的编写和部署](http://mp.weixin.qq.com/s?__biz=MzAwODE0NDE0MA==&mid=2652773063&idx=2&sn=1db80ad8e95349e38224cf8fbf4057ef&scene=1&srcid=0805MkUS3rhRaI5qOko1WJDp#wechat_redirect) 被上面的文章带坑了 在时速云测试自动构建及自动上传时注册构建填的master ,创建容器时也是master分支即可 昨天构建成功最后一步buffering to disk出错估计是时速云问题,隔天就好了。 [github地址](https://github.com/giftman/docker_test) ### Usage #### Dockerfile > node 现在用的是6.5,直接替换为4.5.0..这些就可以 ```shell FROM sameersbn/ubuntu:14.04.20160827 MAINTAINER chufan@qq.com RUN \ cd /opt && \ wget http://nodejs.org/dist/v6.5.0/node-v6.5.0-linux-x64.tar.gz && \ tar -xzf node-v6.5.0-linux-x64.tar.gz && \ mv node-v6.5.0-linux-x64 node && \ cd /usr/local/bin && \ ln -s /opt/node/bin/* . && \ DEBIAN_FRONTEND=noninteractive npm install -g nodemon --no-optional && \ sudo ln -s /opt/node/lib/node_modules/nodemon/bin/nodemon.js /usr/bin/nodemon && \ rm -f /opt/node-v6.5.0-linux-x64.tar.gz WORKDIR /src CMD ["/bin/bash"] ``` #### Start ```shell docker build -t winfan/node-dev . docker run -i -t --rm \ -p 3000:3000 \ -v `pwd`:/src \ winfan/node-dev ``` ``` #add nodemon for dev npm install -g nodemon ``` 启动应用 ``` nodemon app.js ``` 一旦把镜像构建好了,我们就可以使用下面的语句运行一个容器了: 让我们来看一看docker运行命令中发生了什么. -i 会在交互模式下启动容器(对比 -d 是在分离模式下). 这就意味一旦交互会话结束,容器就会退出. -t 会分配一个pseudo-tty. --rm 会在退出时移除容器及其文件系统. -p 3000:3000 会将主机上的端口 3000 转发到容器上的端口3000. -v `pwd`:/src 这句将会将当前的工作目录挂载到主机上(例如,我们的项目文件)容器中的 /src 里面. 我们将当前目录作为一个卷挂在,而不是使用Dockerfile中的ADD命令,那样我们在文本编辑器中做的任何修改都可以立即在容器中看到了. winfan/node-dev 是要运行的docker镜像的名称和版本 – 这跟我们用来构建docker镜像时使用的名称和版本是相同的. 由于Dockerfile指定了CMD ["/bin/bash"], 容器一启动,我们就会登录到一个bash shell环境中. ### Base Image - [x] Ubuntu (fork sameersbn/ubuntu add node and nodemon) - [ ] node-argo 官方发布 - [ ] apline publish ### Reference * 基于 Docker 开发 NodeJS 应用 * [高质量Node.js微服务的编写和部署](http://mp.weixin.qq.com/s?__biz=MzAwODE0NDE0MA==&mid=2652773063&idx=2&sn=1db80ad8e95349e38224cf8fbf4057ef&scene=1&srcid=0805MkUS3rhRaI5qOko1WJDp#wechat_redirect)