การใช้ MongoDB ด้วย Docker Compose ฉบับง่ายๆ

Oct. 2, 2024 · boychawin

สำหรับใครที่กำลังเริ่มต้นใช้ Docker เพื่อจัดการฐานข้อมูล MongoDB แต่ยังไม่รู้จะเริ่มต้นยังไง ไม่ต้องกังวล วันนี้ผมมีวิธีง่ายๆ ในการตั้งค่า MongoDB ด้วย Docker Compose มาฝากกัน รับรองว่าทำตามได้ไม่ยากเลย!

สิ่งที่ต้องเตรียม

ก่อนอื่น เรามาดูไฟล์ docker-compose.yml ของเรากันก่อน ว่ามันทำงานยังไง


version: '3.8'
name: my-app
services:
  mongodb:
    image: mongo:latest
    restart: always
    ports: 
      - 27035:27017
    environment:
      MONGO_INITDB_DATABASE: my-database
    volumes:
      - mongodb-data:/data/db
      - ./init-mongo.js:/docker-entrypoint-initdb.d/init-mongo.js

volumes:
  mongodb-data:
    driver: local

และไฟล์ init-mongo.js


db.createCollection('users');

อธิบายไฟล์ Docker Compose

  • version: เวอร์ชันที่ใช้คือ 3.8 ซึ่งเป็นเวอร์ชันที่รองรับการใช้งานฟีเจอร์ต่างๆ ของ Docker Compose ได้ครบถ้วน
  • services: กำหนดว่าต้องการใช้งานอะไรบ้าง ในที่นี้เราจะใช้ MongoDB
    • mongodb: กำหนดชื่อของ service เป็น mongodb
      • image: ใช้ MongoDB เวอร์ชันล่าสุด
      • restart: ตั้งค่าให้ container เริ่มทำงานใหม่เมื่อเกิดข้อผิดพลาด
      • ports: เชื่อมต่อพอร์ต 27035 ของเครื่องเราไปยังพอร์ต 27017 ของ MongoDB ภายใน container
      • environment: กำหนดชื่อฐานข้อมูลเริ่มต้นเป็น my-database
      • volumes: ใช้เก็บข้อมูลของ MongoDB และรันสคริปต์ init-mongo.js ตอนเริ่มต้น

การใช้งาน init-mongo.js

ไฟล์ init-mongo.js สามารถใช้เพื่อกำหนดข้อมูลเริ่มต้นให้กับ MongoDB เช่น การสร้าง collection หรือการ insert ข้อมูลเริ่มต้นในฐานข้อมูล

การเชื่อมต่อกับ MongoDB

หลังจากรัน Docker Compose แล้ว เราสามารถเชื่อมต่อกับ MongoDB ได้ง่ายๆ ด้วย connection string ต่อไปนี้

จากภายนอก Docker


mongodb://localhost:27035/my-database

จากภายใน Docker network


mongodb://mongodb:27017/my-database

สรุป

การตั้งค่า MongoDB ด้วย Docker Compose เป็นวิธีที่ง่ายและสะดวกสำหรับการเริ่มต้นใช้งานฐานข้อมูล ไม่ว่าจะเป็นการพัฒนาแอปพลิเคชันในเครื่อง หรือใช้ในสภาพแวดล้อมการทดสอบ เพียงแค่เขียนไฟล์ docker-compose.yml อย่างที่เรายกตัวอย่างไป คุณก็พร้อมที่จะใช้งาน MongoDB ได้เลย!