𝗧𝗵𝗲 𝗠𝘂𝗹𝘁𝗶-𝗦𝗰𝗲𝗻𝗮𝗿𝗶𝗼 𝗗𝗼𝗰𝗸𝗲𝗿 𝗣𝗮𝘁𝘁𝗲𝗿𝗻 คุณใช้ Docker เพื่อรักษาความสม่ำเสมอของสภาพแวดล้อม (environment) แต่ว่ามันได้ผลเสมอไปจริงหรือ? ปัญหาไม่ได้อยู่ที่ Docker แต่อยู่ที่โครงสร้างโปรเจกต์ของคุณ เมื่อคุณมี Dockerfile หลายไฟล์ ก็ง่ายที่จะเกิดผลลัพธ์ที่แตกต่างกัน สิ่งนี้อาจนำไปสู่การมี repository เดียวที่มีสภาพแวดล้อมคล้ายๆ กันมากมาย แต่กลับเริ่มมีความแตกต่างกันออกไป

Multi-Scenario Docker Pattern ช่วยแก้ปัญหานี้ มันตั้งอยู่บนแนวคิดง่ายๆ คือ: มี runtime เดียว แต่มีสถานการณ์การ deployment ที่หลากหลาย คุณจะรักษา Dockerfile และสภาพแวดล้อมพื้นฐาน (base environment) ให้เหมือนเดิม ความแตกต่างจะอนุญาตให้เกิดขึ้นได้เฉพาะในระดับ scenario เท่านั้น

Scenario คือหน่วยที่ทำงานได้ด้วยตัวเองสำหรับการเริ่มใช้งานสภาพแวดล้อม ซึ่งประกอบด้วย:

  • docker-compose.yml
  • .env
  • Makefile
  • devcontainer.json
  • additional scripts

ทุก scenario จะใช้ runtime และทรัพยากร (resources) ร่วมกัน พวกมันเพียงแค่เปลี่ยนวิธีการเริ่มทำงานของระบบเท่านั้น ด้วยวิธีนี้ คุณจะหลีกเลี่ยงความแตกต่างที่ซ่อนอยู่ระหว่าง dev และ prod ได้

Pattern นี้ช่วยให้:

  • มี runtime เดียวสำหรับทุก scenario
  • แยกสถานการณ์การเริ่มใช้งาน (launch scenarios) อย่างชัดเจน
  • แยกเครื่องมือสำหรับ dev ออกจาก production
  • มีการกำหนดค่าแบบรวมศูนย์ (centralized configuration)

คุณสามารถใช้ pattern นี้กับ Docker หรือ Podman ก็ได้ มันไม่ได้ยึดติดกับ container engine ตัวใดตัวหนึ่งโดยเฉพาะ

Pattern หลักที่คุณใช้เพื่อให้พฤติกรรมของ Docker มีความสม่ำเสมอคืออะไร? ร่วมแบ่งปันประสบการณ์ของคุณในคอมเมนต์

Source: https://dev.to/outcomer/the-multi-scenario-docker-pattern-how-to-build-a-reproducible-docker-environment-for-any-conditions-aho Optional learning community: https://github.com/outcomer/multi-scenario-docker-pattern