Skip to main content

Introduction to Docker Compose

Docker Compose คืออะไร?

Docker Compose เป็นเครื่องมือที่ใช้ในการจัดการหลายๆ container ในรูปแบบของแอปพลิเคชันเดียวโดยการกำหนดค่าผ่านไฟล์ docker-compose.yml. Docker Compose ช่วยให้คุณสามารถรันและจัดการหลายๆ container ที่มีความสัมพันธ์กัน เช่น ระบบที่ประกอบไปด้วย web server, database, และ service อื่นๆ ในขั้นตอนเดียว โดยไม่ต้องรันคำสั่ง docker run ทีละตัวแยกกัน

ทำไมต้องใช้ Docker Compose?

เมื่อแอปพลิเคชันของคุณประกอบไปด้วยหลายๆ service (เช่น database, web server, cache server), การตั้งค่าและการรัน container ต่างๆ ทีละตัวสามารถทำให้กระบวนการทำงานยุ่งยากและไม่สะดวก Docker Compose ทำให้การจัดการหลายๆ container เป็นเรื่องง่าย เพราะคุณสามารถกำหนดทุกอย่างในไฟล์ docker-compose.yml และใช้คำสั่งเดียวเพื่อจัดการทั้งหมด

วิธีการทำงานของ Docker Compose

Docker Compose ใช้ไฟล์ docker-compose.yml ที่ประกอบไปด้วยการกำหนดค่าเกี่ยวกับบริการต่างๆ เช่น ภาพ Docker (Docker images), พอร์ตที่เปิดใช้งาน, environment variables, volume ที่ใช้, และเครือข่าย (networks). โดยในไฟล์นี้คุณสามารถกำหนดทุกสิ่งที่จำเป็นเพื่อสร้างและรัน container ในลำดับขั้นตอนเดียว

ติดตั้ง Docker Compose

Docker Compose สามารถติดตั้งได้ง่ายๆ ผ่านคำสั่งในเครื่องที่ติดตั้ง Docker แล้ว:

  1. Windows / macOS: Docker Compose จะถูกติดตั้งมาพร้อมกับ Docker Desktop.

  2. Linux: สามารถติดตั้ง Docker Compose ด้วยคำสั่ง:

    sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    sudo chmod +x /usr/local/bin/docker-compose
  3. ตรวจสอบการติดตั้ง:

    docker-compose --version

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

ไฟล์ docker-compose.yml คือไฟล์ที่ใช้กำหนดบริการต่างๆ ใน Docker Compose ซึ่งในไฟล์นี้คุณจะระบุบริการที่ต้องการใช้งาน, พอร์ตที่ต้องการเชื่อมต่อ, เครือข่ายที่ใช้, และ volume ที่แชร์กันระหว่าง container ต่างๆ

ตัวอย่างของไฟล์ docker-compose.yml:

version: '3'
services:
web:
image: nginx
ports:
- "8080:80"
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
volumes:
- db-data:/var/lib/mysql
volumes:
db-data:

ในตัวอย่างนี้:

  • เรามี 2 บริการ: web และ db
  • บริการ web ใช้ Docker image ของ nginx และเปิดพอร์ต 80 ภายใน container มาเชื่อมต่อกับพอร์ต 8080 บน host
  • บริการ db ใช้ Docker image ของ mysql:5.7 และตั้งค่ารหัสผ่านสำหรับ root user ผ่าน environment variable
  • บริการ db ยังใช้ volume db-data เพื่อเก็บข้อมูลที่สามารถใช้งานได้ระหว่างการรัน container หลายๆ ครั้ง

การใช้งาน Docker Compose

หลังจากที่คุณได้สร้างไฟล์ docker-compose.yml แล้ว คุณสามารถใช้คำสั่งต่างๆ ของ Docker Compose เพื่อจัดการ container หลายๆ ตัวได้ง่ายๆ

การรัน Docker Compose

docker-compose up

คำสั่งนี้จะสร้างและรัน container ทุกตัวที่ระบุในไฟล์ docker-compose.yml โดยอัตโนมัติ

  • ถ้าคุณต้องการรันใน background สามารถใช้ -d (detached mode):
    docker-compose up -d

การหยุดการทำงานของ Docker Compose

docker-compose down

คำสั่งนี้จะหยุดและลบ container ที่กำลังรัน รวมถึง network และ volume ที่สร้างขึ้นในระหว่างการรัน

การดู log ของ container

docker-compose logs

คำสั่งนี้จะช่วยให้คุณสามารถดู log ของบริการทั้งหมดที่กำลังรัน

การหยุดบริการบางตัว

docker-compose stop <service_name>

คุณสามารถหยุดบริการบางตัวโดยระบุชื่อบริการที่ต้องการ

Docker Compose กับการทำงานในสภาพแวดล้อมการพัฒนา

Docker Compose มักจะถูกใช้ในสภาพแวดล้อมการพัฒนาเพื่อให้การตั้งค่าบริการต่างๆ ที่ซับซ้อนเป็นเรื่องง่าย ตัวอย่างเช่น คุณสามารถใช้ Docker Compose เพื่อสร้างสภาพแวดล้อมการพัฒนาแบบครบวงจรที่มีทั้ง web server, database, และ cache server ในคำสั่งเดียว

ตัวอย่างการใช้งาน Docker Compose ในการพัฒนาเว็บแอป

สมมติว่าเรากำลังพัฒนาเว็บแอปที่ต้องการใช้งานฐานข้อมูล MySQL และ Redis, ไฟล์ docker-compose.yml อาจมีลักษณะดังนี้:

version: '3'
services:
web:
build: .
ports:
- "5000:5000"
environment:
- FLASK_ENV=development
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: mysecretpassword
volumes:
- db-data:/var/lib/mysql
redis:
image: redis
volumes:
db-data:

ในตัวอย่างนี้:

  • บริการ web จะถูกสร้างจาก Dockerfile ในไดเรกทอรีปัจจุบันและจะเปิดพอร์ต 5000
  • บริการ db ใช้ MySQL image และตั้งค่า password สำหรับ root user
  • บริการ redis ใช้ Redis image

เมื่อคุณรัน docker-compose up, Docker Compose จะสร้างและรัน container ที่เกี่ยวข้องทั้งหมดโดยอัตโนมัติ

สรุป

Docker Compose เป็นเครื่องมือที่ช่วยให้การจัดการหลายๆ container ที่ทำงานร่วมกันในแอปพลิเคชันเดียวเป็นเรื่องง่ายและสะดวก โดยการกำหนดค่าบริการต่างๆ ผ่านไฟล์ docker-compose.yml. Docker Compose ช่วยให้คุณสามารถเริ่มต้นการพัฒนาและทดสอบแอปพลิเคชันที่มีหลายๆ บริการได้อย่างรวดเร็ว ด้วยคำสั่งไม่กี่คำสั่งเดียว