Buat kamu yang baru pertama kali mendengar istilah Docker dan langsung membayangkan sesuatu yang rumit: tenang, konsep intinya sederhana. Docker itu seperti kotak kemasan standar — aplikasi kamu, lengkap dengan semua dependensinya, dibungkus ke dalam satu unit bernama container yang bisa dijalankan di mana saja: di laptop, di VPS, atau di server produksi, dengan hasil yang sama persis.
Artikel ini khusus untuk pemula — dimulai dari nol tanpa asumsi pengetahuan sebelumnya. Kamu akan belajar apa itu Docker, cara menginstal Docker Engine di Ubuntu, membuat Dockerfile dan docker-compose.yml pertama, lalu men-deploy aplikasi ke VPS dengan Nginx sebagai reverse proxy dan sertifikat HTTPS gratis dari Let's Encrypt. Versi software yang disebut mengacu pada rilis 2026 dan diverifikasi dari dokumentasi resmi.
Apa itu Docker dan kenapa penting untuk pemula?
Tanpa Docker, masalah klasik "jalan di laptop-ku, kok error di server" adalah mimpi buruk yang nyata: aplikasi yang berjalan mulus di mesin development tiba-tiba gagal di server karena versi Node.js beda, library hilang, atau konfigurasi sistem tidak sama. Docker menghilangkan kelas masalah ini dengan mengemas aplikasi beserta environment-nya dalam satu image.
Pembeda utama container dibanding virtual machine (VM): container berbagi kernel OS dengan host, sedangkan setiap VM menjalankan OS-nya sendiri. Itulah kenapa container jauh lebih ringan dan start dalam hitungan detik.
| Aspek | Container (Docker) | Virtual Machine |
|---|---|---|
| OS | Berbagi kernel host | OS penuh per VM |
| Ukuran image | Megabyte | Gigabyte |
| Waktu start | Detik | Menit |
| Pemakaian RAM | Ringan | Boros |
| Isolasi | Cukup untuk satu aplikasi | Penuh |
Untuk skala VPS murah dengan RAM terbatas, Docker memungkinkan menjalankan beberapa aplikasi di satu server tanpa perlu beberapa VM — hemat biaya dan mudah dikelola.
Instalasi Docker Engine di Ubuntu (rilis 2026)
Rilis stabil Docker Engine saat artikel ini ditulis adalah seri 29.x (2026). Docker mendukung Ubuntu LTS secara native, termasuk Ubuntu 26.04 LTS (Resolute Raccoon) yang rilis April 2026 — tidak perlu kompilasi manual atau PPA pihak ketiga. Langkah di bawah memakai Ubuntu 24.04 LTS, versi yang paling umum dipakai di VPS.
# 1. Paket pendukung
sudo apt update
sudo apt install -y ca-certificates curl
# 2. GPG key resmi Docker
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# 3. Repository resmi Docker (codename diambil otomatis dari OS)
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | sudo tee /etc/apt/sources.list.d/docker.list >/dev/null
# 4. Install Docker Engine, containerd, dan plugin compose
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 5. Verifikasi
sudo docker --version
sudo docker run hello-world
Alternatif cepat: paket bawaan Ubuntu docker.io — versinya sedikit lebih lama dari rilis resmi, tapi langsung bisa dipakai dengan sudo apt install docker.io. Untuk mengikuti pembaruan terbaru dan fitur compose bawaan, repositori resmi Docker lebih disarankan.
Image, Container, dan Dockerfile — tiga konsep kunci
Ada tiga istilah yang wajib dipahami sejak awal:
- Image — cetak biru (blueprint) aplikasi: sistem file, kode, dependensi, dan perintah yang akan dijalankan. Image bersifat read-only.
- Container — instance berjalan dari sebuah image. Kamu bisa membuat banyak container dari satu image, masing-masing terisolasi.
- Dockerfile — file teks berisi instruksi untuk membangun image.
Image didistribusikan lewat registry — yang paling terkenal adalah Docker Hub. Base image seperti node:24-alpine atau nginx:alpine tinggal di-pull, lalu kamu menambahkan lapisan aplikasi di atasnya.
Dockerfile pertama: aplikasi Node.js 24 LTS
Versi Node.js dengan status Active LTS pada 2026 adalah Node.js 24 (codename Krypton); versi 22 (Jod) sudah masuk fase maintenance. Untuk aplikasi baru, gunakan base image Node 24 LTS. Contoh Dockerfile minimal untuk aplikasi Express:
FROM node:24-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install --omit=dev
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
Bangun image, lalu jalankan containernya:
docker build -t aplikasi-pertama .
docker run -d -p 3000:3000 --name app1 aplikasi-pertama
curl http://localhost:3000
Penjelasan singkat: -d menjalankan container di background, -p 3000:3000 memetakan port 3000 host ke port 3000 container, dan --name memberi nama agar mudah dikelola. Untuk melihat log dan menghentikan container: docker logs app1 dan docker stop app1.
docker-compose.yml: banyak service, satu perintah
Ketika aplikasi butuh lebih dari satu service (misalnya web + database), menulis perintah docker run berulang-ulang jadi rawan salah. Docker Compose menyelesaikannya dengan mendefinisikan semua service dalam satu file YAML:
services:
web:
build: .
ports:
- "3000:3000"
depends_on:
- db
db:
image: postgres:17
environment:
POSTGRES_PASSWORD: ganti-dengan-password
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
Jalankan semuanya dengan satu perintah:
docker compose up -d
docker compose ps
docker compose logs -f web
volumes memastikan data database tetap tersimpan meskipun container dihapus — tanpa volume, data hilang saat container di-rm.
Deploy ke VPS: Nginx sebagai reverse proxy
Container yang jalan di port 3000 tidak langsung bisa diakses publik dengan rapi — butuh reverse proxy. Nginx duduk di depan aplikasi, menerima request dari port 80/443 dan meneruskannya ke container. Ini memungkinkan satu VPS melayani banyak aplikasi, plus terminasi TLS dan cache file statis.
sudo apt update
sudo apt install -y nginx
sudo systemctl enable --now nginx
Buat konfigurasi site untuk domain kamu:
sudo tee /etc/nginx/sites-available/aplikasi-kamu >/dev/null <<'EOF'
server {
listen 80;
server_name contoh.domain.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
EOF
sudo ln -s /etc/nginx/sites-available/aplikasi-kamu /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Jangan lupa arahkan DNS domain kamu ke IP VPS (record A) sebelum lanjut ke langkah HTTPS.
HTTPS gratis dengan Let's Encrypt + Certbot
HTTP polos membuat data (termasuk password login) dikirim tanpa enkripsi. Let's Encrypt menyediakan sertifikat SSL/TLS gratis yang dipercaya browser, dan Certbot mengurus penerbitan serta perpanjangan otomatisnya. Versi Certbot yang berlaku saat artikel ini ditulis adalah 5.6.0.
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d contoh.domain.com
Ikuti wizard-nya, pilih opsi redirect HTTP ke HTTPS, dan selesai — Nginx langsung dikonfigurasi otomatis oleh plugin --nginx. Sertifikat Let's Encrypt berlaku 90 hari dan diperpanjang otomatis lewat timer bawaan Certbot; uji dulu dengan:
sudo certbot renew --dry-run
Troubleshooting umum untuk pemula
- Error "port is already allocated" — port host sudah dipakai proses lain. Ganti port host (
-p 3001:3000) atau matikan proses yang menempatinya. - Image terlalu besar — pakai base image ringan seperti
alpine, dan gunakan multi-stage build agar binary build tidak ikut tersalin ke image final. - Container langsung berhenti — aplikasi di dalamnya crash. Cek penyebabnya dengan
docker logs nama-container. - Perubahan kode tidak muncul — image tidak otomatis ter-rebuild. Jalankan
docker compose up -d --buildsetelah mengubah kode. - Container tidak bisa akses internet — pastikan container dijalankan dengan network default bridge dan DNS host berfungsi.
Ekspektasi vs Realita
| Ekspektasi | Realita |
|---|---|
| Docker cuma untuk developer senior | Konsep dasarnya bisa dipelajari dalam satu sore — mulai dari hello-world lalu naik bertahap |
| Docker = VM yang lebih ringan | Container berbagi kernel host; isolasinya cukup untuk satu aplikasi, bukan pengganti VM untuk isolasi penuh |
| Sekali build, selamanya jalan | Image perlu di-rebuild setiap kode berubah, dan container butuh volume agar data tidak hilang |
| HTTPS itu mahal dan ribet | Let's Encrypt gratis dan Certbot mengotomatiskan semuanya — termasuk perpanjangan |
Sumber & Validasi
Fakta dalam artikel ini diverifikasi dari sumber resmi pada 3 Agustus 2026:
- docs.docker.com — panduan instalasi Docker Engine di Ubuntu
- github.com/nodejs/Release — jadwal rilis & status LTS Node.js
- github.com/nodejs/docker-node — base image Node.js resmi
- github.com/certbot/certbot — rilis Certbot
- letsencrypt.org — dokumentasi resmi Let's Encrypt
Nomor versi (Docker 29.x, Node.js 24 LTS, Certbot 5.6.0) bisa berubah — cek halaman sumber untuk rilis terbaru.
Penutup
Mulai dari langkah paling kecil: install Docker, jalankan hello-world, buat Dockerfile untuk satu aplikasi sederhana, lalu naik ke docker-compose dan reverse proxy. Setiap tahap memberi pemahaman yang menumpuk — dan dalam beberapa hari, deploy aplikasi ke VPS bukan lagi hal yang menakutkan.
Panduan ini bagian dari seri persiapan server: setelah container jalan, jangan lupa hardening SSH server Ubuntu dan konfigurasi firewall UFW + Fail2ban. Untuk memahami cara kerja Docker lebih dalam, baca penjelasan Docker untuk developer. Kalau aplikasimu berupa situs statis, deploy static site dengan Nginx HTTP/3 adalah jalur yang lebih ringan. Jangan lupa pasang backup otomatis dengan restic sebelum data berharga masuk.
Belum punya VPS? Baca perbandingan RackNerd vs IDCloudHost untuk VPS murah dan panduan memilih VPS murah untuk developer — atau langsung cek penawaran RackNerd lewat link ini.
Langkah selanjutnya: amankan server yang baru kamu deploy dengan hardening SSH server Ubuntu, pasang backup VPS otomatis dengan restic supaya data tidak hilang, dan pertimbangkan VPS murah untuk developer Indonesia kalau mau pindah provider.
💬 Komentar (0)
Belum ada komentar. Jadilah yang pertama! 💬