料金ブログ
言語

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