Skip to main content

Dockerfile EXPOSE

🤔 Apa itu EXPOSE?​

EXPOSE adalah instruksi dalam Dockerfile yang berfungsi untuk menginformasikan kepada Docker dan pengguna (engineer lain) bahwa kontainer akan mendengarkan (listen) pada port jaringan tertentu saat dijalankan.

  • Fungsi Utama: Sebagai dokumentasi teknis antara orang yang membangun image dan orang yang menjalankan kontainer.
  • Protokol: Secara default menggunakan TCP, namun Anda juga bisa menentukan UDP.

1️⃣ Sintaks Dasar​

# Mendokumentasikan port tunggal (TCP)
EXPOSE 8080

# Mendokumentasikan port dengan protokol spesifik
EXPOSE 53/udp

# Mendokumentasikan banyak port sekaligus
EXPOSE 80 443 3306

2️⃣ Poin Penting​

Banyak yang mengira EXPOSE otomatis membuka akses dari browser internet ke kontainer. Ini adalah pemahaman yang keliru.

FiturEXPOSEFlag -p (Publish)
Kapan ditulis?Di dalam Dockerfile.Saat menjalankan docker run.
Akses Publik?TIDAK. Port tidak terbuka ke host/internet.YA. Menghubungkan port laptop ke kontainer.
FungsiDokumentasi & Komunikasi antar kontainer.Akses aplikasi dari luar (browser).

Contoh: Jika kita menulis EXPOSE 8080 di Dockerfile, kita tetap wajib mengetik docker run -p 8080:8080 agar bisa mengakses aplikasi dari localhost:8080.

3️⃣ Penggunaan di Dunia Nyata​

  • Otomatisasi Jaringan: Jika kita menggunakan User-defined Bridge Network (Docker Network), kontainer lain di jaringan yang sama dapat melihat port yang di-EXPOSE untuk saling berkomunikasi secara internal tanpa perlu flag -p.

  • Otomatisasi -P (Capital P): Kita bisa menjalankan kontainer dengan flag -P besar. Docker akan secara otomatis memetakan semua port yang terdaftar di EXPOSE ke port acak yang tersedia di komputer host kita.

    Perintah: docker run -d -P nginx

  • Dokumentasi Tim: Misal saat rekan tim melakukan docker image inspect, mereka langsung tahu port mana yang harus dipetakan tanpa perlu membaca kode sumber aplikasi kita.

4️⃣ Contoh Penggunaan​

Berikut adalah contoh lengkap Dockerfile untuk aplikasi Spring Boot, dengan instruksi EXPOSE.

  • Dockerfile:
# Menggunakan JRE Java 21 yang ringan (Runtime saja)
FROM eclipse-temurin:21-jre-alpine

# Menentukan folder tempat aplikasi akan diletakkan
WORKDIR /app

# 1. INSTRUKSI EXPOSE (Dokumentasi Port)
# Memberitahu bahwa aplikasi ini berjalan di port 8080
EXPOSE 8080

# 2. COPY (Menyalin file JAR dari laptop ke dalam image)
# Pastikan path 'target/app.jar' sesuai dengan hasil build Anda
COPY target/app.jar app.jar

# 3. CMD (Perintah untuk menjalankan aplikasi)
CMD ["java", "-jar", "app.jar"]
  • Build Image:
docker build -t spring-app-simple .
  • Run Kontainer:

Meskipun di Dockerfile tertulis EXPOSE 8080, kita tetap harus menggunakan flag -p agar bisa dibuka di browser.

docker run -d -p 8080:8080 --name running-app spring-app-simple

5️⃣ Best Practice​

  • Selalu Sertakan: Meskipun opsional, selalu tulis EXPOSE untuk membantu orang lain (dan sistem seperti Kubernetes/Cloud) memahami cara berkomunikasi dengan aplikasi kita.
  • Gunakan Port Standar: Jika aplikasi kita adalah web server, gunakan EXPOSE 80 atau 8080. Jika database, gunakan 3306 (MySQL) atau 5432 (Postgres).
  • Sinkronisasi dengan Aplikasi: Pastikan angka port di EXPOSE sama dengan angka port yang didefinisikan di dalam aplikasi kita (misal di Spring Boot server.port=8080).