โดยปกติถ้าเราสร้าง Web API หรือ Web Application ด้วย MEAN Stack และใช้ฐานข้อมูลเป็น MongoDB บนเครื่องเราตรงๆ จะไม่ตื่นเต้นอะไรเท่าไหร่
แต่ถ้าเกิดเราต้องการเอามาใช้กับ Docker นี่สิ สนุกสนานกันแน่ๆ ซึ่งในคอร์สอบรมเรียนรู้ MEAN Stack แบบนอกสถานที่ ก็มีการทดสอบ Deploy ตัวแอพพลิเคชั่น MEAN Stack บน Docker ด้วย
ซึ่งตัว MEAN Stack จะอยู่บน Docker Container คนละตัวกับฐานข้อมูล MongoDB จุดนี้ใครยังไม่ค่อยคุ้นกับการทำงานของ Docker อาจจะตาแตกได้ โค้ชพลแรกๆ ก็เหมือนกันล่ะ มึนไปหลายวันทีเดียว
ดังนั้นแชร์เคล็ดลับเล็กๆ น้อยๆ มาไว้ที่นี่ เวลาเริ่มจะได้ง่ายขึ้นกันนะครับ
โดยตัวอย่างนี้จะต่อเนื่องจาก วิธีสร้าง Docker Image ให้กับ Express และ Node.js แบบง่ายๆ นะ ดังนั้นเราควรจะมีไฟล์ต่อไปนี้ในโฟลเดอร์โปรเจคอยู่แล้ว
Dockerfile
.dockerignore
1. ปรับส่วนของการเชื่อมต่อ MongoDB
โดยในส่วนของ Express Web Server โค้ชพลใช้ monk
module ในการเชื่อมต่อกับ MongoDB ก็ปรับส่วน IP เป็น mongo
ได้เลย
let db = require('monk')('mongo:27017/employee');
เพราะส่วนนี้เราจะเชื่อมต่อกับ Docker Container ของ MongoDB อีกที โดยใช้ชื่อว่า mongo
2. สร้างไฟล์ docker-compose.yml
ในที่นี้เราจะใช้คำสั่ง docker-compose
เป็นตัว “ปลุก” Image ทั้ง MEAN Stack และ MongoDB ขึ้นมา
ให้เราสร้างไฟล์ docker-compose.yml
ไว้ในโฟลเดอร์ของโปรเจค MEAN Stack ของเรา
version: "2"
services:
web:
build: .
volumes:
- ./:/usr/src/app/
- /usr/src/app/node_modules
ports:
- "80:3000"
links:
- mongo
mongo:
image: mongo
ports:
- "27017:27017"
บันทึกไฟล์ และ
3. รันไฟล์ docker-compose.yml
รันคำสั่ง docker-compose up
เท่านี้ระบบก็จะสร้าง Container ขึ้นมาจาก Image ทั้งฝั่งของโปรเจค MEAN Stack และ MongoDB
ถ้ามีการ Build Image ใหม่ โดยเฉพาะฝั่งของ MEAN Stack Container ก็ใช้คำสั่ง docker-compose build
หรือ docker-compose up --build
ได้นะ