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-networkChạ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 flagUse 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-overlayOverlay 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-macvlandocker run -d --network my-macvlan --ip 192.168.1.100
--name web nginxContainer 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:20Trong 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:16Có 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-networkConnect/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/netshootCá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.