一、目标

node.js 的 web 项目部署到 docker 容器中。

node.js 的 web 开发框架暂时使用的是 egg

目标:

  • 实现宿主机端口 7001 与 容器端口 7001 映射
  • 实现宿主机本地卷(目录) /data/node/egg1 与容器 /data/node/egg1/ 目录映射,作为数据卷
  • npm start 后,容器后台运行 web 服务。

使用 7001 端口的原因是因为 egg 默认的端口就是 7001

二、实现

1、镜像:

直接使用的是官方的 node 镜像,没必要自己构建镜像。

$ docker pull node:latest

本地的 nodejs 的 web 项目使用的是 egg-cli 构建的项目

2、运行容器:

$ docker run -dit -p 7001:7001 -v /data/node/egg1:/data/node/egg1 --name egg1 node:latest 

容器开启之后,会在后台一直运行,npm项目可能需要 npm install,也可以在宿主机进行 npm install,如果想在容器中进行,则需要进入容器进行操作。

$ docker exec -it 容器ID /bin/bash 

进入容器之后,到 /data/node/egg1 进行 npm install 即可。

使用 exec 进入容器,再 exit 之后不会打断当前容器的运行状态

3、开启 node web 应用程序:

一般会使用 npm run dev 或者是 npm run start 来开启服务(egg 是这样子启动的),一种是开发一种是部署。如果开发阶段,则在进入容器之后(见 第2点 运行容器),使用 npm run dev 然后不要退出,开个终端就可(这个比较方便)。如果是部署,则 npm run start,自动进入守护进程模式。