目录结构

  1. ├─ .dockerignore
  2. ├─ app.js
  3. ├─ Dockerfile
  4. ├─ package.json
  5. └─ process.yml

1 初始化项目

mkdir demo && cd demo
npm init -y 
npm i koa -s

package.json

{
  "private": true,
  "name": "myappp",
  "version": "1.0.0",
  "main": "app.js",
  "license": "ISC",
  "description": "myappp",
  "dependencies": {
    "koa": "^2.7.0"
  }
}

2 添加程序入口

//app.js
const Koa = require("koa");
const app = new Koa();
app.use((ctx) => {
  ctx.body = "Hello Docker";
});
app.listen(3000, () => {
  console.log("app started at http://localhost:3000/");
});

3 添加Dockerfile配置

3.1 Dockerfile

# Dockerfile 
FROM keymetrics/pm2:latest-alpine 
ADD . /usr/src/app 
WORKDIR /usr/src/app 
RUN npm config set registry https://registry.npm.taobao.org/ && \ 
    npm i 
EXPOSE 3000 
# pm2在docker中使用命令为pm2-docker 
CMD ["pm2-runtime", "start", "process.yml"]

3.2 .dockerignore

# .dockerignore 
node_modules

4 添加 process.yml

# process.yml
apps:
  - script: app.js
    instances: 2
    watch: true
    env:
      NODE_ENV: production

5 生成镜像

# 定制镜像 
docker build -t mypm2 . 

# 运行 
docker run -p 3000:3000 -d mypm2

image.png