Deploy Aplikasi Node.js dengan Docker
Salah satu skill yang paling sering dipakai sehari-hari: bungkus aplikasi Node.js sederhana ke dalam Docker image, supaya bisa jalan konsisten di komputer manapun tanpa drama "di laptop saya jalan, di server enggak". Tutorial ini fokus ke alurnya saja — dari kode polos sampai container yang jalan.
Yang Dibutuhkan
- Docker sudah terpasang
- Node.js (opsional, hanya untuk tes lokal sebelum di-docker-kan)
1. Aplikasi Sederhana
Buat file index.js berisi server Express minimal:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.json({ status: 'ok', message: 'Halo dari dalam container!' });
});
app.listen(3000, () => {
console.log('Server jalan di port 3000');
});Dan package.json-nya:
{
"name": "app-docker-demo",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"dependencies": {
"express": "^4.19.2"
}
}2. Tulis Dockerfile
Ini bagian intinya — instruksi untuk Docker membangun image dari kode di atas:
FROM node:20-alpine WORKDIR /app COPY package*.json ./ RUN npm install --production COPY . . EXPOSE 3000 CMD ["npm", "start"]
Tambahkan juga .dockerignore supaya file yang tidak perlu tidak ikut masuk ke image:
node_modules npm-debug.log .git .env
3. Build & Jalankan
docker build -t app-docker-demo . docker run -d -p 3000:3000 --name app-demo app-docker-demo
Cek apakah sudah jalan:
curl http://localhost:3000
Kalau muncul respons JSON dari server, berarti container sudah jalan dengan benar.
4. (Opsional) Pakai Docker Compose
Untuk proyek yang lebih dari satu service (misalnya app + database), docker-compose.yml lebih enak dipakai daripada perintah docker run panjang:
version: "3.8"
services:
app:
build: .
ports:
- "3000:3000"
restart: unless-stoppedJalankan dengan docker compose up -d.
Penutup
Dari sini, langkah lanjutannya biasanya: tambah .env untuk konfigurasi, sambungkan ke database lewat service terpisah di Compose, dan atur reverse proxy (Nginx) di depan container untuk domain & SSL.