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