ข้ามไปยังเนื้อหา

ภาพรวม Docker Networking

ทุก container จะได้รับ virtual network interface (NIC) เมื่อเริ่มต้นทำงาน Docker จะเชื่อมต่อ NIC นั้นเข้ากับ network — ชั้น software-defined ที่ควบคุมว่า container ใดสามารถสื่อสารกันได้และสื่อสารกับโลกภายนอกได้อย่างไร

หากไม่มี Docker networking container จะเป็นเกาะที่แยกตัวโดยสมบูรณ์ เมื่อมี networking คุณสามารถเชื่อมต่อ microservice เข้าด้วยกัน เปิด port ให้ host เข้าถึง และแบ่งแยก traffic ตาม environment ได้ โดยไม่ต้องแตะ network configuration จริงของ host เลย

Docker มี network driver ในตัว 4 ประเภท แต่ละประเภทมีการแลกเปลี่ยนระหว่าง isolation, ประสิทธิภาพ และความง่ายในการใช้งานต่างกัน

Driverขอบเขตคำอธิบาย
bridgeSingle hostDriver เริ่มต้น สร้าง virtual switch (docker0) บน host Container บน bridge เดียวกันสื่อสารกันได้ container บน bridge ต่างกันสื่อสารไม่ได้
hostSingle hostลบ network isolation — container ใช้ network stack ของ host โดยตรง ประสิทธิภาพสูงสุด ไม่ต้อง map port แต่ไม่มี isolation
noneSingle hostปิดใช้งาน networking ทั้งหมด container ได้รับเฉพาะ loopback interface เหมาะสำหรับ batch job ที่ไม่ต้องการ network
overlayMulti-hostขยายข้าม Docker daemon หลายตัว (Docker Swarm) ใช้สำหรับ distributed service ที่ต้องสื่อสารข้าม physical machine

Docker สร้าง network สาม network โดยอัตโนมัติเมื่อ daemon เริ่มต้น คุณสามารถดูได้ด้วย docker network ls:

Terminal window
docker network ls

ผลลัพธ์ที่คาดหวัง:

NETWORK ID NAME DRIVER SCOPE
abc123def456 bridge bridge local
def456abc789 host host local
ghi789jkl012 none null local

network bridge (รองรับโดย virtual switch docker0) คือที่ที่ทุก container จะถูกวางเมื่อคุณละเว้น --network ส่วน network host และ none เป็นแบบพิเศษ

docker network inspect แสดงการกำหนดค่าโดยละเอียด — subnet, gateway และ container ที่เชื่อมต่ออยู่ในขณะนั้น:

Terminal window
docker network inspect bridge
บทเรียนหัวข้อ
network Bridge เริ่มต้นวิธีการทำงานของ docker0, IP ของ container และข้อจำกัดด้าน DNS
DNS ของ Container และ User-Defined Networksวิธีที่ user-defined bridge ให้ name resolution อัตโนมัติ
การ Publish และ Expose port-p vs EXPOSE, syntax การผูก port, ephemeral ports
Custom Networks และการแยก Containerการสร้าง เชื่อมต่อ ตรวจสอบ และลบ network
# List all networks
docker network ls

# Inspect the default bridge in detail
docker network inspect bridge
Docker network driver ใดถูกใช้โดยค่าเริ่มต้นเมื่อรัน container โดยไม่ระบุ --network?
network driver ชนิด 'host' ทำอะไร?
คำสั่งใดใช้แสดงรายการ Docker network ทั้งหมดบน host ปัจจุบัน?
ควรใช้ network driver ใดเมื่อต้องการให้ container สื่อสารข้าม physical machine หลายเครื่องใน Docker Swarm?