Bridge #
Dalam Docker, network adalah fondasi utama yang memungkinkan container saling berkomunikasi, baik antar-container maupun dengan dunia luar. Salah satu network driver yang paling sering digunakan dan paling fundamental adalah bridge network.
Banyak developer menggunakan bridge secara default, namun tidak benar-benar memahami bagaimana container bisa saling terhubung, bagaimana NAT bekerja, dan apa perbedaannya dengan host atau overlay network. Artikel ini akan membedah bridge network secara konseptual hingga teknis, sehingga kamu benar-benar paham apa yang terjadi di balik layar.
Diagram Konsep Docker Bridge Network #
Diagram berikut menggambarkan alur komunikasi container menggunakan bridge network:
+----------------------- Host OS -----------------------+
| |
| +-------------+ docker0 +------------+|
| | Container A | ----> (Bridge) <---- | Container B||
| | 172.17.0.2 | 172.17.0.1 | 172.17.0.3 ||
| +-------------+ +------------+|
| | | |
| +------------ NAT / iptables -------------+ |
| | |
| Internet / LAN |
+-------------------------------------------------------+
Dari diagram ini kita bisa melihat bahwa:
- Container tidak langsung terhubung ke network fisik
- Semua lalu lintas melewati bridge virtual (
docker0) - Akses keluar container menggunakan NAT
Apa Itu Bridge Network di Docker? #
Bridge network adalah virtual network berbasis Linux bridge yang digunakan Docker untuk menghubungkan container dalam satu host.
Secara sederhana:
- Bridge = switch virtual
- Container = device di dalam switch
Setiap container yang berada di bridge network akan:
- Memiliki IP private sendiri
- Bisa berkomunikasi langsung dengan container lain di network yang sama
- Mengakses jaringan luar melalui NAT
Jika kamu tidak menentukan network saat menjalankan container:
docker run nginx
Maka container tersebut otomatis masuk ke default bridge network.
Default Bridge vs User-Defined Bridge #
Docker menyediakan dua jenis bridge:
Default Bridge (bridge)
#
Ini adalah bridge bawaan Docker (docker0).
Ciri-cirinya:
- Semua container masuk ke network yang sama
- Tidak ada DNS internal (harus pakai IP)
- Kurang fleksibel
Contoh komunikasi:
ping 172.17.0.3
User-Defined Bridge (Direkomendasikan) #
Bridge yang kita buat sendiri:
docker network create my-bridge
Keunggulannya:
- Ada DNS internal berbasis nama container
- Isolasi network lebih baik
- Lebih aman dan rapi
Contoh:
docker run --name app --network my-bridge myapp
docker run --name db --network my-bridge postgres
Container app bisa langsung mengakses:
db:5432
Tanpa perlu tahu IP address.
Bagaimana Docker Bridge Bekerja di Level OS? #
Di balik layar, Docker memanfaatkan fitur Linux:
Linux Bridge #
Docker membuat bridge virtual:
ip link show docker0
Bridge ini berfungsi seperti layer 2 switch.
Network Namespace #
Setiap container memiliki:
- Network namespace sendiri
- Interface virtual (veth pair)
Skemanya:
Container eth0 <---- veth ----> docker0 bridge
IP Address Management (IPAM) #
Docker otomatis:
- Menentukan subnet (contoh
172.17.0.0/16) - Memberikan IP unik ke tiap container
NAT dan iptables #
Agar container bisa keluar ke internet:
- Docker menambahkan rule iptables MASQUERADE
- IP container diterjemahkan menjadi IP host
Inilah alasan:
- Container bisa
curl google.com - Tapi internet tidak bisa langsung mengakses container tanpa port mapping
Port Mapping pada Bridge Network #
Karena bridge bersifat private, maka untuk expose service digunakan port mapping:
docker run -p 8080:80 nginx
Artinya:
Host:8080 ---> Container:80
Alur trafik:
- Request masuk ke host
- iptables meneruskan ke container
- Response kembali lewat host
Isolasi dan Keamanan Bridge Network #
Bridge network memberikan isolasi alami:
- Container hanya bisa melihat network-nya sendiri
- Container di bridge berbeda tidak bisa saling komunikasi
Best practice keamanan:
- Gunakan user-defined bridge
- Pisahkan frontend, backend, dan database
- Jangan expose port yang tidak perlu
Contoh:
frontend-network
backend-network
Bridge Network di Docker Compose #
Docker Compose selalu menggunakan user-defined bridge secara default.
Contoh:
services:
app:
image: myapp
db:
image: postgres
Compose otomatis membuat:
projectname_default
Keuntungannya:
- DNS otomatis
- Isolasi per project
- Sangat cocok untuk local development
Kapan Menggunakan Bridge Network? #
Bridge network cocok untuk:
- Local development
- Microservices dalam satu host
- Backend + database
- CI/CD pipeline
Tidak cocok untuk:
- Multi-host communication (gunakan overlay)
- High-performance low-latency networking (pertimbangkan host network)
Best Practice #
- Selalu gunakan user-defined bridge
- Gunakan nama service sebagai hostname
- Jangan hardcode IP container
- Minimalkan port expose
- Pisahkan network berdasarkan fungsi
Penutup #
Docker bridge network adalah pondasi utama networking Docker. Walaupun terlihat sederhana, di baliknya terdapat kombinasi Linux bridge, namespace, virtual interface, dan iptables.
Dengan memahami bridge secara mendalam, kamu akan:
- Lebih mudah melakukan debugging network
- Lebih aman dalam mendesain arsitektur container
- Lebih percaya diri membangun sistem berbasis Docker