Docker คือ ตอนที่ 6 : Docker ระบบเครือข่าย (Networking)

  1. โมเดลเครือข่าย (Networking Model) Docker
  2. ไดรเวอร์เครือข่าย (Network Drivers) ของ Docker
  3. การทำแอปพลิเคชัน: Docker Network
  4. การแยก (Isolation) เครือข่าย Docker และการสื่อสาร (Communication)

Docker ซึ่งเป็นแพลตฟอร์มการบรรจุคอนเทนเนอร์ยอดนิยมได้เปลี่ยนวิธีการสร้าง บรรจุ และปรับใช้แอปพลิเคชันอย่างมาก แต่พื้นที่หนึ่งของ Docker ที่มักจะทำให้การทำแอพสำหรับนักพัฒนาประหลาดใจ โดยเฉพาะผู้ที่ยังใหม่กับแพลตฟอร์ม คือระบบเครือข่าย ระบบเครือข่ายเป็นส่วนสำคัญของระบบแบบกระจายทั้งหมด และการทำความเข้าใจว่าเป็นสิ่งสำคัญสำหรับการทำแอพและจัดการแอปพลิเคชันอย่างมีประสิทธิภาพ บทความนี้มีวัตถุประสงค์เพื่อไขปริศนาเกี่ยวกับเครือข่าย Docker และแนะนำคุณในการใช้ประโยชน์จากการทำแอพ

1. โมเดลเครือข่าย (Networking Model) Docker

รูปแบบเครือข่ายของ Docker นั้นค่อนข้างแข็งแกร่งและยืดหยุ่น สร้างขึ้นจากชุดอินเทอร์เฟซที่อนุญาตให้โต้ตอบกับไดรเวอร์เครือข่ายต่างๆ โดยมีฟังก์ชันการทำงานประเภทต่างๆ ตามที่แอปพลิเคชันของคุณต้องการ แก่นแท้ของโมเดลเครือข่าย Docker คือการแยกกระบวนการของแอปพลิเคชันออกเป็นเนมสเปซเครือข่ายที่แยกจากกัน และเชื่อมต่อในลักษณะที่อำนวยความสะดวกในการสื่อสารในขณะที่รักษาความแยกไว้

เมื่อคุณเริ่มคอนเทนเนอร์ Docker จะสร้างเนมสเปซเครือข่ายสำหรับคอนเทนเนอร์นั้น นี่เป็นสภาพแวดล้อมเครือข่ายที่สมบูรณ์โดยมีที่อยู่ IP, เครือข่ายย่อยและตารางเส้นทางของตัวเอง มันเหมือนกับการเรียกใช้เครื่องเสมือน ยกเว้นว่ามันเบากว่าและเร็วกว่ามากเนื่องจากคอนเทนเนอร์ Docker ใช้เคอร์เนลของโฮสต์ร่วมกัน

2. ไดรเวอร์เครือข่าย (Network Drivers) ของ Docker

Docker มาพร้อมกับไดรเวอร์เครือข่ายหลายตัวที่แกะกล่อง ไดรเวอร์เหล่านี้มีลักษณะการทำงานที่แตกต่างกันซึ่งเหมาะสำหรับสถานการณ์ต่างๆ:

  1. Bridge Network Driver : นี่คือไดรเวอร์เครือข่ายเริ่มต้นสำหรับ Docker เมื่อคุณเรียกใช้คอนเทนเนอร์โดยไม่ระบุเครือข่าย Docker จะสร้างบนเครือข่ายบริดจ์เริ่มต้น ไดรเวอร์เครือข่ายนี้เหมาะอย่างยิ่งสำหรับแอปพลิเคชันแบบสแตนด์อโลนหรือแอปพลิเคชันที่ต้องสื่อสารบนเครือข่ายเดียวกัน
  2. Host Network Driver : ไดรเวอร์นี้จะลบการแยกเครือข่ายระหว่างโฮสต์ Docker และคอนเทนเนอร์ Docker เพื่อใช้เครือข่ายของโฮสต์โดยตรง มีประโยชน์สำหรับแอปพลิเคชันที่ต้องการประสิทธิภาพมาก แต่ก็เสียสละการแยกเครือข่าย ซึ่งมักเป็นที่ต้องการในสภาพแวดล้อมของ Docker
  3. None Network Driver : ไดรเวอร์นี้ปิดใช้งานเครือข่ายทั้งหมดสำหรับคอนเทนเนอร์ มีประโยชน์สำหรับคอนเทนเนอร์ที่ไม่ต้องการสื่อสารผ่านเครือข่ายและต้องการแยกออกจากกันทั้งหมดเพื่อความปลอดภัย
  4. Overlay Network Driver : ไดรเวอร์นี้ใช้สำหรับบริการ Docker Swarm หรือเมื่อคุณต้องการให้คอนเทนเนอร์กระจายไปทั่วโฮสต์ Docker หลายตัวเพื่อสื่อสาร มันสร้างเครือข่ายส่วนตัวภายในที่ครอบคลุมโหนดทั้งหมดที่เข้าร่วมในคลัสเตอร์สวอร์ม
  5. 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


Docker คืออะไร

Docker คือ ตอนที่ 5 : Docker Compose
Docker คือ ตอนที่ 7 : Docker พื้นที่เก็บข้อมูล (Storage)