Node.js in Containers Using Docker
Bài đăng này đã không được cập nhật trong 7 năm
Chào các bạn, ở bài viết hôm nay mình sẽ hướng dẫn các bạn cách build một ứng dụng Node.js sử dụng Docker Container.
Đầu tiên mình sẽ hướng dẫn các bạn tạo một ứng dụng Node.js đơn giản, sau đó chúng ta sẽ build một Docker image cho ứng dụng này, cuối cùng là chạy image vừa build trên container.
Như các bạn đã biết (có thể một số bạn chưa biết) thì Docker cho phép chúng ta đóng gói các ứng dụng kèm với các dependencies vào một container. Hiểu đơn giản thì một container là một phiên bản basic của hệ điều hành Linux, còn image là phần mềm mà bạn có thể load vào container.
1. Tạo Node.js app
Đầu tiên, mình sẽ tạo một thư mục có tên là docker_demo , trong thư mục này mình tạo file package.json có nội dung như sau:
{
"name": "docker_web_app_demo",
"version": "1.0.0",
"description": "Node.js on Docker",
"author": "your_name <your_name@example.com>",
"main": "server.js",
"scripts": {
"start": "node server.js"
},
"dependencies": {
"express": "^4.13.3"
}
}
Tiếp theo mình sẽ tạo file server.js và tạo một web app đơn giản sử dụng Express.js framework.
'use strict';
const express = require('express');
const PORT = 8080;
const HOST = '0.0.0.0';
const app = express();
app.get('/', function (req, res) {
res.send('Node.js on Docker');
});
app.listen(PORT, HOST);
console.log('Running on http://' + HOST + ':' + PORT);
2. Tạo file Dockerfile
Tiếp theo chúng ta cần build một Docker image, mình sẽ tạo file Dockerfile
touch Dockerfile
Đầu tiên là định nghĩa image mà chúng ta build từ đâu, các bạn tham khảo trên này nhé
FROM node:boron
Tiếp đến, tạo một thư mục để chứa code bên trong image.
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
Bước tiếp theo ta cần cài đặt các dependencis sử dụng trong ứng dụng sử dụng package manager npm.
COPY package.json /usr/src/app/
RUN npm install
Để đưa source vào trong image ta dùng lệnh COPY
COPY . /usr/src/app
Chúng ta sẽ kết nối đến port 8080 vì thế mình sử dụng lệnh EXPOSE để mapping.
EXPOSE 8080
Cuối cùng là định nghĩa lệnh sẽ chạy runtime.
CMD [ "npm", "start" ]
Tới đây, file Dockerfile sẽ như thế này:
FROM node:boron
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json /usr/src/app/
RUN npm install
COPY . /usr/src/app
EXPOSE 8080
CMD [ "npm", "start" ]
Tiếp đến chúng ta cần tạo file .dockerignore nằm cùng thư mục với file Dockerfile để ignore những thư mục không cần thiết như node_modules, npm-debug.log… không cho nó vào image Docker.
node_modules
npm-debug.log
3. Build image
Bây giờ chúng ta sẽ build image.
$ docker build -t <your username>/node-web-app-docker .
4. Run image
Các bạn vào thư mục chứa file Dockerfile và chạy lệnh sau để run image.
$ docker run -p 49160:8080 -d <your username>/node-web-app-docker
Kiểm tra xem image của ta đã được run thành công chưa:
$ docker ps
Chúng ta có thể vào trong container bằng cách sử dụng lệnh sau
$ docker exec -it <container id> /bin/bash
5. Test
Để test ứng dụng vừa build, bạn lấy port mà bạn đã map với Docker, ở trên thì Docker đã map port 8080 bên trong container với port 49160 trên máy của mình.
Bây giờ bạn có thể call ứng bằng curl ngon lành rồi
$ curl -i localhost:49160
HTTP/1.1 200 OK
X-Powered-By: Express
Content-Type: text/html; charset=utf-8
Content-Length: 12
Date: Sun, 25 Jun 2017 03:53:22 GMT
Connection: keep-alive
Node.js on Docker
Hi vọng bài viết này sẽ giúp ích cho các bạn trong việc build một ứng dụng Node.js đơn giản sử dụng Docker. Chúc các bạn thành công.
Tham khảo
[1] https://www.airpair.com/node.js/posts/getting-started-with-docker-for-the-nodejs-dev [2] http://jdlm.info/articles/2016/03/06/lessons-building-node-app-docker.html [3] https://nodejs.org/en/docs/guides/nodejs-docker-webapp/ [4] https://webapplog.com/node-docker/
All rights reserved