Node.js in Containers Using Docker
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. ...
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