Helipod bisa otomatis generate Dockerfile untuk banyak framework. Tapi ada kalanya kamu butuh kontrol penuh — custom build steps, dependency khusus, atau multi-stage build untuk optimasi.
Dockerfile custom memberikan kamu kendali penuh atas bagaimana aplikasi di-build dan dijalankan di container. Artikel ini menjelaskan cara membuat Dockerfile untuk berbagai framework di Helipod.
Kapan Perlu Dockerfile Custom?
Helipod sudah bisa auto-generate Dockerfile untuk:
- Node.js (Next.js, Express, NestJS)
- Python (Django, FastAPI, Flask)
- PHP (Laravel)
- Go
Tapi kamu butuh Dockerfile custom jika:
- Multi-stage build — ingin image lebih kecil
- Dependency khusus — butuh system package tertentu
- Build steps kustom — proses build yang tidak standar
- Monorepo — project dengan banyak service dalam satu repo
Struktur Dasar Dockerfile
# 1. Base image
FROM node:20-alpine
# 2. Working directory
WORKDIR /app
# 3. Copy dependency files
COPY package.json yarn.lock ./
# 4. Install dependencies
RUN yarn install --frozen-lockfile
# 5. Copy source code
COPY . .
# 6. Build (jika applicable)
RUN yarn build
# 7. Expose port
EXPOSE 3000
# 8. Start command
CMD ["yarn", "start"]
Contoh Dockerfile per Framework
Node.js / Next.js
FROM node:20-alpine AS builder
WORKDIR /app
COPY package.json yarn.lock ./
RUN yarn install --frozen-lockfile
COPY . .
RUN yarn build
FROM node:20-alpine AS runner
WORKDIR /app
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static
COPY --from=builder /app/public ./public
EXPOSE 3000
ENV PORT=3000
CMD ["node", "server.js"]
Untuk panduan lengkap deploy Next.js, baca: Cara Deploy Next.js ke Helipod
Python / Django
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
RUN python manage.py collectstatic --noinput
EXPOSE 8000
CMD ["gunicorn", "myproject.wsgi:application", "--bind", "0.0.0.0:8000"]
Untuk panduan lengkap deploy Django, baca: Cara Deploy Django ke Helipod
PHP / Laravel
FROM php:8.3-fpm
RUN docker-php-ext-install pdo pdo_mysql
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
WORKDIR /app
COPY . .
RUN composer install --no-dev --optimize-autoloader
EXPOSE 9000
CMD ["php-fpm"]
Untuk panduan lengkap deploy Laravel, baca: Cara Deploy Laravel ke Helipod
Go
FROM golang:1.22-alpine AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -o main .
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /app/main .
CMD ["./main"]
Multi-Stage Build
Multi-stage build memungkinkan kamu memisahkan proses build dari runtime, menghasilkan image yang lebih kecil:
# Stage 1: Build
FROM node:20-alpine AS builder
WORKDIR /app
COPY . .
RUN yarn install && yarn build
# Stage 2: Production
FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
EXPOSE 3000
CMD ["node", "dist/index.js"]
Hasil: Image production hanya berisi file yang dibutuhkan, tanpa source code dan build tools.
Tips Optimasi
1. Gunakan .dockerignore
node_modules
.git
.env
*.md
Dockerfile
docker-compose.yml
2. Cache Dependencies
Copy package.json / requirements.txt terlebih dahulu sebelum copy source code. Ini memastikan dependency hanya di-install saat file dependency berubah.
3. Gunakan Alpine Images
# ❌ Besar (~900MB)
FROM node:20
# ✅ Kecil (~170MB)
FROM node:20-alpine
4. Multi-stage Build
Pisahkan build stage dari production stage untuk image yang lebih kecil.
5. Non-Root User
FROM node:20-alpine
RUN addgroup -g 1001 -S appgroup && \
adduser -S appuser -u 1001
USER appuser
Debugging Dockerfile
Jika build gagal di Helipod:
- Cek deployment logs — error akan muncul di log build
- Jalankan Dockerfile lokal —
docker build -t app .untuk test - Periksa base image — pastikan image tersedia dan compatible
- Cek perintah — pastikan semua command bisa dijalankan di base image
Untuk panduan debugging lengkap, baca: Cara Deploy Laravel ke Helipod — bagian troubleshooting
Mulai Sekarang
Daftar gratis di helipod.io. Buat Dockerfile custom untuk aplikasi kamu dan deploy dalam hitungan menit.
Butuh bantuan? Hubungi support@helipod.id atau bergabung di komunitas hangar.helipod.io.
Baca juga:
- Environment Variables di Helipod — cara set dan mengamankan konfigurasi
- Deploy MongoDB ke Helipod — setup database NoSQL
- Monitoring dan Logs Real-time — pantau aplikasi dari dashboard