构建最新的nodejs docker服务器
构建最新的nodejs docker服务器
新建一个目录作为我的dockerImages的目录,然后执行:
mkdir /Users/samhu/Public/dockerImages新建package.json
```
{
“name”: “docker_web_app”,
“version”: “1.0.0”,
“description”: “Node.js on Docker”,
“author”: “First Last first.last@example.com“,
“main”: “server.js”,
“scripts”: {
“start”: “node server.js”
},
“dependencies”: {
“express”: “^4.13.3”
}
}
```
- 新建server.js文件
 
'use strict';
const express = require('express');
// Constants
 const PORT = 8080;
//
// // App
 const app = express();
 app.get('/', function (req, res) {
   res.send('Hello world\n');
   });
   app.listen(PORT);
   console.log('Running on http://localhost:' + PORT);
```	
        
* 新建Dockerfile
        vi Dockerfile 
        
内容为:
FROM node:argon
Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
Install app dependencies
COPY package.json /usr/src/app/
RUN npm install
Bundle app source
COPY . /usr/src/app
VOLUME [“/var/www”, “/usr/src/app”, “/var/nginx”]
EXPOSE 8080
#CMD [ “npm”, “start” ]
RUN PORT=8080 npm start
CMD内容 npm start 会执行 node server.js这个命令。。。。。
最后在dockerImage目录下,build成image:
  docker build -t sam.hu/node-web-app . 
  
启动一个nodejs应用服务器,端口号是40000:
  docker run -p 40000:8080 --rm -it -v $(pwd):/usr/src/app sam.hu/node-web-app
不加 `-it` 是为容器启动
查看docker容器使用情况:
  
  docker stats
  
  
# 安装Apache Bench(ab)作压力测试
三种方式:
* 源码安装
[download](http://httpd.apache.org/)
下载后解压,终端执行:
    ./configuare
    
* 二进制安装
      命令行忘记了	
      
* 命令行安装
      yum install httpd
      
## 使用ab测试并发
      ab -n 5000 -c 600 http://www.jinjiang.com/
      
如果出现错误:
  
  enchmarking www.jinjiang.com (be patient)
  socket: Too many open files (24)
  
则是因为服务器对并发文件连接有open files限制	,登陆服务器执行:
  ulimit -a  
  
找到:
  open files                      (-n) 1024	
  
调整可以打开的文件数:
   ulimit -n 65535
同时修改nginx.conf添加
  worker_rlimit_nofile 65535;
  
但是在nginx服务器可以打开的文件数量受你操作系统的限制,所以编辑
`/etc/sysctl.conf` 添加如下内容:
  fs.file-max = 70000
  
保存退出,从新读取系统配置
`sysctl -p`
再编辑 `/etc/security/limits.conf` 添加内容:
  soft nofile 10000
  hard nofile 30000
此修改内容需要reboot系统才能生效,所以务必从新启动下服务器。
再次查看系统输出
  ulimit -Hn
  ulimit -Sn	
输出:
30000 10000
  
	
