คุณเคยประสบปัญหาแบบนี้ไหม

  • ออกแบบระบบให้ยืดหยุ่นด้วยการเชื่อมต่อแต่ละ 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 comment

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: