Devdit
 

วิธีติดตั้ง Node.js Express.js MySQL ด้วย Docker Compose

1.3K

บทความนี้สอนวิธีติดตั้ง Node.js, Express.js และฐานข้อมูล MySQL ร่วมกับโปรแกรม Adminer ด้วย Docker Compose ซึ่งเป็นเครื่องมือที่ทำให้เราสามารถจัดการ containers หลายๆ ตัวพร้อมกันได้อย่างมีประสิทธิภาพ และมีความหยืดหยุ่นสูง โดย Docker Compose จะใช้ไฟล์ชื่อ docker-compose.yml

 

เนื้อหาจะแบ่งการติดตั้งออกเป็น 3 services แต่ละ service จะมี Dockerfile ของตัวเอง แต่ทั้งหมดใช้ docker-compose.yml เดียวกัน โดยมีลำดับขั้นตอนการติดตั้งดังนี้

1. ติดตั้ง Node.js และ Express.js

2. ติดตั้ง MySQL 

3. ติดตั้ง Adminer

 

ตัวอย่าง วิธีติดตั้ง Node.js Express.js MySQL Adminer ด้วย Docker Compose

1. สร้าง folder ชื่อ myapp และสร้างไฟล์ชื่อ docker-compose.yml ใน folder myapp และเขียนคำสั่งลงใน docker-compose.yml เพื่อติดตั้งดังนี้

1.1. app: เรียก Dockerfile ใน folder app เพื่อติดตั้ง Node.js และ Express.js

1.2. db: เรียก Dockerfile ใน folder db เพื่อติดตั้ง MySQL และกำหนดรหัสผ่าน root และชื่อฐานข้อมูล

1.3. adminer: เรียก Dockerfile ใน folder adminer เพื่อติดตั้ง Adminer

version: '3.8'
services:

  app:
    build:
      context: app
      dockerfile: Dockerfile
    command: npm run dev
    ports:
      - '3000:3000'
    depends_on:
      - db
    volumes:
      - ./app/:/app/
      - /app/node_modules

  db:
    build:
      context: db
      dockerfile: Dockerfile
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: mypassword
      MYSQL_DATABASE: mydatabase
    ports:
      - '3306:3306'
    volumes:
      - db_data:/var/lib/mysql
            
  adminer:
    build:
      context: adminer
      dockerfile: Dockerfile
    restart: always
    ports:
      - 8080:8080

volumes:
  db_data:

 

2. สร้าง folder app ใน myapp และสร้างไฟล์ชื่อ Dockerfile และเขียนคำสั่งเพื่อติดตั้ง Node.js และติดตั้ง Express.js จากไฟล์ชื่อ package*.json

FROM node:14
WORKDIR /app
COPY package*.json .
RUN npm install
COPY . .
EXPOSE 3000

 

3. สร้างไฟล์ชื่อ package.json ใน folder app และเขียนคำสั่งเพื่อติดตั้ง Express และ Nodemon เพื่อให้ Express.js ของเรารองรับคุณสมบัติ Hot Reload (เปลี่ยนแปลงโค้ด และผลลัพธ์เปลี่ยน ไม่ต้อง Restart Server)

{
  "name": "myapp",
  "version": "1.0.0",
  "description": "",
  "main": "app.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "dev": "nodemon app.js --legacy-watch"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.18.2"
  },
  "devDependencies": {
    "nodemon": "^3.0.1"
  }
}

 

4. สร้างไฟล์ชื่อ app.js และเขียนโปรแกรม Express.js เป็นอันเสร็จสิ้นการติดตั้ง service Node.js และ Express.js

const express = require('express')
const app = express()
const port = 3000

app.get('/', (req, res) => {
  res.send('Hello, World!')
})

app.listen(port, () => {
  console.log(`Example app listening on port ${port}`)
})

 

5. สร้าง folder ชื่อ db ใน folder myapp และสร้างไฟล์ชื่อ Dockerfile และเขียนคำสั่งเพื่อติดตั้ง MySQL เวอร์ชัน 8.0

FROM mysql:8.0

 

6. สร้าง folder ชื่อ adminer ใน folder myapp และสร้างไฟล์ชื่อ Dockerfile และเขียนคำสั่งเพื่อติดตั้ง Adminer เวอร์ชันล่าสุด และเปิด port 8080

FROM adminer
EXPOSE 8080

 

7. ทดสอบโดยการเข้า command line และใช้คำสั่ง docker-compose build (อย่าลืมเปิดโปรแกรม docker ก่อนรันคำสั่ง)

D:\myapp>docker-compose build

 

8. เมื่อ build containers ทั้งหมดแล้วให้ใช้คำสั่ง docker-compose up เพื่อสั่งรัน containers ทั้งหมด

D:\myapp>docker-compose up

 

9. ทดสอบ Node.js และ Express.js โดยทดสอบเข้าผ่าน URL หากสำเร็จจะเห็นข้อความ Hello World!

http://localhost:3000/

 

10. ทดสอบ MySQL และ Adminer โดยทดสอบเข้าผ่าน URL และกรอก ชื่อผู้เข้าใช้งาน = root / รหัสผ่าน = mypassword หากสำเร็จจะเห็นฐานข้อมูลชื่อ mydatabase

http://localhost:8080/

 

11. ทดสอบว่ามี 3 containers ที่รันอยู่โดยใช้คำสั่ง docker-compose ps

D:\myapp>docker-compose ps
NAME        IMAGE     COMMAND                               SERVICE 
adminer     adminer   "entrypoint.sh php -S                 adminer
app         app       "docker-entrypoint.sh npm run dev"    app
db          db        "docker-entrypoint.sh mysqld"         db

 

สรุป บทความนี้ได้เรียนรู้วิธีการติดตั้ง Node.js, Express.js, MySQL และ Adminer ด้วยเครื่องมือ Docker Compose อีกทั้งได้เรียนรู้การใช้คำสั่ง build และ up เพื่อสร้าง และรัน containers ทั้งหมด สุดท้ายเรียนรู้การใช้คำสั่ง ps เพื่อแสดงรายชื่อของ container ที่กำลังทำงานอยู่ทั้งหมดออกสู่หน้าจอ

แก้ไข 1 ปีที่แล้ว
ชอบ
ลิ้งก์
แชร์
Devdit มีช่อง YouTube แล้ว
เราสร้างวิดีโอเกี่ยวกับเทคโนโลยี ทำตามง่ายๆ