Tutorial Docker dari nol untuk developer PHP/Laravel. Belajar container, compose, dan deploy ke VPS dengan workflow yang sederhana dan repeatable.
Banyak developer Indonesia masih deploy secara manual: SSH ke server, git pull, jalankan composer install, restart PHP-FPM, dan berdoa semoga tidak ada yang rusak. Proses ini berisiko tinggi, sulit direproduksi, dan membuang waktu berjam-jam ketika terjadi masalah. Docker hadir untuk menyelesaikan semua ini — dan di 2026, belajar Docker bukan lagi "nice to have", ini adalah skill wajib untuk setiap developer profesional.
Apa Itu Docker? (Penjelasan Sederhana)
Bayangkan Docker seperti kotak bento: makanan, nasi, lauk, dan sayur sudah dikemas rapi dalam satu kotak. Anda tidak perlu menyiapkan bahan dari nol — tinggal buka dan siap santap.
Dalam konteks programming: Docker mengemas aplikasi, dependencies, dan konfigurasi dalam satu "container" yang bisa jalan di mana saja — laptop Anda, server production, bahkan laptop teman yang OS-nya berbeda.
Masalah yang Diselesaikan Docker
- "Works on my machine": Aplikasi jalan di laptop tapi error di server? Dengan Docker, environment persis sama di mana saja.
- Dependency hell: Proyek A butuh PHP 8.1, proyek B butuh PHP 8.3, proyek C butuh PHP 8.0. Tanpa Docker, ini mimpi buruk. Dengan Docker, setiap proyek punya container sendiri.
- Setup yang lama: Developer baru join tim, butuh 1 hari untuk setup environment. Dengan Docker:
docker compose up— 5 menit, selesai. - Deployment yang risky: Update production bisa merusak environment. Dengan Docker, rollback cukup switch ke container image sebelumnya.
Konsep Dasar Docker
Image vs Container
Image = blueprints/resep masakan. Berisi instruksi tentang bagaimana membangun environment.
Container = masakan yang sudah jadi dari resep tersebut. Bisa dijalankan, dihentikan, dan dihapus tanpa mengubah resep aslinya.
Satu image bisa menghasilkan banyak container — sama seperti satu resep bisa dipakai masak berkali-kali.
Dockerfile
File yang berisi instruksi untuk membuat image. Contoh Dockerfile untuk aplikasi PHP/Laravel:
# Mulai dari image PHP resmi
FROM php:8.3-fpm-alpine
# Install extensions yang dibutuhkan Laravel
RUN docker-php-ext-install pdo pdo_mysql bcmath
# Install Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# Set working directory
WORKDIR /var/www/html
# Copy source code
COPY . .
# Install dependencies
RUN composer install --no-dev --optimize-autoloader
# Set permissions
RUN chown -R www-data:www-data storage bootstrap/cache
# Expose port
EXPOSE 9000
CMD ["php-fpm"]
Docker Compose
Aplikasi web biasanya butuh lebih dari 1 service: PHP, MySQL, Redis, Nginx. Docker Compose mengatur semua service ini dalam satu file konfigurasi.
# docker-compose.yml
version: '3.8'
services:
app:
build: .
volumes:
- .:/var/www/html
depends_on:
- mysql
- redis
nginx:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- .:/var/www/html
- ./docker/nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- app
mysql:
image: mysql:8.0
environment:
MYSQL_DATABASE: laravel
MYSQL_ROOT_PASSWORD: secret
volumes:
- mysql_data:/var/lib/mysql
ports:
- "3306:3306"
redis:
image: redis:alpine
ports:
- "6379:6379"
volumes:
mysql_data:
Dengan konfigurasi ini, docker compose up -d akan menjalankan 4 service sekaligus. Semua terisolasi dari sistem host Anda.
Workflow Docker untuk Development
Berikut workflow harian developer yang menggunakan Docker:
Pagi Hari: Mulai Kerja
# Start semua service
docker compose up -d
# Cek status
docker compose ps
# Lihat log jika ada error
docker compose logs -f app
Selama Development
# Masuk ke container PHP untuk jalankan artisan/composer
docker compose exec app bash
# Dalam container:
php artisan migrate
composer require package/name
php artisan tinker
# Atau langsung dari host:
docker compose exec app php artisan migrate
Sore Hari: Selesai Kerja
# Stop semua service (data database tetap aman di volume)
docker compose down
# Jika ingin hapus semua data dan mulai fresh:
docker compose down -v
Deploy Aplikasi PHP ke VPS dengan Docker
Ini adalah bagian paling berharga dari artikel ini. Berikut step-by-step deploy aplikasi PHP/Laravel/Symfony ke VPS menggunakan Docker:
Persiapan VPS
- Sewa VPS dari provider lokal (IDCloudHost, Dewaweb, Rumahweb). Minimal: 1GB RAM, 20GB SSD, Ubuntu 22.04.
- Install Docker dan Docker Compose:
# Install Docker (Ubuntu) curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh # Install Docker Compose sudo apt install docker-compose-plugin # Verifikasi docker --version docker compose version - Setup firewall:
sudo ufw allow 22/tcp # SSH sudo ufw allow 80/tcp # HTTP sudo ufw allow 443/tcp # HTTPS sudo ufw enable
Deploy Flow
- Push code ke GitHub/GitLab repository
- Di VPS, clone repository:
git clone https://github.com/your/app.git - Copy .env file:
cp .env.example .envdan edit konfigurasi production - Build dan jalankan:
docker compose -f docker-compose.prod.yml up -d --build - Jalankan migration:
docker compose exec app php artisan migrate --force
Production Docker Compose
Docker Compose untuk production berbeda dari development — tanpa volume mount, dengan build optimization:
# docker-compose.prod.yml
services:
app:
build:
context: .
dockerfile: Dockerfile.prod
restart: always
environment:
APP_ENV: production
depends_on:
- mysql
nginx:
image: nginx:alpine
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- ./docker/nginx-prod.conf:/etc/nginx/conf.d/default.conf
- ./certbot/conf:/etc/letsencrypt
depends_on:
- app
mysql:
image: mysql:8.0
restart: always
environment:
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
volumes:
- mysql_data:/var/lib/mysql
volumes:
mysql_data:
SSL Certificate dengan Let's Encrypt
Gunakan Certbot container untuk otomatis mendapatkan dan renew SSL certificate:
# Pertama kali - dapatkan certificate
docker compose run --rm certbot certonly \
--webroot -w /var/www/certbot \
-d yourdomain.com \
--email your@email.com \
--agree-tos
# Auto-renew via crontab
0 0 1 * * docker compose run --rm certbot renew
CI/CD Pipeline Sederhana
Otomasi deploy setiap kali push ke branch main menggunakan GitHub Actions:
# .github/workflows/deploy.yml
name: Deploy to VPS
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Deploy via SSH
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.VPS_HOST }}
username: ${{ secrets.VPS_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
cd /home/app
git pull origin main
docker compose -f docker-compose.prod.yml up -d --build
docker compose exec -T app php artisan migrate --force
docker compose exec -T app php artisan config:cache
Dengan pipeline ini, setiap push ke main = otomatis deploy di production. Tidak ada lagi SSH manual dan menjalankan perintah satu per satu.
Tips untuk Developer Indonesia
- Jangan skip Docker untuk development: Mulai pakai Docker untuk project lokal dulu. Setelah nyaman, baru terapkan untuk deployment.
- Image size matters: Gunakan alpine-based image (
php:8.3-fpm-alpinebukanphp:8.3-fpm). Perbedaan bisa 400MB vs 50MB — signifikan untuk VPS 20GB. - Backup volume secara berkala:
docker compose exec mysql mysqldumpdan simpan ke remote storage (Google Drive via rclone). - Monitor resource:
docker statsuntuk lihat CPU/RAM per container. Pastikan tidak melebihi kapasitas VPS. - Belajar multi-stage build: Pisahkan build stage (install dependencies, compile assets) dari runtime stage. Ini menghasilkan image yang lebih kecil dan aman.
Docker bukan teknologi masa depan — ini teknologi masa sekarang. Dengan investasi waktu 1-2 hari untuk belajar dasarnya, Anda akan menghemat ratusan jam deployment dan troubleshooting sepanjang karir Anda. Mulai hari ini: install Docker, coba docker compose up untuk project Anda, dan rasakan perbedaannya.
Ringkasan Praktis untuk 2026
Docker untuk Developer Pemula: Deploy Aplikasi PHP Tanpa Ribet penting dibaca bukan hanya sebagai tren teknologi, tetapi sebagai panduan kerja untuk bisnis yang memakai produk digital setiap hari. Fokus utamanya adalah membantu developer, technical founder, dan tim kecil yang membangun aplikasi bisnis agar stabil saat dipakai harian mengurangi deployment sulit diulang, performa tidak stabil, antrian background belum rapi, dan data tidak mudah diaudit.
Tutorial Docker dari nol untuk developer PHP/Laravel. Belajar container, compose, dan deploy ke VPS dengan workflow yang sederhana dan repeatable.
Di konteks ID TECH, topik ini selalu dikaitkan dengan hasil bisnis: aplikasi lebih mudah dipakai, support lebih ringan, data lebih aman, dan proses penjualan produk digital lebih jelas bagi calon pembeli.
Kapan Topik Ini Menjadi Prioritas?
Topik Backend & Infrastruktur sebaiknya diprioritaskan ketika tim mulai melihat tanda-tanda pekerjaan manual bertambah, data tersebar, atau pengguna mulai bergantung pada sistem untuk transaksi harian. Pada fase ini, solusi tidak cukup hanya dibuat berfungsi; solusinya harus bisa dipantau, dijelaskan, dan dipulihkan ketika ada masalah.
- Bisnis mulai menerima lebih banyak transaksi, chat, order, atau permintaan custom.
- Tim sulit mengetahui status pekerjaan karena data berada di spreadsheet, grup chat, atau catatan personal.
- Owner membutuhkan laporan yang bisa dipakai untuk keputusan, bukan sekadar arsip.
- Produk perlu bukti visual, dokumentasi, dan alur demo agar lebih mudah dijual.
- Risiko operasional mulai naik: akun bersama, backup tidak jelas, atau perubahan data tanpa audit.
Kerangka Implementasi
Mulai dari kebutuhan paling dekat dengan operasional. Jangan langsung menumpuk fitur; buat alur utama yang bisa diuji oleh pengguna sebenarnya. Setelah itu baru tambahkan otomasi, integrasi, dan dashboard.
- Petakan aktor. Tulis siapa yang memakai sistem: owner, admin, kasir, guru, staf, teknisi, pelanggan, atau reseller.
- Tentukan data inti. Pilih data yang wajib benar: transaksi, stok, jadwal, pelanggan, pembayaran, tugas, atau laporan.
- Buat alur minimum. Pastikan pengguna bisa menyelesaikan pekerjaan utama dari awal sampai selesai tanpa bantuan developer.
- Tambahkan kontrol. Siapkan role, audit log, validasi input, backup, dan notifikasi agar sistem bisa dipercaya.
- Ukur dampak. Bandingkan kondisi sebelum dan sesudah: waktu input, kesalahan data, jumlah komplain, dan kecepatan laporan.
Checklist Teknis
- version control
- Docker
- queue worker
- database migration
- observability
- backup restore drill
Kesalahan yang Sering Terjadi
Banyak proyek digital gagal bukan karena teknologinya kurang canggih, tetapi karena scope dan operasionalnya tidak disiplin. Beberapa kesalahan yang perlu dihindari:
- Membangun fitur sebelum memahami proses manual yang sedang dipakai pengguna.
- Tidak membedakan fitur wajib, fitur nice-to-have, dan layanan custom berbayar.
- Menunda dokumentasi sampai produk selesai, padahal dokumentasi membantu demo dan support sejak awal.
- Mengabaikan backup, hak akses, dan audit log ketika aplikasi mulai dipakai untuk data nyata.
- Membuat halaman produk terlalu teknis sehingga calon pembeli tidak langsung paham manfaat bisnisnya.
Indikator Keberhasilan
Supaya implementasi tidak hanya terlihat sibuk, tetapkan metrik sederhana sejak awal. Metrik ini membantu tim mengetahui apakah perubahan benar-benar menghasilkan nilai.
- deployment frequency
- error rate
- response time p95
- queue latency
- waktu restore backup
Rencana 30-60-90 Hari
30 Hari Pertama: Rapikan Fondasi
Audit workflow, pilih data utama, bersihkan duplikasi, dan pastikan ada satu sumber kebenaran. Pada fase ini, targetnya bukan membuat sistem kompleks, tetapi membuat pekerjaan harian lebih konsisten.
60 Hari: Validasi dan Otomasi
Mulai ukur bottleneck yang paling sering muncul. Tambahkan template, import/export, notifikasi, atau integrasi ringan hanya untuk pekerjaan yang sudah terbukti berulang.
90 Hari: Produkkan dan Skalakan
Jika workflow sudah stabil, dokumentasikan sebagai paket produk atau SOP. Buat halaman demo, screenshot fitur, FAQ, dan materi support agar produk lebih mudah dijual atau diimplementasikan ke cabang lain.
Hubungan dengan Produk Digital ID TECH
Produk ID TECH banyak berbasis Laravel, Symfony, Electron, dan dashboard web; kualitas backend menentukan kenyamanan demo, instalasi, dan support.
Untuk pembeli, artikel seperti ini bisa dipakai sebagai bahan diskusi sebelum checkout: fitur apa yang benar-benar dibutuhkan, paket apa yang paling sesuai, dan bagian mana yang perlu custom. Untuk tim internal, artikel ini menjadi referensi agar listing, demo, dan dokumentasi lebih konsisten.
FAQ Singkat
Apakah harus langsung memakai sistem besar?
Tidak. Mulai dari alur yang paling sering dipakai dan paling berdampak. Sistem kecil yang dipakai setiap hari lebih bernilai daripada sistem besar yang tidak pernah selesai.
Apa yang perlu disiapkan sebelum membeli atau custom software?
Siapkan contoh data, alur kerja manual, role pengguna, contoh laporan yang diinginkan, dan daftar masalah yang ingin dikurangi. Semakin konkret inputnya, semakin cepat scope bisa ditentukan.
Bagaimana cara memastikan produk digital mudah disupport?
Gunakan dokumentasi singkat, screenshot langkah penting, data demo, backup restore, serta batas jelas antara support penggunaan dan custom fitur baru.
Penutup
Docker untuk Developer Pemula: Deploy Aplikasi PHP Tanpa Ribet adalah bagian dari disiplin membangun produk digital yang bukan hanya terlihat modern, tetapi benar-benar membantu operasional. Mulai dari fondasi kecil, ukur dampaknya, lalu skalakan dengan dokumentasi dan proses support yang sehat.
Lihat katalog produk ID TECH untuk menemukan aplikasi POS, sekolah, kesehatan, HR, SaaS, dan sistem operasional yang bisa menjadi titik awal implementasi: Katalog Produk ID TECH.