Dockerizing a Node.js web app

如果想要在 Docker 在跑 NodeJS 的應用,可以參考 NodeJS 官網上有一篇 「Dockerizing a Node.js web app」介紹,還蠻簡單易懂的,這邊稍微紀錄一下相關步驟。


  1. 首先,建立 package.json
  2. {
      "name": "docker_web_app",
      "version": "1.0.0",
      "description": "Node.js on Docker",
      "author": "First Last ",
      "main": "server.js",
      "dependencies": {
        "express": "^4.13.3"
      }
    }
    

  3. 使用 Express 建立簡單的 web server
  4. '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);
    

  5. 增加一個 Dockerfile
  6. touch Dockerfile
    

  7. 在 Dockerfile 中寫入以下資訊
  8. 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
    
    EXPOSE 8080
    CMD [ "npm", "start" ]
    

    Dockerfile 是 docker 用來 build image 的參考檔案。裡面會包含多個 commands,Docker 在 build image 的時候,會照著裡面所列的步驟一步一步執行。詳細的指令可以參考 Docker 官方網站的 Dockerfile reference
  9. Building your image
  10. docker build -t /node-web-app .
    

  11. 確認 image 已經建立完成
  12. docker images
    

  13. 透過 docker run 執行
  14. docker run -p 49160:8080 -d /node-web-app