Docker: Project Name

Project Name (หรือ Stack Name) คือ namespace กลางที่ Docker Compose ใช้ในการจัดกลุ่ม Resource ทั้งหมด ไม่ว่าจะเป็น Container, Volume, Network หรือ Secret ให้อยู่ภายใต้โปรเจกต์เดียวกัน ป้องกันการชนกันของชื่อ Service เมื่อรันหลายสภาพแวดล้อมพร้อมกัน




ลำดับความสำคัญในการกำหนด Project Name

หากไม่มีการระบุชื่อโดยตรง Docker Compose จะอ่านค่าตามลำดับความสำคัญ (Precedence) ดังนี้

  1. Flag CLI: กำหนดผ่านคำสั่งโดยตรง docker compose -p my-custom-stack up -d
  2. Environment Variable: กำหนดในไฟล์ .env ด้วยตัวแปร COMPOSE_PROJECT_NAME=my-app-prod
  3. Top-level name: Attribute: ระบุไว้ในไฟล์ docker-compose.yml (รองรับใน Compose Specification เวอร์ชันใหม่)
  4. Folder Name (Default): ใช้ชื่อไดเรกทอรีปัจจุบันที่ไฟล์ Compose ตั้งอยู่



ความสำคัญของ Project Name เมื่อใช้งานร่วมกับ OrbStack

OrbStack ดึง Project Name มาต่อยอดการทำงานบน macOS ทำให้การพัฒนา Local Development สะดวกขึ้นอย่างมาก

  • Automatic Local Domain & Routing: OrbStack สร้างโดเมนสำหรับเข้าถึง Service ผ่านเบราว์เซอร์ให้อัตโนมัติ โดยใช้แพทเทิร์น http://<service>.<project>.orb.local เช่น Service ชื่อ web ในโปรเจกต์ ecommerce จะเข้าได้ผ่าน [http://web.ecommerce.orb.local](http://web.ecommerce.orb.local) ทันทีโดยไม่ต้องตั้งค่า Port Mapping
  • Clean UI & Grouping: จัดกลุ่มคอนเทนเนอร์ในหน้า Dashboard ของ OrbStack ตามชื่อ Stack อย่างเป็นระเบียบ สามารถสั่ง Start, Stop หรือ Restart ยกชุดได้ในคลิกเดียว
  • Service Discovery ข้ามโปรเจกต์: ช่วยให้การเชื่อมต่อไปยังคอนเทนเนอร์อื่นผ่าน DNS ภายในของ OrbStack มีความแม่นยำสูง



วิธีการกำหนด Project Name ที่แนะนำ

  1. ระบุผ่าน Top-level name ในไฟล์ Compose (แนะนำสำหรับ Team Standard)

    YAML

    YAML

    name: my-awesome-project
    services:
      web:
        image: nginx:alpine
        ports:
          - "80"
      db:
        image: postgres:16-alpine
        environment:
          POSTGRES_PASSWORD: secretpassword
    
  • ระบุผ่านไฟล์ .env (เหมาะสำหรับการแยก Environment เช่น dev/staging)

    YAML

    YAML

    # .env
    COMPOSE_PROJECT_NAME=ecommerce-dev
    



  • ข้อควรระวังและแนวทางปฏิบัติ

    • Volume Isolation: Docker จะตั้งชื่อ Volume ตามแพทเทิร์น <project-name>_<volume-name> หากเปลี่ยนชื่อ Project Name ภายหลัง Docker จะสร้าง Volume ใหม่ ทำให้ดูเหมือนข้อมูลเดิมหายไป
    • หลีกเลี่ยงการพึ่งพา Folder Name: หากสมาชิกในทีมโคลน Git Repository ไปไว้ในโฟลเดอร์ชื่อต่างกัน (เช่น repo, repo-main) จะทำให้ชื่อโดเมนบน OrbStack และชื่อ Container ไม่ตรงกัน การฟิกซ์ชื่อผ่านไฟล์ Compose หรือ .env จึงปลอดภัยที่สุด
    • ใช้ตัวพิมพ์เล็กและขีดกลาง (Kebab-case): ตั้งชื่อด้วยตัวพิมพ์เล็ก ตัวเลข และเครื่องหมาย - เท่านั้น (เช่น auth-service-dev) เพื่อป้องกันปัญหา DNS lookup บน OrbStack

    Exit mobile version