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:

  1. Request masuk ke host
  2. iptables meneruskan ke container
  3. 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
About | Author | Content Scope | Editorial Policy | Privacy Policy | Disclaimer | Contact