Chuyển đến nội dung chính

Bài 9: Docker Networking Deep Dive

Tìm hiểu Docker networking drivers (bridge, host, overlay, macvlan, none), DNS resolution, container communication, port mapping, network isolation, custom networks, multi-host networking và troubleshooting network issues.

🔒 DevSecOps — Bài 9 Bài 9: Docker Networking Deep Dive

Docker từ Cơ bản đến Nâng cao

Phần 3: Networking, Storage và Compose Nâng cao

xdev.asia

1. Docker Networking - Tổng quan

Docker networking cho phép containers giao tiếp với nhau, với host machine và với mạng bên ngoài. Hiểu rõ networking là chìa khóa để triển khai ứng dụng multi-container an toàn và hiệu quả.

2. Network Drivers

2.1. Bridge Network (Default)

Bridge là driver mặc định khi tạo container. Containers trên cùng bridge network có thể giao tiếp với nhau.

# Tạo custom bridge network
docker network create my-network

Chạy containers trên cùng network

docker run -d --name web --network my-network nginx docker run -d --name api --network my-network node:20-alpine

Containers có thể ping nhau bằng tên

docker exec web ping api # ✅ Works

Liệt kê networks

docker network ls

Xem chi tiết network

docker network inspect my-network

Default bridge vs Custom bridge:

Feature Default bridge Custom bridge
DNS resolution Không (chỉ IP) Có (container name)
Isolation Tất cả containers chung Chỉ containers cùng network
Hot connect Không Có (connect/disconnect runtime)

2.2. Host Network

Container sử dụng trực tiếp network stack của host, không có network isolation:

# Container dùng host network
docker run -d --network host --name web nginx
# Nginx sẽ listen trực tiếp trên port 80 của host
# Không cần -p flag

Use case: Khi cần maximum network performance

Chỉ hoạt động trên Linux

2.3. None Network

# Container không có network access
docker run -d --network none --name isolated alpine
# Container hoàn toàn cô lập, không có network interface
# Use case: Security-sensitive workloads, batch processing

2.4. Overlay Network

Cho phép containers trên nhiều Docker hosts khác nhau giao tiếp (Docker Swarm):

# Tạo overlay network (requires Swarm mode)
docker network create -d overlay my-overlay

Overlay network spans across multiple hosts

Sử dụng VXLAN tunneling

2.5. Macvlan Network

# Container có MAC address và IP riêng trên physical network
docker network create -d macvlan \
    --subnet=192.168.1.0/24 \
    --gateway=192.168.1.1 \
    -o parent=eth0 \
    my-macvlan

docker run -d --network my-macvlan --ip 192.168.1.100
--name web nginx

Container xuất hiện như một device trên physical network

3. Docker DNS Resolution

Docker embedded DNS server cho phép containers resolve tên của nhau:

# Containers trên custom network tự động resolve names
docker network create app-net
docker run -d --name db --network app-net postgres:16
docker run -d --name api --network app-net node:20

Trong api container, có thể kết nối db bằng hostname "db"

postgresql://user:pass@db:5432/myapp

Network aliases

docker run -d --name db-primary --network app-net
--network-alias database
postgres:16

Có thể truy cập bằng "db-primary" hoặc "database"

4. Port Mapping chi tiết

# Publish port
docker run -p 8080:80 nginx           # host:container
docker run -p 127.0.0.1:8080:80 nginx # Chỉ localhost
docker run -p 8080:80/tcp nginx       # Chỉ TCP
docker run -p 8080:80/udp nginx       # Chỉ UDP
docker run -P nginx                    # Publish tất cả EXPOSE ports (random)

Xem port mappings

docker port my-container

5. Network Management

# Tạo network với options
docker network create \
    --driver bridge \
    --subnet 172.28.0.0/16 \
    --ip-range 172.28.5.0/24 \
    --gateway 172.28.0.1 \
    my-network

Connect/disconnect container từ network

docker network connect my-network my-container docker network disconnect my-network my-container

Connect với IP cụ thể

docker network connect --ip 172.28.5.100 my-network my-container

Xóa network

docker network rm my-network

Cleanup unused networks

docker network prune

6. Network Troubleshooting

# Debug container với network tools
docker run -it --network my-network nicolaka/netshoot

Các lệnh debug

ping api # Test connectivity nslookup db # DNS resolution traceroute api # Trace route curl http://api:3000/health # HTTP test tcpdump -i eth0 # Capture packets ss -tlnp # Listening ports ip addr # Network interfaces iptables -L # Firewall rules

Xem network config của container

docker inspect -f '{{json .NetworkSettings.Networks}}' my-container | jq .

7. Tổng kết

Trong bài này, bạn đã nắm được:

  • Docker networking drivers: bridge, host, overlay, macvlan, none

  • Custom bridge networks và DNS resolution

  • Port mapping và network aliases

  • Network management và isolation

  • Troubleshooting tools và techniques

Bài tiếp theo sẽ hướng dẫn Docker Volumes và Persistent Storage.