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