Overview #
Docker tidak hanya soal image dan container, tetapi juga network. Docker networking adalah fondasi utama yang memungkinkan container:
- Saling berkomunikasi
- Berkomunikasi dengan host
- Mengakses jaringan eksternal (internet)
Tanpa pemahaman network Docker, konfigurasi aplikasi multi-container (microservices, database, message broker, dsb) akan terasa seperti trial and error.
Diagram Konsep Dasar Docker Network #
Diagram berikut membantu memahami posisi Docker Network di antara host, container, dan dunia luar:
+---------------------------------------------------+
| HOST OS |
| |
| +---------------- Docker Engine --------------+ |
| | | |
| | +----------- Docker Network ------------+ | |
| | | | | |
| | | +-----------+ +-----------+ | | |
| | | | Container | <--> | Container | | | |
| | | | A | | B | | | |
| | | +-----------+ +-----------+ | | |
| | | | | |
| | +---------------------------------------+ | |
| | | |
| +---------------------------------------------+ |
| |
| ^ | |
| | v |
| Internet Host Network |
+---------------------------------------------------+
Dari diagram ini terlihat bahwa:
- Container tidak langsung terhubung ke network host
- Semua koneksi diatur melalui Docker Network Driver
Apa Itu Docker Networking? #
Docker Networking adalah mekanisme yang digunakan Docker untuk:
- Mengisolasi jaringan antar container
- Menghubungkan container dalam satu aplikasi
- Mengatur routing, DNS, dan port mapping
Secara internal, Docker memanfaatkan:
- Linux network namespace
- Virtual Ethernet (veth)
- iptables / nftables
- Bridge virtual
Semua kompleksitas ini disembunyikan di balik konfigurasi sederhana Docker.
Komponen Utama Docker Network #
Network Namespace #
Setiap container memiliki network namespace sendiri, artinya:
- IP address sendiri
- Routing table sendiri
- Interface jaringan sendiri
Akibatnya:
- Container secara default terisolasi satu sama lain
- Tidak bisa saling komunikasi tanpa network Docker
Virtual Ethernet (veth) #
Docker menghubungkan container ke network menggunakan veth pair:
- Satu ujung berada di dalam container
- Satu ujung berada di host (bridge Docker)
Container eth0 <==== veth ==== docker0 (bridge)
Docker Bridge #
Docker membuat bridge virtual (default: docker0) yang berfungsi seperti switch:
- Menghubungkan banyak container
- Mengatur forwarding paket
Container di bridge yang sama bisa saling ping dan resolve nama container.
DNS Internal Docker #
Docker menyediakan DNS server internal:
- Container bisa mengakses container lain via nama container / service
- Tidak perlu hardcode IP
Contoh:
backend -> http://database:5432
Jenis-Jenis Docker Network Driver #
Bridge (Default) #
Driver paling umum dan paling sering dipakai.
Karakteristik:
- Container mendapatkan IP private
- Komunikasi antar container dalam satu host
- Bisa expose port ke host
Cocok untuk:
- Local development
- Aplikasi single-host
Host #
Container menggunakan network host secara langsung.
Karakteristik:
- Tidak ada isolasi network
- Performa tinggi
- Tidak bisa port mapping (karena langsung pakai host)
Cocok untuk:
- High-performance networking
- Debugging
None #
Container tanpa network.
Karakteristik:
- Tidak punya interface jaringan
- Sangat terisolasi
Cocok untuk:
- Job batch
- Security sandbox
Overlay #
Digunakan untuk komunikasi antar container di multi-host.
Karakteristik:
- Membutuhkan Docker Swarm atau orchestrator
- Container di host berbeda bisa seolah-olah satu network
Cocok untuk:
- Microservices skala besar
- Cluster environment
Macvlan #
Container mendapatkan IP langsung dari network fisik.
Karakteristik:
- Container terlihat seperti device fisik
- Bisa diakses langsung dari network luar
Cocok untuk:
- Legacy system
- Integrasi dengan jaringan existing
Port Mapping dan NAT #
Docker menggunakan NAT untuk menghubungkan container ke host:
Host:8080 -> Container:80
Alur trafik:
- Request masuk ke host
- iptables mengarahkan ke container
- Response dikembalikan ke client
Inilah alasan container bisa diakses tanpa IP publik sendiri.
Docker Network di Docker Compose #
Docker Compose secara default:
- Membuat 1 bridge network per project
- Semua service otomatis tergabung
Keuntungannya:
- Service discovery otomatis
- Isolasi antar project
- Konfigurasi sederhana
Best Practice #
- Gunakan user-defined bridge (bukan default
docker0) - Jangan hardcode IP, gunakan DNS container
- Expose port hanya jika perlu
- Pisahkan network frontend & backend untuk keamanan
- Gunakan overlay network untuk multi-host
Kesimpulan #
Docker Networking adalah lapisan penting yang sering dianggap “ajaib”, padahal di baliknya ada konsep networking Linux yang sangat kuat.
Dengan memahami:
- Network namespace
- Bridge dan veth
- Network driver Docker
Kita bisa:
- Mendesain arsitektur container yang lebih aman
- Menghindari konflik port
- Membuat aplikasi Docker yang scalable dan production-ready