docker部署nodejs+mongodb+redis+nginx

使用Docker-Compose部署Nodejs应用,Nginx反向代理实现负载均衡。

架构

配置文件

  • docker-conmpose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
version: '3'
services:
live-nginx:
image: nginx
restart: on-failure
networks:
- backend
ports:
- "7000:7000"
volumes:
- /opt/live/live-server/nginx.conf:/etc/nginx/nginx.conf
depends_on:
- live-server
live-server:
image: "node:8.4.0"
restart: on-failure
expose:
- "7000"
# 挂在本地目录到/opt/live/server
volumes:
- /opt/live/live-server:/opt/live/server
# 运行命令
command: ["npm", "run", "docker"]
# 工作目录
working_dir: "/opt/live/server"
networks:
backend:
aliases:
- apps
depends_on:
- live-redis
- live-mongo
live-redis:
image: "redis"
networks:
- backend
live-mongo:
networks:
- backend
image: "mongo"
expose:
- "27017"
volumes:
- mongodata:/data/db
volumes:
mongodata:
networks:
backend:
driver: overlay
  • nginx.conf

    1
    #...ok

运行

1
2
3
4
5
6
7
8
9
10
11
# 上线
docker-compose up -d --scale live-server=2
# 列出
docker-compose ps
# 停止
docker-compose stop [service]
# 下线
docker-compose down [service]

简单说明:

  1. 所有service必须在同一个networks下,这样可通过service名称互相访问。
  2. live-server可以部署多个,通过scale参数指定
  3. 使用depends_on解决依赖
  4. 数据不要放在docker中,使用volumes挂载宿主机文件夹
  5. 使用restart指定重启策略,注意不要always,可能导致真的异常