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

Nguyễn Hoàng Minh viết ngày 20/03/2018

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
Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Nguyễn Hoàng Minh

6 bài viết.
23 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
24 8
Đôi điều tâm sự Hmm đã bao giờ bạn bị nhờ là: "Mày ơi mấy hôm nữa câu lạc bộ làm cái ì ven, mày làm cái form nào đăng kí cái là chúng nó có vé/mail...
Nguyễn Hoàng Minh viết 2 tháng trước
24 8
White
6 2
Set custom domain free cho Firebase hosting Như tiêu đề, em vừa tìm ra cách set được Domain của Freenom cho Firebase Hosting để đỡ phải vất vả nhậ...
Nguyễn Hoàng Minh viết 4 tháng trước
6 2
White
2 0
Học Firebase qua Project Phần 1: Giới thiệu và tạo giao diện cho ứng dụng nhắn tin Như các bạn đã biết Firebase hiện tại là nền tảng khá phố biến ...
Nguyễn Hoàng Minh viết 3 tháng trước
2 0
Bài viết liên quan
White
0 2
fCC: Technical Documentation Page note So I have finished the HTML part of this exercise and I want to come here to lament about the lengthy HTML ...
HungHayHo viết 2 tháng trước
0 2
White
19 1
Toán tử XOR có tính chất: + A XOR A = 0 + 0 XOR A = A Với tính chất này, có thể cài đặt bài toán sau với độ phức tạp O(N) về runtime, và với O(1)...
kiennt viết gần 2 năm trước
19 1
White
1 1
Chào mọi người, hôm nay mình viết một bài TIL nhỏ về cách lấy độ phân giải của màn hình hiện tại đang sử dụng. xdpyinfo | grep dimensions Kết quả...
namtx viết 1 năm trước
1 1
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
6 bài viết.
23 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!