การ Deploy Node.js ด้วย Docker

การ Deploy Node.js ด้วย Docker

การ Deploy แอปพลิเคชันแบบเดิมมักมีปัญหาเรื่อง “เครื่องฉันรันได้ แต่เครื่องอื่นรันไม่ได้” เนื่องจาก environment ไม่เหมือนกัน แต่ปัญหานี้จะหายไปทันทีเมื่อคุณใช้ Docker ซึ่งช่วยแพ็กแอป Node.js พร้อม dependency ทั้งหมดให้อยู่ใน container เดียว ทำให้สามารถนำไป deploy ที่ไหนก็ได้อย่างสม่ำเสมอ

บทความนี้จะพาคุณ Deploy Node.js ด้วย Docker แบบ Hands-on ตั้งแต่การสร้าง Dockerfile → Build Image → Run Container → ทดสอบใช้งานจริง


พื้นฐานที่ต้องมี 

  • Ubuntu Server 25.10
  • ติดตั้ง Docker เรียบร้อย
  • มี Node.js App (เช่น app.js)
  • เปิด port ที่ต้องใช้งาน

ขั้นตอนที่ 1 ติดตั้ง Docker (ถ้ายังไม่มี)

sudo apt update
sudo apt install -y docker.io
 

– เปิดใช้งาน Docker

sudo systemctl enable docker
sudo systemctl start docker
 

– ตรวจสอบ

docker –version
 

ขั้นตอนที่ 2 เตรียมโปรเจกต์ Node.js

– โครงสร้างไฟล์

my-node-app/
│── app.js
│── package.json
 

– ตัวอย่าง app.js

const http = require(‘http’);
const port = 3000;

const server = http.createServer((req, res) => {
res.end(‘Hello from Docker Node.js\n);
});

server.listen(port, () => {
console.log(`Server running on port ${port}`);
});

 

ขั้นตอนที่ 3 สร้าง Dockerfile

– สร้างไฟล์

nano Dockerfile
 

– ใส่โค้ดดังนี้

# ใช้ Node.js LTS image
FROM node:20

# สร้าง working directory
WORKDIR /app

# copy package.json
COPY package*.json ./

# install dependencies
RUN npm install

# copy source code
COPY . .

# เปิด port
EXPOSE 3000

# start app
CMD [“node”, “app.js”]

 

ขั้นตอนที่ 4 สร้าง Image

docker build -t my-node-app .
 อธิบาย
  • -t = ตั้งชื่อ image

ขั้นตอนที่ 5 Run Container

docker run -d -p 3000:3000 –name node-app my-node-app
 

อธิบาย

  • -d = run background
  • -p = map port
  • --name = ตั้งชื่อ container

ขั้นตอนที่ 6 ตรวจสอบ Container

docker ps
 

ขั้นตอนที่ 7 ทดสอบ

curl http://localhost:3000
 

– หรือเปิด browser

http://<IP-Server>:3000
 

ขั้นตอนที่ 8 Stop / Start Container

docker stop node-app
docker start node-app
 

ขั้นตอนที่ 9 ลบ Container

docker rm -f node-app
 

(Advanced) ใช้ Docker Compose

สร้างไฟล์ docker-compose.yml

version: ‘3’
services:
app:
build: .
ports:
“3000:3000”
restart: always
 

-รัน

docker compose up -d
 

ภาพรวมการทำงาน

 
 

ข้อควรระวัง

  • ไม่ควรใช้ image ขนาดใหญ่ (ควรใช้ node:alpine)
  • อย่ารัน container เป็น root (ใน production)
  • ใช้ .dockerignore ลดขนาด image
  • ควรใช้ร่วมกับ Nginx เป็น Reverse Proxy

สรุป

การ Deploy Node.js ด้วย Docker ช่วยให้คุณสามารถควบคุม environment ได้ 100% ลดปัญหา dependency และเพิ่มความสะดวกในการ deploy ทั้งใน local และ production environment นอกจากนี้ยังสามารถ scale ระบบได้ง่าย และรองรับการทำ CI/CD ได้ในอนาคต

หากคุณกำลังเริ่มเข้าสู่สาย DevOps หรือ SysAdmin การเข้าใจ Docker ถือเป็น “ทักษะสำคัญ” ที่ควรฝึกให้คล่องตั้งแต่วันนี้

 


ที่มา: 
– https://stackoverflow.com/questions/52064183/docker-in-docker
– https://medium.com/%40mrdevsecops/dockerfile-node-example-bbd53a2caf0a
– https://medium.com/%40muralidharan_vivekananthan/day-21-learning-devops-docker-build-docker-image-for-a-sample-backend-app-node-be47ebd45bb5