Dependencies และการแก้ปัญหาใน Docker Compose

Docker ระดับกลาง

Mike Metzger

Data Engineering Consultant

Dependencies คืออะไร?

  • Dependencies กำหนดลำดับการเริ่มต้นของ resource
  • Resource (container) อาจต้องอาศัย resource อื่น
  • ตัวอย่างเว็บแอปพลิเคชัน
    • Container ฐานข้อมูล postgresql ต้องเริ่มก่อน

ตัวอย่าง Container Dependency - postgres

Docker ระดับกลาง

Dependencies คืออะไร?

  • Dependencies กำหนดลำดับการเริ่มต้นของ resource
  • Resource (container) อาจต้องอาศัย resource อื่น
  • ตัวอย่างเว็บแอปพลิเคชัน
    • Container ฐานข้อมูล postgresql ต้องเริ่มก่อน
    • จากนั้นจึงเริ่ม python_app

ตัวอย่าง Container Dependency - python_app

Docker ระดับกลาง

Dependencies คืออะไร?

  • Dependencies กำหนดลำดับการเริ่มต้นของ resource
  • Resource (container) อาจต้องอาศัย resource อื่น
  • ตัวอย่างเว็บแอปพลิเคชัน
    • Container ฐานข้อมูล postgresql ต้องเริ่มก่อน
    • จากนั้นจึงเริ่ม python_app
    • สุดท้ายเริ่ม web server nginx

ตัวอย่าง Container Dependency - ครบทั้งหมด

Docker ระดับกลาง

depends_on

  • กำหนด dependencies ด้วย attribute depends_on
  • เชื่อมต่อ dependencies เป็นลูกโซ่ได้ตามตัวอย่าง
  • หรือกำหนด dependencies หลายรายการต่อ resource ได้หากจำเป็น
  • ลำดับใน compose.yaml ไม่มีผลต่อการทำงาน
services:
  postgresql:
    image: postgresql:latest

python_app: image: custom_app depends_on: - postgresql
nginx: image: nginx/latest depends_on: - python_app
Docker ระดับกลาง

การปิดแอปพลิเคชัน

  • การปิดแอปพลิเคชันจะเกิดขึ้นในลำดับย้อนกลับ
  • หยุด resource nginx ก่อน

ตัวอย่าง Container Dependency - ครบทั้งหมด

Docker ระดับกลาง

การปิดแอปพลิเคชัน

  • การปิดแอปพลิเคชันจะเกิดขึ้นในลำดับย้อนกลับ
  • หยุด resource nginx ก่อน
  • จากนั้นหยุด resource python_app

ตัวอย่าง Container Dependency - python_app

Docker ระดับกลาง

การปิดแอปพลิเคชัน

  • การปิดแอปพลิเคชันจะเกิดขึ้นในลำดับย้อนกลับ
  • หยุด resource nginx ก่อน
  • จากนั้นหยุด resource python_app
  • และสุดท้ายหยุด resource postgresql

ตัวอย่าง Container Dependency - postgres

Docker ระดับกลาง

ตัวเลือกอื่น ๆ

  • Docker Compose มีตัวเลือกเพิ่มเติมสำหรับ dependencies
  • condition: กำหนดเงื่อนไขที่ถือว่า resource พร้อมใช้งาน
    • service_started - resource เริ่มทำงานตามปกติ
      • พฤติกรรมเริ่มต้น
    • service_completed_successfully - resource ทำงานจนเสร็จสมบูรณ์ เช่น การตั้งค่าเริ่มต้น
    • service_healthy - resource ผ่านเกณฑ์ที่กำหนดโดย healthcheck
services:
  nginx:
    image: nginx/latest
    depends_on:
      python_app:
        condition: service_started

python_app: image: custom_app depends_on: postgresql: condition: service_healthy
Docker ระดับกลาง

เครื่องมือแก้ปัญหาใน Docker Compose

  • Docker Compose มีเครื่องมือแก้ปัญหาเพิ่มเติม
  • docker compose logs - รวบรวม output จาก resource ทั้งหมดในแอปพลิเคชัน
    redis-1  | * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
    redis-1  | * Running mode=standalone, port=6379.
    redis-1  | * Server initialized
    redis-1  | * Ready to accept connections tcp
    web-1    | * Serving Flask app 'app.py'
    web-1    |  * Running on all addresses (0.0.0.0)
    web-1    |  * Running on http://172.20.0.2:5000
    web-1    | Press CTRL+C to quit
    
  • docker compose logs <resourcename>
Docker ระดับกลาง

docker compose top

  • docker compose top แสดงสถานะของ resource ภายในแอปพลิเคชัน
composetest-redis-1
UID   PID    PPID   C    STIME   TTY   TIME       CMD
999   2767   2726   0    01:16   ?     00:03:27   redis-server *:6379

composetest-web-1
UID    PID    PPID   C    STIME   TTY   TIME       CMD
root   2768   2740   0    01:16   ?     00:00:23   /usr/local/bin/python /usr/local/bin/flask run
Docker ระดับกลาง

มาฝึกกันเถอะ!

Docker ระดับกลาง

Preparing Video For Download...