node.js服务迁移到docker容器

这是一篇 docker 实践教程,将 tangxinfa/upload-fiddle 这个 node.js 服务封装成 docker 容器。 相关代码已提交到 tangxinfa/upload-fiddle 项目。

编写 Dockerfile

 1: FROM dl.dockerpool.com:5000/ubuntu:14.04
 2: 
 3: MAINTAINER tangxinfa <[email protected]>
 4: 
 5: # Change apt sources
 6: ADD .docker/sources.list /etc/apt/sources.list
 7: 
 8: # Install python
 9: RUN \
10:     apt-get update && apt-get -y -qq install python wget
11: 
12: # Install node
13: RUN \
14:     wget http://npm.taobao.org/mirrors/node/v0.12.9/node-v0.12.9-linux-x64.tar.gz &&\
15:     tar xzf node-v0.12.9-linux-x64.tar.gz -C /usr/local
16: 
17: WORKDIR /usr/local/upload-fiddle/
18: 
19: # Install node modules
20: ADD package.json ./
21: ADD *.bashrc ./
22: RUN \
23:     ln -s /usr/local/node-v0.12.9-linux-x64 ./node
24: RUN \
25:     ["/bin/bash", "-c", "source .bashrc; npm install --registry=https://registry.npm.taobao.org"]
26: 
27: # Add project files
28: COPY src ./src
29: COPY config ./config
30: ADD *.sh ./
31: ADD public/*.html ./public/
32: 
33: # Create directory for upload files.
34: RUN \
35:     mkdir public/files &&\
36:     chmod a+w public/files
37: 
38: # Start service.
39: CMD ["/bin/bash", "-c", "./start.sh && read"]
配置行 1
在官方仓库被墙的大环境下,使用 dockerpool.com 提供的镜像
配置行 6
使用163的ubuntu源,提高速度
配置行 25
使用taobao的npm源,提高速度
配置行 39
调用read命令避免命令退出导致容器停止

创建 docker 镜像

sudo docker build -t 'tangxinfa/upload-fiddle:0.0.1' .

运行 docker 容器

sudo docker run -idt --name='upload-fiddle' -p 127.0.0.1:80:80 'tangxinfa/upload-fiddle:0.0.1'

现在可以通过浏览器访问服务了:http://localhost/

打开 docker 容器终端查看运行日志

sudo docker exec -ti upload-fiddle /bin/bash
tail -f run.log

直接 exit 退出终端不会停止容器。