𝗧𝗵𝗲 𝗠𝘂𝗹𝘁𝗶-𝗦𝗰𝗲𝗻𝗮𝗿𝗶𝗼 𝗗𝗼𝗰𝗸𝗲𝗿 𝗣𝗮𝘁𝘁𝗲𝗿𝗻 คุณใช้ 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