ราคาบล็อก
ภาษา

Cara Membuat Dockerfile untuk Deploy di Helipod: Panduan dari Dasar sampai Advanced

Tim Helipod
เผยแพร่เมื่อ อ่าน 4 นาที

บทความนี้เขียนเป็นภาษาอินโดนีเซีย

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:

  1. Cek deployment logs: error akan muncul di log build
  2. Jalankan Dockerfile lokal: docker build -t app . untuk test
  3. Periksa base image: pastikan image tersedia dan compatible
  4. 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.io atau bergabung di komunitas hangar.helipod.io.

Baca juga:

Blog

บทความที่เกี่ยวข้อง

ดูทั้งหมด

พร้อมลองใช้ Helipod หรือยัง

ดีพลอยแอปของคุณได้เลยตอนนี้ ฟรี ไม่ต้องใช้บัตรเครดิต
WhatsApp