บทบาท:
สร้างไฟล์ docker-compose.yml และ .env สำหรับ {xxx} และช่วยปรับปรุงโครงสร้างและ code ของ Docker Project ให้เป็นไปตามมาตรฐานการพัฒนาที่ดี และเรียงลำดับ properties ตามหลักการต่อไปนี้:
รูปแบบ:
- •โครงสร้าง Docker Compose
ปรับแต่ง
docker-compose.ymlให้เรียงลำดับ properties ตามมาตรฐาน:
code
- name: ${GLOBAL_NAME}
- services:
- container_name
- image หรือ build
- restart
- environment
- ports
- volumes
- networks
- depends_on
- command (ถ้าจำเป็น)
- healthcheck
- networks
- volumes
- •Naming Convention
- •กำหนด service name ใน
docker-copose.ymlตาม {tech} ที่ใช้ เช่น nginx, mongodb, postgres - •หากชื่อ service มี spacebar ให้ใช้ underscore ในการเชื่อม เช่น Uptime Kuma เป็น uptime_kuma
- •กำหนด container_name เป็น {service}_app สำหรับ Web Service และ {service}db สำหรับ Database นอกนั้นกำหนดเป็น {service}{tech}
- •สำหรับ networks และ volumes กำหนด driver ให้เหมาะสม และให้ใช้รูปแบบนี้
code
networks: default: name: ${SERVICE_CONTAINER_NAME}_network driver: bridge volumes: default: name: ${SERVICE_CONTAINER_NAME}_data driver: local
- •โครงสร้าง Environment Variables
ปรับแต่ง
.envให้เรียงลำดับ group ของ service configuration ตามมาตรฐาน:
- •Global Configuration:
- •GLOBAL_NAME={xxx}
- •RESTART_POLICY=unless-stopped
- •TIMEZONE=Asia/Bangkok
- •HEALTHCHECK_INTERVAL
- •HEALTHCHECK_TIMEOUT
- •HEALTHCHECK_RETRIES
- •Postgres Configuration / Oracle Configuration
- •POSTGRES_CONTAINER_NAME
- •POSTGRES_IMAGE_NAME
- •POSTGRES_IMAGE_VERSION
- •POSTGRES_PORT
- •POSTGRES_ROOT_PASSWORD
- •POSTGRES_USER
- •POSTGRES_PASSWORD
- •POSTGRES_DATABASE
- •{Service} Configuration
- •{Service} _CONTAINER_NAME
- •{Service}_IMAGE_NAME
- •{Service}_IMAGE_VERSION
- •{Service}_HTTP_PORT
- •{Service}_HTTPS_PORT
- •{Service Others} Configuration
- •Structure & Documentation
- •ใช้ภาษาอังกฤษในการ comment
- •จัดกลุ่ม configuration ตาม Service
- •ใช้รูปแบบ comment: # {Service} configuration
- •ไฟล์ที่ต้องมี
- •
docker-compose.yml: ไฟล์หลักพร้อม volume mappings ที่เหมาะสม - •
.env: ตัวแปรสภาพแวดล้อมพร้อมค่าเริ่มต้น
- •ข้อกำหนดพิเศษ
- •ไม่ต้องกำหนดเลข version docker ในไฟล์
docker-compose.yml - •ไม่ต้อง comment ในไฟล์
docker-compose.yml - •ไม่ต้องกำหนด network name และ volume name ใน
.env - •ถ้ามีค่า environment variable ที่ยังไม่ตรงตาม group ของ service ช่วยแก้ให้หน่อย
- •ไม่ต้องกำหนดค่าเริ่มต้น (default) ใน
docker-compose.ymlบังคับให้ใช้ค่าใน.env - •image name ให้ระบุแบบ FQIN ป้องกันความสับสนกรณีที่มีหลาย registries
- •version image ถ้ามี stable release ให้ใช้ release ก่อน ถ้าไม่มีให้ไปใช้ latest หรือระบุเวอร์ชั่นที่ชัดเจน
- •ให้หา Global Image ที่เป็นมาตรฐานจากใน Docker Hub ก่อน
- •ถ้าสามารถใช้ database เป็น Postgres ได้ให้ใช้ Postgres
- •APP_URL ให้ใช้ค่า http://localhost หรือ https://localhost เป็นหลัก
- •ทั้ง 4 ค่านี้ให้ใช้ค่าเดียวกันกับ GLOBAL_NAME
code
- POSTGRES_ROOT_PASSWORD - POSTGRES_USER - POSTGRES_PASSWORD - POSTGRES_DATABASE
- •networks และ volumes ไม่ต้องใช้ค่าเดียวกับ GLOBAL_NAME
กรุณาปรับปรุง code ที่มีอยู่หรือสร้างตัวอย่างโครงสร้างใหม่ที่เป็นไปตามมาตรฐานข้างต้น ให้ครบทุกข้อ ไม่ต้องอธิบายเหตุผล หรือสรุปอะไรก็ตาม แต่ถ้ามีข้อเสนอแนะในการปรับปรุง code ที่ต่างออกไป ให้เสนอมาพร้อมอธิบายเหตุผลมาด้วย