Bài 13: Cơ bản về Docker Networking
Giới thiệu
Networking trong Docker không chỉ là một yếu tố "được xây thêm vào" mà là một phần thiết yếu để đảm bảo containers có thể giao tiếp một cách hiệu quả với nhau và với thế giới bên ngoài.
Cách Docker Handle Networking
Docker sử dụng một số công nghệ của Linux như namespaces và iptables để cung cấp chức năng networking. Khi một container được tạo, Docker tạo một pair của virtual ethernet interfaces, một ở trong container và một ở bên ngoài, và bridge chúng lại với nhau.
Bridge Network
Bridge network là network driver mặc định khi bạn tạo một container. Khi Docker daemon khởi động, nó tự động tạo một bridge network mặc định tên là docker0.
Cách hoạt động
Bridge network giúp tạo một mạng private ảo bên trong host machine, cho phép các container trong mạng này giao tiếp qua IP. Đặc điểm quan trọng là các container có thể giao tiếp với các service trong host machine qua gateway của bridge network.
Ví dụ Bridge Network
- Tạo Bridge Network
docker network create --driver=bridge my_custom_network
- Run Containers trong Custom Bridge Network
docker run --network=my_custom_network -itd --name=container1 nginx
docker run --network=my_custom_network -itd --name=container2 alpine ping container1
Trong ví dụ này, container1 chạy web server nginx, và container2 thực hiện ping tới container1 thông qua hostname.
- Inspect Network
Để kiểm tra thông tin mạng của my_custom_network, sử dụng lệnh:
docker network inspect my_custom_network
Ưu và Nhược điểm của Bridge Network
Ưu điểm:
Isolation: Được isolate tốt, giúp tăng cường bảo mật.
Simplicity: Rất dễ để set up và sử dụng.
Nhược điểm:
Performance Overhead: Bridge network có thể làm giảm hiệu suất so với host network.
Manually Expose Ports: Ports phải được expose thủ công để cho phép giao tiếp với bên ngoài.
Network Policies
Docker cho phép bạn đặt các network policies bằng cách sử dụng iptables. Ví dụ, để block traffic từ một container cụ thể:
docker network create --internal restricted_network
docker run --network=restricted_network alpine
Network này giờ đây là một mạng nội bộ (--internal), giúp cô lập hoàn toàn với mạng bên ngoài.
Kết luận
Hiểu rõ cách Docker handle networking và cụ thể là bridge network là điều cực kỳ quan trọng trong việc deploy các ứng dụng phức tạp, cũng như trong việc đảm bảo bảo mật và hiệu năng của các container.