คุณเคยประสบปัญหาแบบนี้ไหม
- ออกแบบระบบให้ยืดหยุ่นด้วยการเชื่อมต่อแต่ละ Service ผ่าน domain แต่พอจะทำ development environment มันช่างหน้าปวดหัว
- อยากจะเปลี่ยน domain ที่ใช้เรียกหากันใน docker service เหลือเกินนนน
- ทำไมต้องมานั่งทำ Reverse Proxy เพื่อให้ได้ Environment ที่เหมือน Production
วันนี้เรามีสิ่งดีๆมานำเสนอ
ที่มาคือมาจากตอนที่ผมกำลังทำ dev-environment บน local เป็น WordPress Platform ของ Pronto เอง เพื่อให้เราสามารถเทสพวก WordPress ที่เหมือนโปรดักชันในเครื่องเราเอง ทีนี้เพื่อความยืดหยุ่น เราได้ทำการเปลี่ยนการเชื่อมต่อ Service ต่างๆ แทนที่จะเป็นการ Point หา IP Address มาเป็นการ Point ไปที่ DNS เพื่อความยืดหยุ่นในหารเปลี่ยนแปลง ทีนี้พอมาทำเป็น Local Dev Environment เนี่ย ผมก็เลยอยากให้มันสามารถทำอย่างงั้นได้เลย โดยที่เราจะเหนื่อยน้อยที่สุด (ขี้เกียจเยอะ เดียว maintain ยาก) ผมเห็นว่า docker-compose มันสามารถทำได้อยู่แล้ว แต่ Link ด้วยชื่อ Service เองเลย สำหรับผม มันยังไม่น่าพอใจแฮะ คิดว่ามันน่าจะทำ Custom Domain ได้ง่ายๆ ก็ใช้เวลาค้นหาอยู่นานพอสมควร มั่วไปก็เยอะ จนสุดท้าย ได้ Document ของ docker-compose เองนี่แหละที่ช่วยให้คำตอบ ผมเสียดายเวลาที่ต้องลงไป research เหมือนกัน เลยตั้งใจแชร์เรื่องเล็กๆ น้อยๆ เพื่อให้คนอื่นจะได้ไม่ต้องมาเสียเวลาแบบผมอีก
ใน docker-compose.yml
เรารู้กันอยู่เนอะ ว่าถ้า container เรามันอยู่ในบล็อก services:
มันจะสามารถติดต่อหากันได้ผ่าน ชื่อของ service นั้นๆเลยใช่ปะ ตัวอย่างเช่น
version: '2' services: app: image: wordpress:latest ports: - 80:80 db: image: mysql:5.7 memcached: image: memcached:alpine
อันนี้คือสมมติ เราอยู่ใน container app เราสามารถต่อหา db ได้โดยการเรียก db ได้เลย telnet หาได้
ทีนี้ถ้าเราต้องการเรียกหา db ด้วยโดเมน mysql.test-environment.com
ละจะทำยังไง
เราสามารถทำได้โดยใส่ links เข้าไปให้มัน เราสามารถ override domain ที่เราเรียกหา service อื่นในคอนเทนเนอร์ได้
version: '2' services: app: image: wordpress:latest ports: - 80:80 links: - db:mysql.test-environment.com #นี่เลยแก้เป็น domain ที่ต้องการ เทพๆๆๆ - memcached:memcache.test-environment.com db: image: mysql:5.7 memcached: image: memcached:alpine
ทีนี้ใน container app ก็สามารถต่อหา db ได้ด้วย โดเมน mysqldb.test-environment.com
ละ สุดยอดไปเล้ยยยยย
หวังว่าบทความนี้จะมีประโยชน์กับทุกคนไม่มากก็น้อยครับ
อิอิ
Leave a Reply