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:

  1. Request masuk ke host
  2. iptables mengarahkan ke container
  3. 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 #

  1. Gunakan user-defined bridge (bukan default docker0)
  2. Jangan hardcode IP, gunakan DNS container
  3. Expose port hanya jika perlu
  4. Pisahkan network frontend & backend untuk keamanan
  5. 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
About | Author | Content Scope | Editorial Policy | Privacy Policy | Disclaimer | Contact