Halo, Kawan Belajar!
Ketika kita menjalankan aplikasi di dalam Docker container, setiap container memiliki lingkungan (environment) dan jaringan yang terisolasi dari sistem host maupun container lainnya. Kelebihan ini membuat aplikasi jadi lebih aman dan mudah dikelola, tapi ada satu konsekuensi penting yakni aplikasi di dalam container tidak bisa diakses langsung dari luar, seperti dari browser.
Nah, agar aplikasi tersebut dapat diakses dari luar, Docker menyediakan fitur yang disebut Port Mapping (atau Port Publishing). Fitur ini berfungsi untuk menghubungkan port di host dengan port di dalam container, ibarat membuka "pintu akses” agar dunia luar bisa berkomunikasi dengan aplikasi yang berjalan di container.
Apa Itu Port Mapping?
Secara sederhana, Port Mapping adalah proses memetakan port yang digunakan di dalam container ke port di sistem host. Setiap container punya port internal sendiri (misalnya NGINX mendengarkan di port 80). Namun, tanpa port mapping, port 80 itu hanya bisa diakses dari dalam container itu sendiri.
Untuk membuka akses dari luar, kita gunakan opsi -p saat menjalankan container:
docker run -d -p <HostPort>:<ContainerPort> <docker_image>
Contoh sederhana:
docker run -d -p 8080:80 nginx
Artinya:
80→ port di dalam container (port default NGINX)8080→ port di host (yang bisa diakses melalui browser)
Sekarang, kalau kamu buka di browser:
http://Alamat_IP:8080
maka halaman default NGINX akan tampil. 🎉
Penggunaan Dasar Port Mapping
Berikut adalah beberapa variasi umum yang bisa kamu gunakan saat melakukan port mapping:
1. Menentukan port secara manual
Ini adalah bentuk paling umum, kamu menentukan port host dan port container secara eksplisit:
docker run -d -p 8080:80 nginx
2. Memetakan beberapa port sekaligus
Kamu bisa menambahkan beberapa opsi -p dalam satu perintah:
docker run -d -p 8080:80 -p 8443:443 nginx
Perintah ini membuka dua port pada host, masing-masing terhubung ke HTTP (80) dan HTTPS (443) di container.
3. Melihat port mapping aktif
Untuk melihat port mapping yang sedang berjalan:
docker port <nama_container>
Contoh hasil:
- 80/tcp -> 0.0.0.0:8080
- 80/tcp -> [::]:8080
- 443/tcp -> 0.0.0.0:8443
- 443/tcp -> [::]:8443
Penjelasan:
Port 80/tcp → 0.0.0.0:8080
→ Port 80 di dalam container (HTTP) dipetakan ke port 8080 di host.Port 443/tcp → 0.0.0.0:8443
→ Port 443 di dalam container (HTTPS) dipetakan ke port 8443 di host.Alamat 0.0.0.0 dan [::] menunjukkan bahwa port tersebut terbuka di semua interface jaringan host, baik IPv4 maupun IPv6.
4. Menggunakan Ephemeral Port
Kadang, kamu ingin mem-publish port container tanpa peduli port host berapa yang digunakan. Docker bisa secara otomatis memilih port acak (ephemeral) untuk kamu.
Cukup hilangkan HOST_PORT:
docker run -d -p 80 nginx
Kemudian jalankan:
docker ps
Hasilnya akan menampilkan port acak di host seperti contoh berikut:
Artinya, aplikasi Nginx yang berjalan di port 80 dalam container bisa diakses di port 32768 di host.
Catatan Penting: Port Mapping Hanya Berlaku Saat Container Dijalankan
Perlu kamu tahu bahwa konfigurasi port mapping hanya bisa ditentukan saat container dijalankan pertama kali, yaitu menggunakan perintah docker run dengan opsi -p atau --publish.
Kalau kamu ingin mengubah port mapping yang sedang aktif digunakan, cara satu-satunya adalah menjalankan ulang (relaunch) container dengan konfigurasi port baru.
Langkah-langkahnya:
Berhentikan container lama:
docker stop <nama_container>Hapus container lama (image tetap aman):
docker rm <nama_container>Jalankan ulang container dengan port baru:
docker run -d --name <nama_container> -p <HostPort>:<ContainerPort> <image>
💡 Tips: Jika container kamu menyimpan data penting, pastikan menggunakan volume (
-v) agar data tidak hilang saat container dihapus dan dijalankan ulang. Baca lebih lanjut tentang Docker Volume disini: Memahami Docker Volume untuk Persistent Storage
Port Mapping Menggunakan Docker Compose
Selain melalui docker run, kita juga bisa melakukan port mapping menggunakan Docker Compose, yang sangat membantu jika kamu mengelola beberapa container sekaligus.
- Buat file compose.yaml
services:
web:
image: nginx
ports:
- "8080:80"
Penjelasan:
- services: → mendefinisikan layanan yang akan dijalankan.
- image: → nama image yang digunakan.
- ports: → menentukan port mapping, dengan format yang sama seperti docker run -p HOST:CONTAINER.
Jalankan aplikasi
Di direktori tempat filecompose.yamlberada, jalankan:docker compose up -dCek status container
docker compose psGambar 3: Melihat Container yang Berjalan Sekarang kamu bisa mengaksesnya di:
http://Alamat_IP:8080Gambar 4: Default Page Nginx Mapping beberapa port di Compose
Kamu juga bisa menambahkan lebih dari satu port:ports: - "8080:80" - "8443:443"
Penutup
Dengan memahami port mapping di Docker, kamu bisa lebih mudah mengontrol bagaimana aplikasi di dalam container berinteraksi dengan dunia luar. Fitur ini penting banget, terutama saat kamu menjalankan web server, API, atau layanan lain yang perlu diakses pengguna.
Kalau kamu masih baru dalam dunia Docker, jangan khawatir! Kamu bisa mulai dari artikel dasar kami di sini:
👉 Mengenal Docker: Penjelasan, Cara Kerja, dan Keuntungannya
Dan buat kamu yang ingin bereksperimen langsung menjalankan Docker container, kamu bisa menggunakan VPS CloudKilat yakni Kilat VM 2.0. Pada Kilat VM 2.0, kamu bisa menginstal Docker, mencoba berbagai konfigurasi, serta melakukan praktikum langsung, tentunya didampingi dengan performa yang andal, fleksibel, dan harga terjangkau.