Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

กำหนดลำดับการ start ของ service ใน Docker compose ให้ถูกต้อง

$
0
0

ปัญหาหนึ่งที่ได้มักเจอเมื่อใช้งาน Docker compose คือ
ลำดับการ start ของ service ต่าง ๆ นั่นเอง
แน่นอนว่าใน docker compose ก็จะมี depends_on ให้ใช้งาน
แต่ปัญหาก็ยังมีอยู่คือ Service ต่าง ๆ ก็ start ตามลำดับ
แต่ว่ามีบาง service ที่ start แล้วแต่ยังไม่พร้อมใช้งาน
ซึ่งอาจจะทำให้เกิดปัญหากับ service อื่น ๆ ที่ต้องใช้งานตอน start เช่นกัน

ยกตัวอย่างเช่น
Service A เป็น database 
Service B ทำหน้าที่สร้าง table และ สร้างข้อมูล
แน่นอนว่า ถ้าใช้ depends_on ก็ได้แค่ลำดับ คือ
ให้สร้าง service A ก่อน B 
แต่ B จะทำงานผิด ถ้า A ยังไม่ start เสร็จสมบูรณ์


"คำถาม แก้ไขปัญหานี้อย่างไรดี ?"

คำตอบ 
เอกสารของ Docker ก็เตรียมไว้ให้แล้วคือ 
Control startup and shutdown order in Compose

แน่นอนว่ามีคนทำไว้ให้แล้วทั้ง

หรือเขียน shell script เองก็ได้

โดยนำคำสั่งเหล่านี้ไปใส่ที่ command ของแต่ละ service
ในไฟล์ docker compose ได้เลย

แต่อย่าลืมตรวจสอบด้วยว่า
Docker image ที่ใช้งานมีคำสั่งต่าง ๆ ที่ใช้ใน script ด้วยหรือไม่
มิฉะนั้นก็อาจจะพังได้

ตัวอย่างเขียน shell script เอง
ทำการตรวจสอบว่า mysql ทำการ start เสร็จแล้วหรือยัง
ถ้ายัง start ไม่เสร็จจะวนถามไปเรื่อย ๆ ทุก ๆ 1 วินาที 

[gist id="cd96e28fa5cb7a460b0b542621413915" file="docker-compose.yml"]

หรืออาจจะทำการเขียน code เองเลยก็ได้
ยกตัวอย่างเช่น

[gist id="cd96e28fa5cb7a460b0b542621413915" file="wait.py"]

เพียงเท่านี้ก็สามารถจัดลำดับการทำงานของ service ได้ถูกต้องตามที่ต้องการแล้ว

Code ตัวอย่างอยู่ที่ GitHub::Up1


Viewing all articles
Browse latest Browse all 1997

Trending Articles