- โมเดลเครือข่าย (Networking Model) Docker
- ไดรเวอร์เครือข่าย (Network Drivers) ของ Docker
- การทำแอปพลิเคชัน: Docker Network
- การแยก (Isolation) เครือข่าย Docker และการสื่อสาร (Communication)
Docker ซึ่งเป็นแพลตฟอร์มการบรรจุคอนเทนเนอร์ยอดนิยมได้เปลี่ยนวิธีการสร้าง บรรจุ และปรับใช้แอปพลิเคชันอย่างมาก แต่พื้นที่หนึ่งของ Docker ที่มักจะทำให้การทำแอพสำหรับนักพัฒนาประหลาดใจ โดยเฉพาะผู้ที่ยังใหม่กับแพลตฟอร์ม คือระบบเครือข่าย ระบบเครือข่ายเป็นส่วนสำคัญของระบบแบบกระจายทั้งหมด และการทำความเข้าใจว่าเป็นสิ่งสำคัญสำหรับการทำแอพและจัดการแอปพลิเคชันอย่างมีประสิทธิภาพ บทความนี้มีวัตถุประสงค์เพื่อไขปริศนาเกี่ยวกับเครือข่าย Docker และแนะนำคุณในการใช้ประโยชน์จากการทำแอพ
1. โมเดลเครือข่าย (Networking Model) Docker
รูปแบบเครือข่ายของ Docker นั้นค่อนข้างแข็งแกร่งและยืดหยุ่น สร้างขึ้นจากชุดอินเทอร์เฟซที่อนุญาตให้โต้ตอบกับไดรเวอร์เครือข่ายต่างๆ โดยมีฟังก์ชันการทำงานประเภทต่างๆ ตามที่แอปพลิเคชันของคุณต้องการ แก่นแท้ของโมเดลเครือข่าย Docker คือการแยกกระบวนการของแอปพลิเคชันออกเป็นเนมสเปซเครือข่ายที่แยกจากกัน และเชื่อมต่อในลักษณะที่อำนวยความสะดวกในการสื่อสารในขณะที่รักษาความแยกไว้
เมื่อคุณเริ่มคอนเทนเนอร์ Docker จะสร้างเนมสเปซเครือข่ายสำหรับคอนเทนเนอร์นั้น นี่เป็นสภาพแวดล้อมเครือข่ายที่สมบูรณ์โดยมีที่อยู่ IP, เครือข่ายย่อยและตารางเส้นทางของตัวเอง มันเหมือนกับการเรียกใช้เครื่องเสมือน ยกเว้นว่ามันเบากว่าและเร็วกว่ามากเนื่องจากคอนเทนเนอร์ Docker ใช้เคอร์เนลของโฮสต์ร่วมกัน
2. ไดรเวอร์เครือข่าย (Network Drivers) ของ Docker
Docker มาพร้อมกับไดรเวอร์เครือข่ายหลายตัวที่แกะกล่อง ไดรเวอร์เหล่านี้มีลักษณะการทำงานที่แตกต่างกันซึ่งเหมาะสำหรับสถานการณ์ต่างๆ:
- Bridge Network Driver : นี่คือไดรเวอร์เครือข่ายเริ่มต้นสำหรับ Docker เมื่อคุณเรียกใช้คอนเทนเนอร์โดยไม่ระบุเครือข่าย Docker จะสร้างบนเครือข่ายบริดจ์เริ่มต้น ไดรเวอร์เครือข่ายนี้เหมาะอย่างยิ่งสำหรับแอปพลิเคชันแบบสแตนด์อโลนหรือแอปพลิเคชันที่ต้องสื่อสารบนเครือข่ายเดียวกัน
- Host Network Driver : ไดรเวอร์นี้จะลบการแยกเครือข่ายระหว่างโฮสต์ Docker และคอนเทนเนอร์ Docker เพื่อใช้เครือข่ายของโฮสต์โดยตรง มีประโยชน์สำหรับแอปพลิเคชันที่ต้องการประสิทธิภาพมาก แต่ก็เสียสละการแยกเครือข่าย ซึ่งมักเป็นที่ต้องการในสภาพแวดล้อมของ Docker
- None Network Driver : ไดรเวอร์นี้ปิดใช้งานเครือข่ายทั้งหมดสำหรับคอนเทนเนอร์ มีประโยชน์สำหรับคอนเทนเนอร์ที่ไม่ต้องการสื่อสารผ่านเครือข่ายและต้องการแยกออกจากกันทั้งหมดเพื่อความปลอดภัย
- Overlay Network Driver : ไดรเวอร์นี้ใช้สำหรับบริการ Docker Swarm หรือเมื่อคุณต้องการให้คอนเทนเนอร์กระจายไปทั่วโฮสต์ Docker หลายตัวเพื่อสื่อสาร มันสร้างเครือข่ายส่วนตัวภายในที่ครอบคลุมโหนดทั้งหมดที่เข้าร่วมในคลัสเตอร์สวอร์ม
- Macvlan Network Driver : ไดรเวอร์นี้กำหนดที่อยู่ MAC ให้กับคอนเทนเนอร์ ทำให้ดูเหมือนอุปกรณ์ทางกายภาพบนเครือข่าย ทราฟฟิกเครือข่ายถูกกำหนดเส้นทางระหว่างคอนเทนเนอร์ผ่านที่อยู่ MAC เช่นเดียวกับในเครือข่ายจริง
การทำความเข้าใจพฤติกรรมของไดรเวอร์เหล่านี้มีความสำคัญต่อการทำแอพที่ทำงานตามที่คาดหวัง ปลอดภัย และทำงานได้ดี การเลือกไดรเวอร์เครือข่ายควรสอดคล้องกับข้อกำหนดของแอปพลิเคชันของคุณ
3. การทำแอปพลิเคชัน: Docker Network
ลองพิจารณาสถานการณ์ที่เรากำลังทำแอพที่ประกอบด้วยเว็บเซิร์ฟเวอร์และเซิร์ฟเวอร์ฐานข้อมูล ส่วนประกอบทั้งสองนี้จะทำงานในคอนเทนเนอร์ Docker แยกกันและจำเป็นต้องสื่อสารระหว่างกัน
เราจะสร้างเครือข่ายบริดจ์แบบกำหนดเองสำหรับแอปพลิเคชันของเรา เครือข่ายบริดจ์แบบกำหนดเองให้การแก้ไข DNS อัตโนมัติระหว่างคอนเทนเนอร์ ซึ่งหมายความว่าเว็บเซิร์ฟเวอร์ของเราสามารถเข้าถึงเซิร์ฟเวอร์ฐานข้อมูลได้โดยใช้ชื่อคอนเทนเนอร์
อันดับแรก เราสร้างเครือข่ายบริดจ์แบบกำหนดเองชื่อ ‘app-network’:
docker network create --driver bridge app-network
ต่อไป เราเรียกใช้คอนเทนเนอร์ฐานข้อมูลของเราใน ‘app-network’:
docker run --network=app-network --name=db-server -d my-db-image
ตอนนี้ เราสามารถเรียกใช้เว็บเซิร์ฟเวอร์ของเราในเครือข่ายเดียวกัน:
docker run --network=app-network --name=web-server -d my-web-image
แอปพลิเคชันของเราเปิดใช้งานแล้ว โดยมีสองคอนเทนเนอร์สื่อสารผ่านเครือข่ายบริดจ์แบบกำหนดเอง จากภายในคอนเทนเนอร์เว็บเซิร์ฟเวอร์ คุณสามารถเข้าถึง db-server โดยใช้ชื่อของมัน เหมือนกับว่ามันเป็นชื่อโฮสต์
การตั้งค่านี้แสดงกรณีการใช้งานพื้นฐาน แต่พลังและความยืดหยุ่นของเครือข่าย Docker ไปไกลกว่านั้น คุณสามารถมีเครือข่ายที่มีคอนเทนเนอร์มากขึ้น คุณสามารถมีคอนเทนเนอร์ที่เป็นส่วนหนึ่งของหลายเครือข่าย และคุณยังสามารถสร้างปลั๊กอินแบบกำหนดเองเพื่อกำหนดไดรเวอร์เครือข่ายของคุณได้!
4. การแยก (Isolation) เครือข่าย Docker และการสื่อสาร (Communication)
ลักษณะสำคัญของเครือข่าย Docker คือการแยก เมื่อคุณสร้างเครือข่าย เครือข่ายนั้นจะแยกออกจากเครือข่ายอื่นๆ ทั้งหมด คอนเทนเนอร์บนเครือข่ายหนึ่งไม่สามารถสื่อสารกับคอนเทนเนอร์ในเครือข่ายอื่นได้ เว้นแต่จะเชื่อมต่อกับทั้งสองเครือข่ายโดยเฉพาะ การแยกนี้เป็นเครื่องมือที่มีประสิทธิภาพในการจัดการการสื่อสารระหว่างคอนเทนเนอร์ และสามารถเป็นรากฐานที่สำคัญของกลยุทธ์ความปลอดภัยของแอปพลิเคชันของคุณ
ในขณะเดียวกัน Docker มีตัวเลือกที่มีประสิทธิภาพสำหรับการเปิดใช้งานการสื่อสารระหว่างคอนเทนเนอร์เมื่อจำเป็น ตามที่แสดงก่อนหน้านี้ คอนเทนเนอร์บนเครือข่ายเดียวกันสามารถสื่อสารโดยใช้ชื่อคอนเทนเนอร์เป็นชื่อโฮสต์
หากคอนเทนเนอร์จำเป็นต้องเป็นส่วนหนึ่งของหลายเครือข่าย ก็สามารถเชื่อมต่อกับแต่ละเครือข่ายแยกกันได้ ตัวอย่างเช่น หากคุณมีคอนเทนเนอร์แคชที่ควรเข้าถึงได้จากแอปพลิเคชันอื่นๆ หลายแอปพลิเคชัน โดยแต่ละแอปมีเครือข่ายของตัวเอง คุณสามารถเชื่อมต่อคอนเทนเนอร์แคชกับแต่ละเครือข่ายได้
ในโลกของ Docker ระบบเครือข่ายมีบทบาทสำคัญ เป็นเครื่องมือสำคัญสำหรับการทำแอพที่เป็นโมดูลาร์ ปลอดภัย และจัดการง่าย ยิ่งคุณเข้าใจเกี่ยวกับเครือข่าย Docker มากเท่าไหร่ คุณก็จะยิ่งมีความพร้อมมากขึ้นในการใช้ประโยชน์จากพลังของมันในการทำแอพของคุณ โปรดจำไว้ว่าการเลือกไดรเวอร์เครือข่ายที่เหมาะสม การทำความเข้าใจหลักการแยกและการสื่อสาร และการรู้วิธีจัดการการเชื่อมต่อคอนเทนเนอร์ล้วนเป็นส่วนสำคัญในการทำแอพที่ประสบความสำเร็จโดยใช้ Docker