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

架构

配置文件

  • docker-conmpose.yml
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

    #...ok

运行

# 上线
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,可能导致真的异常