โ–šServer Journey

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.

buildrunrunDockerfile(resep)Image(masakan beku)Container jalan #1Container jalan #2
Dockerfile (resep) โ†’ Image (masakan beku siap pakai) โ†’ Container (porsi yang dihidupkan). Berbagi kernel host, jauh lebih ringan dari VM
  • 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 up dan semuanya hidup sesuai urutan.

Gambaran Node.js-mu jadi satu image:

Dockerfile (di ~/webapp)
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 webapp

bangun & 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.

Baca lebih lanjut