Skip to main content

Docker Networking Basics

การทำความเข้าใจ Docker Networking

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

ประเภทของ Docker Networks

Docker รองรับหลายประเภทของ network ซึ่งแต่ละประเภทมีลักษณะการทำงานที่แตกต่างกันไป ดังนี้:

1. Bridge Network (Default Network)

  • Bridge network เป็น network ที่ Docker สร้างขึ้นโดยอัตโนมัติเมื่อ Docker ถูกติดตั้ง
  • ใช้สำหรับการเชื่อมต่อ container ในเครื่องเดียวกัน
  • ทุก container ที่เชื่อมต่อกับ bridge network จะได้รับ IP address ที่ถูกกำหนดไว้ภายในเครือข่ายนี้
  • Bridge network เป็น network default ที่จะถูกใช้เมื่อคุณไม่กำหนด network อื่นๆ ใน docker run หรือ docker-compose.yml

ตัวอย่างการใช้งาน Bridge Network:

docker network create --driver bridge my_bridge_network

ในตัวอย่างนี้:

  • สร้าง bridge network ชื่อ my_bridge_network

2. Host Network

  • Host network จะทำให้ container ใช้ IP address ของ host machine โดยตรง
  • การใช้ host network ทำให้ container ไม่สามารถแยกออกจาก host machine ได้
  • ใช้ในกรณีที่ต้องการให้ container ใช้ port ของ host โดยตรง

ตัวอย่างการใช้งาน Host Network:

docker run --network host nginx

ในตัวอย่างนี้:

  • Container จะใช้ host network โดยตรงและสามารถเข้าถึงพอร์ตของ host ได้

3. None Network

  • None network ทำให้ container ไม่สามารถเชื่อมต่อกับเครือข่ายใดๆ ได้เลย
  • การใช้ none network มีประโยชน์ในกรณีที่ต้องการให้ container ทำงานในลักษณะ isolated และไม่สามารถเข้าถึงเครือข่ายภายนอกได้

ตัวอย่างการใช้งาน None Network:

docker run --network none nginx

ในตัวอย่างนี้:

  • Container จะไม่ได้รับการเชื่อมต่อกับ network ใดๆ

4. Overlay Network

  • Overlay network ใช้สำหรับการเชื่อมต่อ container ที่รันอยู่ในหลายๆ Docker host
  • โดย Overlay network จะใช้ในกรณีที่คุณทำการรัน Docker Swarm หรือ Docker Cluster
  • Overlay network ทำให้ container ที่รันใน host ต่างๆ สามารถสื่อสารกันได้

ตัวอย่างการใช้งาน Overlay Network:

docker network create --driver overlay my_overlay_network

ในตัวอย่างนี้:

  • สร้าง overlay network ชื่อ my_overlay_network สำหรับการเชื่อมต่อ container ในหลายๆ host

5. Macvlan Network

  • Macvlan network ช่วยให้ container สามารถมี MAC address และ IP address ที่สามารถเห็นได้ใน network ของ physical network interface
  • เหมาะสำหรับกรณีที่ต้องการให้ container มี IP address ที่อยู่ใน subnet เดียวกับ network ที่เชื่อมต่ออยู่

ตัวอย่างการใช้งาน Macvlan Network:

docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 my_macvlan_network

ในตัวอย่างนี้:

  • สร้าง macvlan network ชื่อ my_macvlan_network ที่ใช้ subnet 192.168.1.0/24 และ gateway 192.168.1.1

การเชื่อมต่อ Container กับ Network

เมื่อคุณสร้าง network แล้ว, คุณสามารถเชื่อมต่อ container เข้ากับ network ได้โดยการใช้ตัวเลือก --network ในคำสั่ง docker run หรือภายในไฟล์ docker-compose.yml.

ตัวอย่างการเชื่อมต่อ Container กับ Network ผ่านคำสั่ง docker run:

docker run -d --name my_container --network my_bridge_network nginx

ในตัวอย่างนี้:

  • Container ชื่อ my_container จะเชื่อมต่อกับ my_bridge_network

ตัวอย่างการเชื่อมต่อ Container กับ Network ผ่าน docker-compose.yml:

version: '3'

services:
web:
image: nginx
networks:
- my_bridge_network

networks:
my_bridge_network:
driver: bridge

ในตัวอย่างนี้:

  • บริการ web ใช้ bridge network ที่ชื่อ my_bridge_network

การดูข้อมูลของ Network

คุณสามารถใช้คำสั่ง docker network ls เพื่อลิสต์รายการของ networks ทั้งหมดที่มีในระบบ Docker:

docker network ls

และใช้คำสั่ง docker network inspect เพื่อตรวจสอบรายละเอียดของ network ที่ต้องการ:

docker network inspect my_bridge_network

การเชื่อมต่อ Container ในหลายๆ Network

Docker อนุญาตให้ container เชื่อมต่อกับหลายๆ networks ได้ในเวลาเดียวกัน. คุณสามารถใช้คำสั่ง docker network connect เพื่อลงทะเบียน container ลงใน network อื่นๆ ที่ต้องการ.

ตัวอย่างการเชื่อมต่อ Container กับหลายๆ Networks:

docker network connect my_bridge_network my_container
docker network connect my_overlay_network my_container

ในตัวอย่างนี้:

  • my_container เชื่อมต่อกับ my_bridge_network และ my_overlay_network พร้อมกัน

การเชื่อมต่อ Container กับ Network แบบ Insulated

ในบางกรณี คุณอาจต้องการให้ container สื่อสารกันภายใน network เดียวกันโดยไม่สามารถเข้าถึงภายนอกได้ คุณสามารถใช้ Docker Compose ในการตั้งค่า network ที่มีการจำกัดการเชื่อมต่อกับภายนอก.

ตัวอย่างการตั้งค่า Insulated Network:

version: '3'

services:
app1:
image: app1
networks:
- isolated_network
app2:
image: app2
networks:
- isolated_network

networks:
isolated_network:
driver: bridge

ในตัวอย่างนี้:

  • app1 และ app2 เชื่อมต่อกับ isolated_network ซึ่งทำให้ทั้งสอง container สามารถสื่อสารกันได้ แต่ไม่สามารถเข้าถึงเครือข่ายอื่นๆ

สรุป

Docker networking เป็นเครื่องมือที่สำคัญในการจัดการการเชื่อมต่อระหว่าง containers และการเชื่อมต่อกับภายนอก. Docker รองรับหลายประเภทของ network เช่น bridge, host, overlay, macvlan, และ none ซึ่งสามารถเลือกใช้งานตามลักษณะของการใช้งานที่ต้องการ. Docker Compose ช่วยให้คุณสามารถกำหนดการตั้งค่า network ได้ง่ายขึ้นในหลายๆ บริการ และสามารถเชื่อมต่อ container หลายๆ ตัวเข้าด้วยกันผ่าน network ที่กำหนด.