User-defined Network #
Dalam arsitektur aplikasi modern berbasis container, jaringan (networking) memegang peranan yang sangat krusial. Docker menyediakan berbagai jenis network, namun salah satu yang paling penting dan wajib dipahami untuk environment nyata (development maupun production) adalah User Defined Network.
Banyak developer masih menggunakan default bridge network tanpa sadar keterbatasannya. Padahal, Docker user defined network menawarkan isolasi yang lebih baik, DNS internal otomatis, serta konfigurasi yang jauh lebih fleksibel.
Diagram Konsep User Defined Network #
+--------------------------- Docker Host -----------------------------+
| |
| +------------------- User Defined Network (bridge) -------------+ |
| | | |
| | +-------------+ +-------------+ +-----------+ | |
| | | Container A| <----> | Container B| <----> |Container C| | |
| | | (web) | | (api) | | (db) | | |
| | +-------------+ +-------------+ +----------+ | |
| | | | | | |
| | DNS: web DNS: api DNS: db | |
| | | |
| +---------------------------------------------------------------+ |
| |
+---------------------------------------------------------------------+
Diagram di atas menunjukkan beberapa container yang terhubung dalam satu user defined network, di mana setiap container dapat saling berkomunikasi menggunakan hostname berbasis nama container, tanpa perlu mengetahui IP secara manual.
Apa Itu User Defined Network? #
User Defined Network adalah network yang dibuat secara eksplisit oleh user menggunakan perintah Docker, bukan network bawaan yang otomatis dibuat oleh Docker.
Contoh network bawaan Docker:
bridge(default)hostnone
Sedangkan user defined network dibuat dengan:
docker network create my-network
Network ini dapat digunakan oleh satu atau lebih container, baik secara manual (docker run) maupun melalui Docker Compose.
Mengapa Tidak Menggunakan Default Bridge Saja? #
Default bridge network memiliki beberapa keterbatasan serius:
- ❌ Tidak ada DNS otomatis berbasis nama container
- ❌ Komunikasi antar container mengandalkan IP
- ❌ Sulit di-maintain untuk banyak container
- ❌ Kurang aman karena semua container berada di network yang sama
User defined network memperbaiki semua masalah tersebut.
Keunggulan User Defined Network #
1. DNS Internal Otomatis #
Docker menyediakan built-in DNS server untuk user defined network.
Artinya:
- Container dapat mengakses container lain cukup dengan nama container
- Tidak perlu hardcode IP
Contoh:
curl http://api:8080
Tanpa user defined network, ini tidak akan bekerja.
2. Isolasi Jaringan yang Lebih Baik #
Setiap user defined network bersifat terisolasi.
- Container hanya bisa berkomunikasi dengan container dalam network yang sama
- Mengurangi risiko akses tidak sah
Contoh:
frontend-networkbackend-networkinternal-db-network
Container database bisa benar-benar tidak terekspos ke frontend.
3. Mendukung Multi-Network per Container #
Satu container dapat terhubung ke lebih dari satu network.
Contoh use case:
API service terhubung ke:
- network frontend
- network database
[Frontend Network] <---> [API Container] <---> [DB Network]
Ini sangat berguna untuk arsitektur layered security.
4. Konfigurasi Lebih Fleksibel #
User defined network mendukung:
- Custom subnet
- Custom gateway
- IP address manual
- Driver khusus
Contoh:
docker network create \
--subnet 172.20.0.0/16 \
--gateway 172.20.0.1 \
my-custom-network
Jenis Driver pada User Defined Network #
1. Bridge (Paling Umum) #
Digunakan untuk:
- Local development
- Single host
docker network create --driver bridge my-bridge
2. Overlay #
Digunakan untuk:
- Docker Swarm
- Multi-host container
docker network create --driver overlay my-overlay
Container di host berbeda tetap bisa saling berkomunikasi.
3. Macvlan #
Digunakan jika container perlu:
- IP langsung dari network fisik
- Dianggap sebagai device tersendiri
Umumnya dipakai untuk kebutuhan khusus (legacy system, monitoring).
User Defined Network di Docker Compose #
Docker Compose secara default sudah menggunakan user defined network.
Contoh sederhana:
version: "3.9"
services:
web:
image: nginx
depends_on:
- api
api:
image: my-api
networks:
default:
name: my-app-network
Docker akan:
- Membuat network otomatis
- Mengaktifkan DNS internal
- Menghubungkan semua service
Contoh Arsitektur Nyata #
Internet
|
[ Nginx ] <-- frontend-network
|
[ API ] <-- backend-network
|
[ DB ] <-- internal-network
Dengan pendekatan ini:
- Database tidak bisa diakses langsung dari luar
- Frontend tidak tahu detail database
- API menjadi satu-satunya gateway
Best Practice #
- ✅ Selalu gunakan user defined network
- ✅ Pisahkan network berdasarkan layer aplikasi
- ✅ Jangan expose database ke network publik
- ✅ Gunakan nama container sebagai hostname
- ✅ Manfaatkan multi-network untuk security
- ❌ Hindari default bridge untuk aplikasi serius
Kesimpulan #
User Defined Network adalah fondasi penting dalam Docker networking.
Dengan user defined network, Anda mendapatkan:
- DNS internal otomatis
- Isolasi jaringan
- Arsitektur lebih aman
- Konfigurasi fleksibel
Jika Anda membangun aplikasi multi-container dan tidak menggunakan user defined network, maka Anda kehilangan salah satu kekuatan terbesar Docker.
✨ Memahami networking di Docker bukan opsional — ini adalah skill wajib untuk production-ready system.