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 แล้ว:
-
Windows / macOS: Docker Compose จะถูกติดตั้งมาพร้อมกับ Docker Desktop.
-
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 -
ตรวจสอบการติดตั้ง:
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ยังใช้ volumedb-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 ช่วยให้คุณสามารถเริ่มต้นการพัฒนาและทดสอบแอปพลิเคชันที่มีหลายๆ บริการได้อย่างรวดเร็ว ด้วยคำสั่งไม่กี่คำสั่งเดียว