Bagian 7 โ Ringkasan & Dunia Setelah Ini ยท Langkah 34 dari 38
Docker & Containerization
Masalah 'works on my machine' dan cara image/container memecahkannya.
Masalah yang belum kamu sadari
Coba ingat setup-mu: install node + pm2, atau php + ekstensi, atau gunicorn di venv โ semuanya menempel langsung di VM, bercampur dengan sistem. Pindah server? Ulangi semua dari nol, doakan versinya sama. Versi dependensi A dan B tidak cocok? Tidak ada jaminan cepat selesai. Ini masalah konsistensi environment โ dan Docker dirancang persis untuk ini.
- Image = kemasan sekali-bangun-yang-bisa-dijalankan: OS minimal + runtime + app-mu + dependensinya. Identik di laptop, VM, atau VPS mana pun.
- Container = image yang sedang dieksekusi โ proses yang diisolasi, startup detik.
- Dockerfile = resep build image โ versi yang bisa dibaca manusia dari setup-mu.
- docker compose = deklarasikan banyak service sekaligus (app + database + nginx) dalam satu file YAML,
docker compose updan semuanya hidup sesuai urutan.
Gambaran Node.js-mu jadi satu image:
FROM node:20-alpine WORKDIR /app COPY package*.json ./ RUN npm ci --omit=dev COPY . . RUN npm run build EXPOSE 3000 CMD ["node", "server.js"]
$docker build -t webapp . && docker run -d -p 3000:3000 --name webapp webappbangun & jalankan โ tidak perlu npm install manual di server lagi
Perhatikan: konsep yang sudah kamu kuasai tidak dibuang โ container tetap butuh 'tetap hidup' (--restart unless-stopped), nginx tetap di depan, tunnel tetap sama. Docker mengganti CARA aplikasi dikemas, bukan arsitekturnya. Itulah kenapa web ini mengajar manual dulu: orang yang paham systemd/nginx lebih cepat paham Docker, bukan sebaliknya.