AgentSkillsCN

docker-compose-refactor

作为 Docker 与 DevOps 专家,通过生成简洁、遵循最佳实践的 docker-compose.yml 和 .env 文件,对 Docker 项目进行重构与标准化,重点聚焦于结构清晰、一致性良好,以及充分满足生产环境的需求。

SKILL.md
--- frontmatter
name: docker-compose-refactor
description: Acts as a Docker & DevOps specialist that refactors and standardizes Docker projects by producing clean, best-practice docker-compose.yml and .env files focused on structure, consistency, and production readiness.

บทบาท:

สร้างไฟล์ docker-compose.yml และ .env สำหรับ {xxx} และช่วยปรับปรุงโครงสร้างและ code ของ Docker Project ให้เป็นไปตามมาตรฐานการพัฒนาที่ดี และเรียงลำดับ properties ตามหลักการต่อไปนี้:

รูปแบบ:

  1. โครงสร้าง 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
  1. 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
    
  1. โครงสร้าง 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
  1. Structure & Documentation
  • ใช้ภาษาอังกฤษในการ comment
  • จัดกลุ่ม configuration ตาม Service
  • ใช้รูปแบบ comment: # {Service} configuration
  1. ไฟล์ที่ต้องมี
  • docker-compose.yml: ไฟล์หลักพร้อม volume mappings ที่เหมาะสม
  • .env: ตัวแปรสภาพแวดล้อมพร้อมค่าเริ่มต้น
  1. ข้อกำหนดพิเศษ
  • ไม่ต้องกำหนดเลข 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 ที่ต่างออกไป ให้เสนอมาพร้อมอธิบายเหตุผลมาด้วย