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:

  1. Environment yang Konsisten Semua orang menjalankan aplikasi dari image yang sama

  2. Infrastructure as Code Konfigurasi environment ditulis sebagai kode

  3. Automation Friendly Mudah diintegrasikan ke CI/CD

  4. 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:

DockerfileDocker Compose
Membangun imageMenjalankan banyak container
Fokus ke satu aplikasiFokus ke arsitektur
Digunakan docker buildDigunakan 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 #

  1. Image terlalu besar karena base image salah
  2. Terlalu banyak RUN yang tidak digabung
  3. Menyalin file sensitif (tanpa .dockerignore)
  4. Menjalankan aplikasi sebagai root
  5. 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.

About | Author | Content Scope | Editorial Policy | Privacy Policy | Disclaimer | Contact