Apa itu Dockerfile? #
Dockerfile adalah sebuah file teks yang berisi kumpulan instruksi untuk membangun sebuah Docker Image. Docker Image inilah yang nantinya akan dijalankan menjadi Docker Container.
Dengan kata lain, Dockerfile adalah resep. Jika container adalah makanan yang siap disajikan, maka Dockerfile adalah buku resep yang menjelaskan:
- Base image apa yang digunakan
- Aplikasi apa yang di-install
- File apa yang disalin
- Perintah apa yang dijalankan
- Bagaimana aplikasi dijalankan
Dockerfile memungkinkan proses build aplikasi menjadi konsisten, otomatis, dan dapat direproduksi di mana pun.
Kenapa Dockerfile Itu Penting? #
Sebelum Docker populer, setup aplikasi sering bermasalah:
- “Di laptop saya jalan”
- Versi dependency beda-beda
- Environment development ≠ production
Dockerfile hadir untuk menyelesaikan masalah itu dengan:
Environment yang Konsisten Semua orang menjalankan aplikasi dari image yang sama
Infrastructure as Code Konfigurasi environment ditulis sebagai kode
Automation Friendly Mudah diintegrasikan ke CI/CD
Portability Bisa dijalankan di laptop, VM, cloud, Kubernetes, tanpa perubahan
Posisi Dockerfile dalam Ekosistem Docker #
Secara sederhana alurnya:
Dockerfile → Docker Image → Docker Container
Penjelasan:
- Dockerfile: Instruksi build
- Docker Image: Hasil build (immutable)
- Docker Container: Instance image yang sedang berjalan
Dockerfile tidak dijalankan langsung, tapi diproses oleh perintah:
docker build
Struktur Dasar Dockerfile #
Contoh Dockerfile sederhana:
FROM node:20-alpine
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
Docker akan membaca instruksi ini dari atas ke bawah.
Fungsi Utama Dockerfile #
1. Menentukan Base Image #
Instruksi FROM menentukan pondasi image:
FROM golang:1.22-alpine
Artinya:
- Menggunakan Linux Alpine
- Sudah ada Go ter-install
Base image sangat berpengaruh ke:
- Ukuran image
- Keamanan
- Performa startup
2. Mengatur Struktur File di Dalam Container #
Instruksi seperti WORKDIR dan COPY mengatur file system:
WORKDIR /app
COPY . .
Container punya filesystem sendiri, terisolasi dari host.
3. Meng-install Dependency #
Instruksi RUN digunakan untuk menjalankan command saat build:
RUN apt-get update && apt-get install -y curl
Perintah ini:
- Dieksekusi sekali saat build
- Hasilnya disimpan sebagai layer image
4. Mendefinisikan Cara Aplikasi Dijalankan #
Instruksi CMD atau ENTRYPOINT menentukan proses utama container:
CMD ["./app"]
Catatan penting:
- Container hidup selama proses utama ini berjalan
- Jika proses mati, container ikut mati
5. Dokumentasi yang Bisa Dieksekusi #
Dockerfile juga berfungsi sebagai:
- Dokumentasi environment
- Panduan setup aplikasi
- Standar untuk tim
Tanpa perlu README panjang, Dockerfile sering sudah cukup menjelaskan kebutuhan aplikasi.
Dockerfile vs Docker Compose #
Sering tertukar, tapi fungsinya berbeda:
| Dockerfile | Docker Compose |
|---|---|
| Membangun image | Menjalankan banyak container |
| Fokus ke satu aplikasi | Fokus ke arsitektur |
Digunakan docker build | Digunakan docker compose up |
Dockerfile wajib untuk image custom. Docker Compose opsional, tapi sangat membantu.
Layer dan Cache di Dockerfile #
Setiap instruksi Dockerfile = satu layer.
Contoh:
COPY package.json ./
RUN npm install
COPY . .
Jika source code berubah tapi package.json tidak, Docker akan:
- Reuse cache layer
npm install - Build lebih cepat
Inilah alasan urutan instruksi Dockerfile sangat penting.
Kesalahan Umum Saat Menulis Dockerfile #
- Image terlalu besar karena base image salah
- Terlalu banyak
RUNyang tidak digabung - Menyalin file sensitif (tanpa
.dockerignore) - Menjalankan aplikasi sebagai root
- Tidak memanfaatkan cache layer
Dockerfile yang buruk = build lambat + image berat + security risk.
Kapan Kita Membutuhkan Dockerfile? #
Dockerfile sangat cocok digunakan saat:
- Aplikasi akan di-deploy ke cloud
- Menggunakan CI/CD
- Tim besar dengan environment berbeda
- Microservices
- Kubernetes
Jika hanya eksperimen lokal, Dockerfile sederhana sudah sangat membantu.
Penutup #
Dockerfile adalah:
- Fondasi utama dalam Docker
- Cara mendefinisikan environment aplikasi
- Alat untuk konsistensi, automasi, dan portability
Tanpa Dockerfile:
- Tidak ada image custom
- Tidak ada deployment yang rapi
- Tidak ada standar environment
Dockerfile bukan sekadar file konfigurasi, tapi bagian penting dari arsitektur aplikasi modern.