Deployment Docker Image

Deploy image Docker publik mana pun langsung tanpa perlu repository Git.

Ringkasan

Docker Image Deployment memungkinkan Anda menjalankan container yang sudah jadi dari Docker Hub atau registry publik apa pun. Alih-alih mengelola Dockerfile di Git, Anda cukup mereferensikan image dan getlaunch.dev menangani sisanya.

Ini sempurna untuk deploy aplikasi stateless seperti nginx, Node.js apps, Python services, atau image Docker publik stateless lainnya.

Registry yang Didukung

Anda dapat deploy dari sumber image Docker publik apa pun:

  • Docker Hub — official dan community images: nginx, node, python
  • Docker Hub dengan tag — versi spesifik: nginx:1.21, node:18-alpine
  • GitHub Container Registry — ghcr.io/owner/image:tag
  • Registry publik apa pun — selama image dapat diakses publik

Catatan: Registry privat dan image yang memerlukan autentikasi tidak didukung. Image Docker Anda harus dapat diakses publik.

Membuat Project

  1. Pergi ke Projects → New Project
  2. Pilih Deploy from Docker Image
  3. Isi:
    • Project name — nama deployment Anda (misal my-web-server)
    • Docker Image — referensi image (misal nginx:latest, node:18-alpine, ghcr.io/owner/repo:v1.0)
    • Port — port yang digunakan container (misal 80 untuk nginx, 3000 untuk Node.js)
    • Environment variables (opsional) — konfigurasi untuk container Anda
  4. Klik Create Project

Image akan divalidasi untuk memastikan dapat diakses publik. Jika validasi gagal, periksa kembali nama image dan pastikan tersedia di Docker Hub atau registry Anda.

Konfigurasi Port

Setiap deployment Docker image memerlukan port — port yang container dengarkan secara internal.

Contohnya:

  • nginx mendengarkan port 80
  • Node.js Express biasanya mendengarkan port 3000 atau 8080
  • Python Flask biasanya mendengarkan port 5000
# Contoh: jalankan lokal untuk menemukan port
docker run nginx # Periksa logs untuk "listening on port X"

Setelah deploy, getlaunch.dev mengekspos container Anda ke internet publik, mengarahkan traffic ke port yang Anda tentukan.

Environment Variables

Deployment Docker image mendukung environment variables untuk konfigurasi. Atur melalui pengaturan project Anda.

# Contoh untuk Node.js application
NODE_ENV=production
LOG_LEVEL=info
DATABASE_URL=postgresql://user:pass@host/db

Environment variables disuntikkan saat runtime. Perubahan mulai berlaku segera pada pemicu deployment berikutnya.

Deployment & Auto-Deploy

Project Docker image menggunakan deployment manual saja. Tidak ada fitur auto-deploy karena image tidak memiliki commit Git untuk dipicu.

Untuk deploy:

  1. Buka project Anda
  2. Klik tombol Deploy
  3. Image akan ditarik dari registry dan dijalankan di platform Anda

Setiap deployment menarik image pada saat itu. Jika ingin memaksa pembaruan:

  • Beri tag image dengan versi spesifik (nginx:1.21 alih-alih nginx)
  • Atau gunakan nginx:latest untuk selalu menarik versi terbaru pada setiap deployment

Update Image & Tags

Latest tag: Jika Anda deploy nginx atau nginx:latest, setiap deployment menarik versi terbaru.

# Selalu menarik latest
docker_image: "nginx"

# Selalu menarik versi 1.21
docker_image: "nginx:1.21"

Setelah deployment berjalan, ia tetap di image yang ditarik saat deployment. Untuk upgrade ke versi image baru:

  1. Edit pengaturan project Anda (ubah referensi image)
  2. Klik Deploy lagi

Tidak ada mekanisme update otomatis — Anda mengontrol kapan versi baru di-deploy.

Persistensi Data & Arsitektur Stateless

Docker image deployment berjalan pada arsitektur stateless mirip dengan platform serverless. Ini berarti:

Data tidak persisten:

  • Data apa pun yang disimpan di dalam container akan hilang saat Anda redeploy, update, atau restart
  • Application logs tidak disimpan
  • File yang di-upload pengguna dihapus
  • Database records (jika menggunakan SQLite atau local storage) hilang
  • Perubahan konfigurasi runtime discard

CPU hanya aktif saat menangani request:

  • Container Anda hanya menggunakan CPU saat menangani request
  • Container idle tidak menggunakan resource CPU
  • Billing berdasarkan waktu pemrosesan request yang sebenarnya, bukan uptime

Untuk aplikasi yang memerlukan data persisten:

  • Databases: Gunakan PostgreSQL, MySQL, MongoDB eksternal (hosted services)
  • File storage: Cloud storage (AWS S3, Google Cloud Storage)
  • Configuration: Simpan di environment variables atau external config services
  • Caching: Gunakan Redis eksternal atau services serupa

Contoh dengan PostgreSQL eksternal:

# Alih-alih SQLite lokal, gunakan database eksternal
DB_HOST=postgres.example.com
DB_PORT=5432
DB_NAME=myapp
DB_USER=postgres
DB_PASSWORD=secure_password

Arsitektur ini ideal untuk:

  • ✅ Web servers (nginx, Apache)
  • ✅ APIs dan microservices
  • ✅ Processing jobs dan workers
  • ❌ BUKAN untuk background tasks jangka panjang tanpa external state
  • ❌ BUKAN untuk aplikasi yang memerlukan local storage persisten

Resource Limits & Billing

Deployment Docker image adalah container dan tunduk pada resource limits dan billing yang sama seperti deployment container berbasis repository.

  • Quotas: Starter plan mencakup 2 deployment container (Docker image atau berbasis Git)
  • Billing: Pricing berbasis penggunaan di CPU, memory, dan data transfer. Lihat Pricing untuk detail
  • Scaling: Container auto-scale berdasarkan traffic. Container idle tidak ada biaya

Keterbatasan

  • Tidak ada auto-deploy: Manual trigger saja
  • Tidak ada custom Dockerfile: Deploy image yang sudah jadi saja
  • Tidak ada custom build: Image berjalan apa adanya dari registry
  • Registry publik diperlukan: Registry privat tidak didukung
  • Tidak ada Git tracking: Tidak ada commit history atau rollback ke versi Git sebelumnya (meskipun Anda dapat me-deploy tag image yang lebih lama)
  • Stateless saja: Data tidak persisten — gunakan external databases dan storage services untuk data yang persisten

Aplikasi yang Cocok

Docker image deployment bekerja terbaik untuk aplikasi stateless. Berikut contoh container yang dapat Anda deploy:

# Web servers
nginx
nginx:1.21
apache2

# Node.js applications
node:18
node:18-alpine

# Python applications
python:3.11
python:3.11-slim

# Reverse proxies & load balancing
traefik

# Static site servers
nginx:latest (serving pre-built static sites)

❌ Tidak cocok untuk:

  • Databases (PostgreSQL, MySQL, MongoDB, SQLite)
  • Caches yang memerlukan persistensi (Redis, Memcached)
  • Aplikasi yang menyimpan files secara lokal
  • Services stateful yang memerlukan data bertahan setelah restart

Troubleshooting

"Docker image not found or not public" — Image tidak ada, privat, atau tidak dapat diakses. Periksa:

  • Pengejaan dan tag nama image
  • Status registry (Docker Hub mungkin memiliki masalah sementara)
  • Jika menggunakan registry privat, beralih ke image publik

"Port X is already in use" — Port tidak valid atau dibatasi. Coba port lain (1024–65535).

Container crash segera — Image mungkin memerlukan environment variables atau mount yang Anda tidak konfigurasi. Periksa dokumentasi image dan tambahkan env vars yang diperlukan di pengaturan project Anda.

Tidak dapat terhubung setelah deployment — Verifikasi:

  • Container benar-benar mendengarkan port yang Anda tentukan
  • Firewall atau security group rules memungkinkan traffic masuk
  • Aplikasi di dalam container sedang berjalan dengan benar (periksa deployment logs)