ใน Docker Compose มันมีขื่ออยู่ 2 ตัวที่ใช้แทบจะเหมือน ๆ กัน คือ services: db-mariadb และ container_name: db-mariadb-dev เพราะแยกไม่ออกว่ามันต่างกันยังไง อันไหนคือ Hostname
services: ( Service Name ) db-mariadb
นี่คือ “ชื่อที่ใช้ภายในระบบ Docker Compose” ครับ
- การใช้งาน: ใช้เพื่อให้ Service อื่นๆ ในไฟล์เดียวกันรู้จักกัน เช่น ถ้าคุณมี WordPress อีกตัวหนึ่ง คุณจะสั่งให้มันต่อมาที่ Hostname ชื่อ
db-mariadb( ไม่ใช่ localhost ) - Network: มันทำหน้าที่เป็น Internal DNS ภายใน Network ของ Docker
- ความสำคัญ: จำเป็นต้องมีเสมอ เพราะเป็นตัวกำหนดโครงสร้างของโปรเจกต์
container_name: ( Container Name ) db-mariadb-dev
นี่คือ “ชื่อของ Container ที่ปรากฏบนเครื่อง Host” ครับ
- การใช้งาน: เป็นชื่อที่คุณจะเห็นเวลาพิมพ์คำสั่ง
docker psใน Terminal หรือใช้สั่งงานตรงๆ เช่นdocker logs db-mariadb-dev - ข้อจำกัด: หากระบุชื่อนี้ไว้ คุณจะ ไม่สามารถ สั่ง
docker-compose up --scale mariadb=2ได้ เพราะชื่อ Container บนเครื่องห้ามซ้ำกัน - ความสำคัญ: ไม่จำเป็นต้องระบุก็ได้ ถ้าไม่ระบุ Docker จะตั้งชื่อให้เองโดยใช้รูปแบบ
[ชื่อโปรเจกต์]-[ชื่อ service]-1
ตารางเปรียบเทียบ
| คุณสมบัติ | Service Name ( db-mariadb ) | Container Name ( db-mariadb-dev ) |
| ขอบเขตการใช้ | ใช้คุยกันเองระหว่าง Container ( Internal ) | ใช้เรียกจากหน้าจอ Command Line ( External / Host ) |
| Hostname | ใช้ชื่อนี้เป็น Hostname ในการต่อ Database | ไม่สามารถใช้ชื่อนี้เป็น Hostname ได้ ( โดยปกติ ) |
| การระบุ | บังคับ ต้องมี | ไม่บังคับ ( Optional ) |
| การ Scale | รองรับการทำหลาย Replica | ไม่รองรับ ( เพราะชื่อจะซ้ำ ) |
สรุปสั้นๆ: services: db-mariadb คือชื่อที่เพื่อนบ้าน ( Container อื่น ) ใช้เรียกคุณ ส่วน container_name: db-mariadb-dev คือชื่อเล่นที่คุณแปะไว้หน้าบ้านให้เจ้าของบ้าน ( คุณ ) เรียกใช้ได้ง่าย ๆ ครับ
อ่านเพิ่มเติม
About the author