Skip to content

Docker Network

Container berjalan dalam lingkungan yang terisolasi. Artinya, container tidak otomatis berada di user-defined network yang sama atau mengetahui container aplikasi lain yang perlu diajak berkomunikasi.

Docker sebenarnya menyediakan default bridge network. Container yang berada di network tersebut dapat berkomunikasi menggunakan IP address, tetapi cara ini kurang praktis karena IP address dapat berubah. Untuk menghubungkan beberapa container dengan lebih jelas dan mudah dikelola, gunakan Docker Network sendiri.

Docker Network memungkinkan beberapa container saling berkomunikasi menggunakan nama container. Ini penting ketika app perlu terhubung ke database, cache, atau service lain.

Cara container berkomunikasi

Container yang berada di user-defined network Docker yang sama bisa saling terhubung menggunakan nama container. Kamu tidak perlu mengetahui IP address container.

Loading diagram...

localhost di dalam container menunjuk ke container itu sendiri. Jadi, dari container app, database di container db diakses menggunakan hostname db, bukan localhost.

Melihat Docker Network

sh
docker network ls

Contoh output:

text
NETWORK ID     NAME      DRIVER    SCOPE
7f3a1b2c4d5e   bridge    bridge    local

Output tersebut menunjukkan default network bridge yang disediakan Docker. Untuk project, lebih baik membuat network sendiri agar nama dan anggotanya jelas.

Membuat network

Format command:

sh
docker network create <nama-network>

Contoh:

sh
docker network create app-network

Lihat detail network:

sh
docker network inspect app-network

Menjalankan container pada network yang sama

Format command:

sh
docker run -d --name <nama-container> --network <nama-network> <image:tag>

Untuk menunjukkan komunikasi antar-container, jalankan PostgreSQL sebagai service pertama di app-network:

sh
docker run -d --name db \
  --network app-network \
  -e POSTGRES_PASSWORD=secret \
  postgres:16

INFO

Option -e digunakan untuk memberikan environment variable ke dalam container. POSTGRES_PASSWORD=secret menetapkan password untuk PostgreSQL. Environment variable akan dibahas lebih lengkap pada lesson 8.

Sekarang jalankan container sementara pada network yang sama. Kita menggunakan image BusyBox, yaitu image Linux berukuran kecil yang berisi berbagai utility dasar. BusyBox cocok untuk contoh ini karena menyediakan command nslookup untuk memeriksa apakah nama db bisa ditemukan di network.

Option --rm membuat Docker menghapus container BusyBox setelah command selesai. Container ini hanya dipakai sebagai alat bantu untuk menguji koneksi, bukan sebagai service aplikasi.

sh
docker run --rm \
  --network app-network \
  busybox nslookup db

Container kedua bisa menemukan db berdasarkan nama container. Pada app yang benar-benar terhubung ke PostgreSQL, gunakan host db dan port 5432.

Network dan port

Docker Network mengatur komunikasi antar-container. Port mapping dengan -p mengatur akses dari host, seperti akses dari browser di laptop ke container.

Port database tidak perlu di-publish ke laptop jika hanya dipakai oleh app di network yang sama. Publish port hanya jika memang perlu diakses dari host.

Setelah memastikan komunikasi berhasil, hapus container dan network latihan. Perintah berikut tidak menghapus image PostgreSQL:

sh
docker rm -f db
docker network rm app-network

Docker Compose pada lesson berikutnya akan membuat network project secara otomatis. Konsepnya tetap sama, service bisa saling menghubungi menggunakan nama service.