Isolasi Network #

Salah satu kekuatan utama Docker adalah kemampuannya melakukan isolasi, tidak hanya pada proses dan filesystem, tetapi juga pada jaringan (network isolation). Banyak developer menggunakan Docker setiap hari tanpa benar-benar memahami bagaimana container bisa saling terisolasi di level network, padahal konsep ini sangat krusial untuk keamanan, stabilitas, dan desain arsitektur aplikasi.

Untuk mempermudah pemahaman, perhatikan diagram konseptual berikut:

+--------------------------- Host OS ----------------------------+
|                                                                |
|   +------------+        +------------+        +------------+   |
|   | Container A|        | Container B|        | Container C|   |
|   |------------|        |------------|        |------------|   |
|   | eth0       |        | eth0       |        | eth0       |   |
|   | 172.18.0.2 |        | 172.18.0.3 |        | 172.19.0.2 |   |
|   +-----|------+        +-----|------+        +-----|------+   |
|         |                       |                       |      |
|         +-----------------------+-----------------------+      |
|        Docker Bridge (br-xxx)            Docker Bridge (br-yyy)|
|        172.18.0.0/16                     172.19.0.0/16         |
|                                                                |
+----------------------------------------------------------------+

Diagram di atas menunjukkan bahwa container dapat berada di network yang berbeda, meskipun berjalan di host yang sama. Inilah inti dari network isolation di Docker.


Apa Itu Network Isolation? #

Network isolation adalah mekanisme untuk memastikan bahwa satu container tidak bisa berkomunikasi secara bebas dengan container lain, kecuali memang diizinkan.

Di Docker, network isolation dicapai dengan kombinasi:

  • Linux network namespace
  • Virtual Ethernet (veth pair)
  • Linux bridge
  • iptables / nftables
  • Docker network driver

Setiap container secara default berjalan dalam network namespace terpisah, artinya:

  • Memiliki interface network sendiri
  • Routing table sendiri
  • IP address sendiri
  • Tidak bisa “melihat” traffic container lain secara langsung

Network Namespace: Fondasi Utama #

Saat Docker membuat container, Docker juga membuat network namespace baru.

Di dalam network namespace ini:

  • eth0 hanya milik container tersebut
  • Loopback (lo) terisolasi
  • Tidak berbagi port atau IP dengan container lain

Secara konsep:

Host Network Namespace
│
├── Container A Namespace (eth0: 172.18.0.2)
├── Container B Namespace (eth0: 172.18.0.3)
└── Container C Namespace (eth0: 172.19.0.2)

Tanpa mekanisme tambahan (bridge atau routing), namespace ini tidak saling terhubung.


Peran Docker Network Driver #

Docker menyediakan beberapa network driver yang mengatur bagaimana container saling terhubung:

1. Bridge (default) #

  • Setiap container mendapat IP private
  • Terhubung melalui Linux bridge
  • Container hanya bisa berkomunikasi jika berada di bridge yang sama

Isolasi terjadi karena:

  • Bridge berbeda = subnet berbeda
  • iptables membatasi traffic antar bridge

2. Host #

  • Container tidak terisolasi dari network host
  • Tidak ada network namespace terpisah
  • Port container = port host

⚠️ Driver ini menghilangkan network isolation

3. None #

  • Container tidak memiliki network sama sekali
  • Hanya loopback (lo)
  • Isolasi paling ketat

4. Overlay #

  • Digunakan di Docker Swarm / Kubernetes
  • Isolasi terjadi antar service dan network virtual
  • Mendukung multi-host

5. Macvlan #

  • Container mendapat IP langsung dari jaringan fisik
  • Isolasi terjadi di level MAC address

Bagaimana Container Bisa Saling Terhubung? #

Container hanya bisa berkomunikasi jika:

  1. Berada di network Docker yang sama, atau
  2. Ada routing / port mapping yang eksplisit

Contoh:

docker network create app-network

docker run -d --name backend --network app-network backend-image
docker run -d --name frontend --network app-network frontend-image

Dalam kondisi ini:

  • frontend bisa mengakses backend
  • Container di network lain tidak bisa mengakses backend

Inilah bentuk network isolation yang disengaja.


Port Mapping dan Dampaknya ke Isolasi #

Ketika menggunakan port mapping:

docker run -p 8080:80 nginx

Yang terjadi:

  • Port 80 container diekspos ke host
  • Host membuka akses ke container
  • Isolasi network berkurang, tapi masih terkontrol

Diagram sederhananya:

Internet
   │
   ▼
Host:8080 ──> Container:80

Tanpa -p, container tetap terisolasi dari dunia luar.


Network Isolation dan Keamanan #

Network isolation berperan besar dalam keamanan:

  • Mencegah lateral movement antar container
  • Mengurangi blast radius saat satu service compromised
  • Memungkinkan prinsip least privilege networking

Best practice:

  • Pisahkan network berdasarkan domain aplikasi
  • Jangan gunakan --network host tanpa alasan kuat
  • Gunakan internal: true pada Docker network jika perlu
networks:
  internal_net:
    internal: true

Network Isolation di Docker Compose #

Docker Compose secara default sudah menerapkan isolasi:

  • Setiap docker-compose.yml membuat network sendiri
  • Service hanya bisa berkomunikasi dalam project yang sama

Contoh:

services:
  db:
    image: postgres
  api:
    image: my-api

Secara implisit:

project_default_network
├── db
└── api

Service dari compose lain tidak bisa masuk tanpa konfigurasi tambahan.


Kesalahan Umum Terkait Network Isolation #

Beberapa kesalahan yang sering terjadi:

  • Menganggap semua container otomatis bisa saling ping
  • Menggunakan host network untuk kemudahan
  • Meletakkan semua service dalam satu network besar
  • Mengekspos port database ke host

Semua ini melemahkan isolasi.


Kapan Network Isolation Sangat Penting? #

Network isolation menjadi krusial ketika:

  • Menjalankan aplikasi multi-tenant
  • Mengelola microservices
  • Menangani data sensitif
  • Menjalankan container pihak ketiga

Tanpa isolasi yang baik, Docker hanya menjadi “VM ringan” tanpa proteksi yang memadai.


Penutup #

Network isolation di Docker bukan fitur tambahan, tetapi fondasi utama dari desain container.

Dengan memahami:

  • Network namespace
  • Docker network driver
  • Cara container saling terhubung

Anda bisa:

  • Mendesain arsitektur yang lebih aman
  • Menghindari konfigurasi berbahaya
  • Menggunakan Docker secara lebih profesional

Docker bukan hanya soal menjalankan aplikasi, tapi juga mengontrol bagaimana aplikasi itu berkomunikasi — dan network isolation adalah kuncinya.

About | Author | Content Scope | Editorial Policy | Privacy Policy | Disclaimer | Contact