Docker with NodeJS - Phần 1: Docker với Express.JS



  • Docker with NodeJS - Phần 1: Docker với Express.JS

    Mình lượn lờ trên Google thì thấy đa phần là tài liệu Docker nhưng chủ yếu là NginX, Laravel, bla...bla... Thực ra NodeJS có bài viết hướng dẫn nhưng mình xin phép được trans lại để người Việt đọc dễ hiểu hơn

    Đây là bài đầu tiên mình viết trên Kipalog mong các bạn góp ý và ủng hộ mình, mình xin cảm ơn

    Docker là gì?

    Chắc hẳn lâu hỏi này không còn lạ lẫm nữa. Mình xin tóm tắt lại

    Docker là một công cụ tạo môi trường được “đóng gói” (còn gọi là Container) trên máy tính mà không làm tác động tới môi trường hiện tại của máy, môi trường trong Docker sẽ chạy độc lập.

    Để nắm rõ hơn bạn có thể xem bài giới thiệu ở Docker là gi?

    Đọc thêm

    Vậy ưu điểm của việc sử dụng Docker là gì?

    Mình đã từng phải rất mệt mỏi khi config môi trường, nào là node khác version. Có lần chỉ vì node khác version mà phải mất vài ngày vì nó báo sai syntax (-.- Hồi mới làm vài ba cái Node) trong khi đó code trong máy vẫn ok. Vậy trước hết Docker sinh ra để giúp đồng bộ môi trường từ máy bạn sang 1 máy khác một cách đơn giản chỉ qua 1 cái image. Còn một số ưu điểm khác về Docker các bạn có thể tự tìm hiểu nhé

    Cài đặt và sử dụng Docker

    Mọi tài liệu tham khảo các bạn có thể xem ở Install Docker

    Vào lại vấn đề chính chạy Docker với Express

    Ta khởi tạo 1 thư mục ở đây mình đặt tên là docker-express và tạo 1 file package.json cho nó bằng

    Tạo 1 Node.JS App

    npm init -y && npm install express && touch index.js
    or
    yarn init -y && yarn add express && touch index.js
    

    1 trong 2 câu lệnh trên sẽ khởi tạo package.json, kéo module express về và tạo 1 file index.js cho chúng ta.
    Ta sẽ chỉnh sửa 1 số trong file package.json để có 1 file như sau

    {
      "name": "docker-express",
      "version": "1.0.0",
      "main": "index.js",
      "license": "MIT",
      "dependencies": {
        "express": "^4.16.3"
      },
      "scripts": {
        "start":"node index.js"    
      }
    }
    

    Ở lần này mình sẽ đơn giản send ra text "It Works", viết express trong index.js như sau

    const app = require('express')();
    app.listen(3000, () => console.log("Server is running"))
    app.get('/', (req, res) => res.send("It works !!"))
    

    Như vậy app trong ta sẽ listen ở port 3000
    Run thử. Mọi thứ đã tiến triển thuận lợi ta sẽ qua bước tiếp theo đó là làm sao để app chúng ta chạy trên Docker

    Tạo DockerFile

    Trước hết ta tạo 1 file trống bằng câu lệnh

    touch Dockerfile
    

    Trước hết, ở dòng đầu tiên, ta phải chỉ ra rằng chúng ta muốn build từ image nào(Ở đây là version docker ở trên phần đọc thêm mình có để link của DockerHub các bạn có thể xem thêm)
    Ở đây mình dùng phiên bản carbon tức là nodejs version 8.10.0 LTS

    FROM node:carbon
    

    Ở dòng tiếp theo ta sẽ khai báo đường dẫn của code chúng ta trong image, mình sẽ để ở /usr/src

    # Create app directory
    WORKDIR /usr/src/app
    

    Ở dòng tiếp theo ta sẽ copy toàn bộ source của project vào trong image và download các dependencies

    # Bundle app src
    COPY . .
    
    # Install app dependencies
    RUN npm install
    

    Nếu ta copy bằng cách trên thì cả folder node_modules sẽ được copy sang image. Vì vậy ta tạo 1 file .dockerignore rồi thêm vào đó /node_modules (Tương tự như .gitignore)

    Vì ta listen app ở cổng 3000 nên ta sẽ EXPOSE ra tại cổng 3000

    EXPOSE 3000
    

    Và cuối cùng ta dùng CMD để chạy App. Hãy chắc chắn rằng bạn đã config npm start chạy câu lệnh node index.js

    CMD [ "npm", "start" ]
    

    Ta sẽ có 1 Dockerfile như sau

    FROM node:carbon
    # Create app directory
    WORKDIR /usr/src/app
    # Bundle app src
    COPY . .
    # Install app dependencies
    RUN npm install
    EXPOSE 3000
    CMD [ "npm", "start" ]
    

    Đừng quên Ignore node_modules nhé ^^

    Build image

    Ta sử dụng câu lệnh

    docker build --rm -f Dockerfile -t docker-express:latest .
    

    Ở sau -t các bạn có thể thay bằng tên image bạn muốn đặt.

    Mách nhỏ

    Bạn có thể sử dụng Extension Docker từ VSCode (Xem thêm Tại đây). Chỉ cần một vài cái enter là build xong app

    Ok xong ta có thể thử bằng câu lệnh

    docker images
    

    alt text
    Như của mình là đã xong. Ta có thể run được rồi

    Run image

    Ta sử dụng lệnh sau

    docker run --rm -d -p 3000:3000 docker-express:latest
    

    Bạn đặt tên như thế nào thì chỉnh lại tên ở docker-express nhé !
    Rồi kiểm tra bằng docker ps alt text
    App vẫn chạy mình sẽ thử lên chrome và test
    alt text
    Vậy là xong.

    Mong là sau bài viết này các bạn có thêm 1 chút kiến thức về Docker. Mong các bạn ủng hộ mình trong thời gian tới. Cảm ơn tất cả mọi người <3

    Nguồn: Kipalog


Hãy đăng nhập để trả lời
 

Có vẻ như bạn đã mất kết nối tới LaptrinhX, vui lòng đợi một lúc để chúng tôi thử kết nối lại.