Tag Archive Container

Byphunsanit

Docker: ถ้าไม่ตั้ง container_name

จาก Docker: Service Name VS container_name เกิดสงสัยมาว่าถ้าเราไม่กำหนด container_name แล้ว docker จะสร้าง container name ยังไง ซึ่งโดยปกติแล้ว [ชื่อโปรเจกต์] หรือที่ใน Docker เรียกว่า Project Name จะถูกกำหนดโดยเรียงลำดับความสำคัญจากแหล่งที่มาดังนี้ครับ

  1. ชื่อโฟลเดอร์ ( Default )
    นี่คือวิธีที่พบบ่อยที่สุดครับ หากคุณไม่ได้ตั้งค่าอะไรเป็นพิเศษ Docker จะหยิบเอา “ชื่อโฟลเดอร์” ที่ไฟล์ docker-compose.yml นั้นตั้งอยู่มาใช้ โดยจะเปลี่ยนตัวอักษรเป็นพิมพ์เล็กทั้งหมด และลบอักขระพิเศษออก
    • ตัวอย่าง: ถ้าไฟล์อยู่ในโฟลเดอร์ /home/user/my_web_app ชื่อโปรเจกต์ก็จะเป็น mywebapp
  2. ตัวแปรสภาพแวดล้อม COMPOSE_PROJECT_NAME
    หากคุณต้องการชื่อที่เฉพาะเจาะจงโดยไม่ขึ้นกับชื่อโฟลเดอร์ คุณสามารถสร้างไฟล์ชื่อ .env ไว้ในโฟลเดอร์เดียวกับโปรเจกต์ แล้วกำหนดค่าลงไปได้เลย
    COMPOSE_PROJECT_NAME=my-awesome-db
    เมื่อรัน docker-compose up ชื่อ Container ของคุณ ( ถ้าไม่ได้ระบุ container_name ) ก็จะกลายเป็น my-awesome-db-mariadb-1
  3. การใช้ Flag -p หรือ --project-name
    คุณสามารถระบุชื่อโปรเจกต์ตอนสั่งรัน Command Line ได้โดยตรง ซึ่งจะมีลำดับความสำคัญสูงกว่าวิธีอื่น ๆ
    docker-compose -p production_db up -d
    วิธีนี้มีประโยชน์มากเวลาที่คุณต้องการรันโปรเจกต์เดียวกัน ( ไฟล์เดียวกัน ) แต่แยกเป็นหลาย Environment ( เช่น dev, test, staging ) บนเครื่องเครื่องเดียวครับ
  4. ระบุในไฟล์ docker-compose.yml ( เวอร์ชันใหม่ )
    ใน Docker Compose specification เวอร์ชันหลังๆ คุณสามารถระบุ name: ไว้ที่บรรทัดบนสุดของไฟล์ได้เลย
name: my-custom-app
services:
  mariadb:
    image: mariadb:latest
    ...

สรุปลำดับความสำคัญ ( Precedence )

  1. Flag -p ใน Command Line ( สูงที่สุด )
  2. ค่า name: ภายในไฟล์ docker-compose.yml
  3. ตัวแปร COMPOSE_PROJECT_NAME ในไฟล์ .env
  4. ชื่อโฟลเดอร์ที่โปรเจกต์วางอยู่ ( ต่ำที่สุด / ค่าเริ่มต้น )

อ่านเพิ่มเติม