Docker Compose Production DevOps

Docker Compose Production

📅 2026-02-09 | โดย อ.บอม กิตติทัศน์ เจริญพนาสิทธิ์ — SiamCafe.net Since 1997

Docker Compose Production คืออะไร / ทำไมถึงสำคัญ

น้องๆ หลายคนคงคุ้นเคยกับ Docker Compose ที่ใช้รันพวก development environment กันอยู่แล้ว แต่พอจะเอาขึ้น Production จริงๆ กลับงงว่า "เฮ้ย มันทำได้ด้วยเหรอ?" คำตอบคือ "ได้" แต่มันต้องมีเทคนิคกันหน่อย

Docker Compose Production ไม่ใช่แค่เอา docker-compose up -d ไปรันบน server แล้วจบนะเว้ย! มันคือการที่เราใช้ Docker Compose มาจัดการ application ของเราบน Production environment อย่างเป็นระบบ มีการจัดการเรื่อง network, volume, resource limits, และ security อย่างเหมาะสม

ทำไมมันถึงสำคัญน่ะเหรอ? สมัยผมทำร้านเน็ต SiamCafe นะเว้ย (ตั้งแต่ปี 97 โน่น!) การ deploy application นี่โคตรปวดหัวเลย ต้องมานั่ง setup environment เองทีละเครื่องๆ แต่ Docker Compose Production ช่วยให้เรา deploy application ได้ง่าย, เร็ว, และ repeatable มากๆ ไม่ว่าจะเป็น application เล็กๆ หรือใหญ่ๆ ก็ตาม

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

Docker คืออะไร?

อันนี้พื้นฐานสุดๆ ใครยังไม่รู้จัก Docker นี่ต้องไปทำการบ้านด่วนๆ Docker มันคือ containerization technology ที่ช่วยให้เรา package application พร้อม dependencies ทั้งหมดลงใน container แล้วเอาไปรันที่ไหนก็ได้ โดยไม่ต้องกังวลว่า environment จะไม่เหมือนกัน

Docker Compose คืออะไร?

Docker Compose คือ tool ที่ช่วยให้เรา define และ manage multi-container Docker application ได้ง่ายขึ้น โดยเราจะ define service ต่างๆ ในไฟล์ docker-compose.yml แล้วใช้คำสั่ง docker-compose up เพื่อรันทุกอย่างพร้อมกัน

ความเข้าใจเรื่อง Network และ Volume

เรื่อง network นี่สำคัญมากนะเว้ย ใน Production เราต้อง define network ให้ดีว่า container ไหนคุยกับ container ไหนได้บ้าง ส่วน volume ก็สำคัญไม่แพ้กัน เพราะมันคือที่เก็บข้อมูลของ container เราต้องจัดการให้ดีว่าข้อมูลจะถูก persist ยังไง เวลา container ตายไป

วิธีใช้งาน / เริ่มต้นยังไง

เอาล่ะ มาถึงส่วนที่สำคัญที่สุด คือเราจะเริ่มใช้งาน Docker Compose Production ยังไง? ผมบอกเลยว่ามันไม่ได้ยากอย่างที่คิด แค่ต้องเข้าใจ concept และมีขั้นตอนที่ถูกต้อง

ขั้นตอนปฏิบัติจริง

1. สร้าง docker-compose.yml ที่เหมาะสมกับ Production

docker-compose.yml สำหรับ Development กับ Production มันไม่เหมือนกันนะเว้ย! ใน Production เราต้องกำหนด resource limits, restart policy, healthcheck, และ environment variables ที่เหมาะสม

ตัวอย่าง docker-compose.yml:


version: "3.9"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    restart: always
    deploy:
      resources:
        limits:
          cpus: "0.5"
          memory: 512M
    healthcheck:
      test: ["CMD-SHELL", "curl -f http://localhost || exit 1"]
      interval: 30s
      timeout: 10s
      retries: 3

จากตัวอย่างนี้ เรากำหนด resource limits ให้ container web ใช้ CPU ไม่เกิน 0.5 core และ memory ไม่เกิน 512MB นอกจากนี้เรายังกำหนด restart policy เป็น always เพื่อให้ container restart อัตโนมัติเมื่อมันตาย และมี healthcheck เพื่อตรวจสอบว่า application ยังทำงานได้ปกติ

2. ใช้ Environment Variables

อย่า hardcode ค่า config ใน docker-compose.yml เด็ดขาด! ให้ใช้ environment variables แทน เพื่อให้เราสามารถ config application ได้ง่ายขึ้นโดยไม่ต้องแก้ไขไฟล์ docker-compose.yml

ตัวอย่างการใช้ environment variables:


version: "3.9"
services:
  db:
    image: postgres:14
    environment:
      POSTGRES_USER: ${DB_USER}
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_DB: ${DB_NAME}
    volumes:
      - db_data:/var/lib/postgresql/data
volumes:
  db_data:

แล้วเราก็ export environment variables เหล่านี้ก่อนรัน docker-compose up:


export DB_USER=myuser
export DB_PASSWORD=mypassword
export DB_NAME=mydb
docker-compose up -d

3. Logging และ Monitoring

Logging และ Monitoring เป็นสิ่งสำคัญมากใน Production เราต้องมีระบบที่สามารถเก็บ log ของ application และ monitor resource usage เพื่อให้เราสามารถ troubleshoot ปัญหาได้ทันท่วงที

เราสามารถใช้ tools อย่าง ELK stack (Elasticsearch, Logstash, Kibana) หรือ Prometheus + Grafana เพื่อจัดการ logging และ monitoring ได้

เปรียบเทียบกับทางเลือกอื่น

แน่นอนว่า Docker Compose ไม่ใช่ทางเลือกเดียวในการ deploy application ใน Production ยังมีทางเลือกอื่นๆ อีกมากมาย เช่น Kubernetes, Docker Swarm, และ PaaS (Platform-as-a-Service) แต่ละทางเลือกก็มีข้อดีข้อเสียแตกต่างกันไป

ทางเลือก ข้อดี ข้อเสีย เหมาะกับใคร
Docker Compose
  • ใช้งานง่าย
  • เหมาะกับ application ขนาดเล็กถึงกลาง
  • ไม่ต้อง setup infrastructure เยอะ
  • Scaling ค่อนข้างจำกัด
  • High availability ต้อง setup เอง
ทีมขนาดเล็ก หรือ application ที่ไม่ได้ต้องการ scaling สูงมาก
Kubernetes
  • Scaling ได้ดีมาก
  • มี features เยอะ เช่น auto-scaling, self-healing
  • รองรับ application ขนาดใหญ่
  • Setup ค่อนข้างซับซ้อน
  • ต้องมีความรู้เรื่อง infrastructure เยอะ
ทีมขนาดใหญ่ หรือ application ที่ต้องการ scaling สูงมาก
Docker Swarm
  • ใช้งานง่ายกว่า Kubernetes
  • Scaling ได้ระดับหนึ่ง
  • เหมาะกับ application ขนาดกลาง
  • Features น้อยกว่า Kubernetes
  • Community เล็กกว่า
ทีมขนาดกลาง หรือ application ที่ต้องการ scaling แต่ไม่อยาก setup Kubernetes
PaaS (เช่น Heroku, AWS Elastic Beanstalk)
  • ใช้งานง่ายมาก
  • ไม่ต้องดูแล infrastructure เลย
  • ราคาค่อนข้างสูง
  • Customization ค่อนข้างจำกัด
ทีมที่ต้องการความสะดวกสบาย และไม่อยากดูแล infrastructure เอง

สรุปคือ เลือกทางเลือกที่เหมาะสมกับขนาดและความต้องการของ application ของเรา ถ้า application เล็กๆ Docker Compose ก็เพียงพอแล้ว แต่ถ้า application ใหญ่ๆ และต้องการ scaling สูงๆ Kubernetes อาจเป็นทางเลือกที่ดีกว่า

หวังว่าบทความนี้จะเป็นประโยชน์กับน้องๆ นะครับ ถ้ามีคำถามอะไรเพิ่มเติม ถามมาได้เลยที่ SiamCafe Blog ยินดีให้คำปรึกษาเสมอ

อย่าลืมว่า Docker Compose Production ไม่ใช่แค่การรัน docker-compose up -d นะเว้ย! มันคือการที่เราใช้ Docker Compose มาจัดการ application ของเราบน Production environment อย่างเป็นระบบ

สมัยผมทำ SiamCafe ผมก็เจอปัญหาเยอะแยะมากมายเกี่ยวกับการ deploy application แต่พอมาใช้ Docker Compose ชีวิตมันง่ายขึ้นเยอะเลย ลองเอาไปปรับใช้กันดูนะ

สุดท้ายนี้ ขอฝาก SiamCafe Blog ไว้ด้วยนะครับ มีบทความดีๆ เกี่ยวกับ IT อีกเยอะแยะเลย

🎬 วิดีโอแนะนำ

ดูวิดีโอเพิ่มเติมเกี่ยวกับDocker Compose Production:

Best Practices / เคล็ดลับจากประสบการณ์

เอาล่ะน้องๆ มาถึงตรงนี้ Docker Compose Production ไม่ใช่เรื่องยาก แต่จะทำให้มัน "ดี" นี่สิ ต้องมีเคล็ดลับกันหน่อย สมัยผมทำร้านเน็ต SiamCafe เนี่ย เรื่อง "ดี" นี่สำคัญสุด เพราะลูกค้าต้องแฮปปี้ถึงจะกลับมาอีก

จำไว้เลยว่า Production environment ไม่ใช่ playground เราต้องคิดถึง scalability, maintainability และ security เป็นหลัก

เทคนิคที่ 1: Volumes external vs internal

เรื่อง Volumes นี่สำคัญมาก สมัยก่อนผมเคยพลาด เอาข้อมูลสำคัญไปเก็บไว้ใน container พอ container พัง ข้อมูลหายหมด! ร้องไห้เลย

External volumes คือพระเอกของเรา เก็บข้อมูลไว้ข้างนอก container เลย เวลา container พัง ก็แค่สร้างใหม่ แล้ว mount volume เดิมกลับมา ข้อมูลอยู่ครบ!


version: "3.9"
services:
  db:
    image: postgres:14
    volumes:
      - db_data:/var/lib/postgresql/data

volumes:
  db_data:

ใน docker-compose.yml แบบนี้ db_data จะอยู่รอดปลอดภัย แม้ db จะตายจากไป

เทคนิคที่ 2: Environment Variables Management

อย่าเอา secrets ไปใส่ใน docker-compose.yml เด็ดขาด! อันตรายมาก เหมือนเอา password แปะไว้หน้าบ้าน

ใช้ environment variables แทน แล้ว load จากไฟล์ .env หรือใช้ Docker Secrets จะปลอดภัยกว่าเยอะ


version: "3.9"
services:
  web:
    image: nginx:latest
    environment:
      - DATABASE_URL=${DATABASE_URL}

แล้วสร้างไฟล์ .env (อย่า commit ขึ้น Git นะ!):


DATABASE_URL=postgresql://user:password@db:5432/mydb

หรือถ้าใช้ Docker Secrets (ซับซ้อนกว่า แต่ปลอดภัยกว่า):


docker secret create db_password my_secret_password

เทคนิคที่ 3: Health Checks

Health checks นี่เหมือนหมอประจำตัว container เลย คอยเช็คว่า container เรายังสบายดีอยู่รึเปล่า ถ้าไม่สบาย ก็สั่ง restart เองได้

กำหนด health check ใน docker-compose.yml:


version: "3.9"
services:
  web:
    image: nginx:latest
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost"]
      interval: 30s
      timeout: 10s
      retries: 3

แบบนี้ Docker จะ curl ไปที่ http://localhost ทุก 30 วินาที ถ้า curl fail เกิน 3 ครั้ง Docker จะ restart container ให้เอง

เทคนิคที่ 4: Logging

Logging คือบันทึกชีวิต container เรา เวลาเกิดปัญหา Logging นี่แหละที่จะช่วยเราสืบสวนหาสาเหตุได้

ตั้งค่า Logging driver ให้ดีๆ เลือกใช้พวก json-file, fluentd หรือ syslog แล้วส่ง log ไปรวมศูนย์ที่เดียว จะได้ดูง่ายๆ

FAQ คำถามที่พบบ่อย

ทำไมต้องใช้ Docker Compose ใน Production ด้วย?

Docker Compose มันง่าย สะดวก เหมาะกับ application ที่ไม่ซับซ้อนมาก แต่ถ้า application ใหญ่ๆ อาจจะต้องมองหาเครื่องมือที่ scale ได้ดีกว่า เช่น Kubernetes

Docker Compose scale ได้ไหม?

Docker Compose scale ได้ แต่ไม่ดีเท่า Kubernetes ถ้า scale เยอะๆ อาจจะเจอปัญหาเรื่อง networking, storage, และ management

Docker Compose ปลอดภัยแค่ไหน?

Docker Compose ปลอดภัยในระดับหนึ่ง แต่เราต้อง configure ให้ดีๆ อย่าใส่ secrets ใน docker-compose.yml, ใช้ health checks, และ monitor logs อย่างสม่ำเสมอ

ทำไม container ถึง restart เอง?

อาจจะเป็นเพราะ health check fail หรือ container crash เอง ลองดู logs เพื่อหาสาเหตุ

จะ update container ใน Production ยังไง?

ใช้ docker-compose pull เพื่อ download image ใหม่ แล้ว docker-compose up -d เพื่อ restart container

สรุป

Docker Compose Production ไม่ใช่เรื่องยาก แต่ต้องใส่ใจในรายละเอียด ตั้งแต่เรื่อง Volumes, Environment Variables, Health Checks, ไปจนถึง Logging ถ้าทำตามเคล็ดลับที่ผมบอกไป รับรองว่า application ของน้องๆ จะทำงานได้อย่างราบรื่นแน่นอน

อย่าลืมติดตาม SiamCafe Blog นะครับ มีบทความดีๆ เกี่ยวกับ IT อีกเยอะเลย

และถ้าสนใจเรื่อง Forex ลองแวะไปดูที่ iCafeForex ได้นะครับ