Cara Install Docker dan Docker Compose di VPS Ubuntu (2026)
Banyak orang mengenal Docker sebagai alat untuk membungkus aplikasi. Definisi itu benar, tetapi kurang berguna bagi dompet Anda. Cara pandang yang lebih praktis: Docker adalah cara menyewa satu server lalu memakainya seperti lima server, tanpa membayar lima kali.
Bayangkan satu rumah dua lantai yang disekat menjadi beberapa kamar kos. Penghuninya tidak saling mengganggu dan masing-masing punya kunci sendiri, tetapi tagihan listrik dan PBB-nya tetap satu. Container bekerja dengan logika yang sama. Blog WordPress klien, bot n8n, dan API Node.js bisa tinggal di satu VPS tanpa bentrok versi PHP, Node, atau database.
Artikel ini membahas instalasi Docker Engine dan Docker Compose di Ubuntu, dilanjutkan contoh aplikasi nyata dan beberapa kebiasaan agar satu VPS tetap lega.
Kenapa Docker Membuat Satu VPS Terasa Lebih Murah
Tanpa Docker, tiap proyek biasanya menuntut lingkungan sendiri. Proyek A butuh Node 18, proyek B butuh Node 22, proyek C butuh PHP 8.3 dengan ekstensi tertentu. Solusi paling gampang adalah menyewa VPS terpisah, dan di situlah biaya membengkak diam-diam.
Dengan Docker, setiap aplikasi membawa lingkungannya sendiri di dalam image. Server induk cukup bersih, hanya berisi Docker. Berikut perbandingan kasarnya untuk tiga proyek kecil:
| Aspek | Satu VPS per proyek | Satu VPS + Docker |
|---|---|---|
| Jumlah tagihan bulanan | 3 langganan | 1 langganan |
| Konflik versi runtime | Sering, harus diatur manual | Terisolasi per container |
| Waktu menyiapkan server baru | Berjam-jam | Hitungan menit lewat file Compose |
| Pindah server | Instal ulang semuanya | Salin folder proyek dan jalankan satu perintah |
| Overhead resource | Tiga OS berjalan | Satu OS, container ringan |
Artinya, Docker memotong biaya sekaligus waktu. Tetapi ada syaratnya: Anda harus disiplin membatasi memori dan membersihkan sisa image. Kita bahas di bagian akhir.
Persiapan Sebelum Install di VPS Ubuntu
Pakai Ubuntu LTS, misalnya 22.04 atau 24.04, karena dukungan paketnya paling stabil. Jika Anda belum punya server, vps ubuntu dengan lokasi Jakarta cocok untuk melayani pengguna di Indonesia dengan latensi rendah. Untuk pilihan paket dan harga terkini, lihat vpshosting.id/harga.
Masuk lewat SSH, lalu lakukan tiga hal dasar: perbarui paket, buat user non-root, dan aktifkan firewall.
# Perbarui indeks paket dan sistem
sudo apt update && sudo apt upgrade -y
# Buat user khusus deploy (ganti 'deploy' sesuai selera)
sudo adduser deploy
sudo usermod -aG sudo deploy
# Aktifkan firewall: izinkan SSH, HTTP, HTTPS saja
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
Jika ada sisa instalasi lama dari repositori bawaan Ubuntu, hapus dulu agar tidak bentrok:
sudo apt remove -y docker.io docker-compose docker-doc podman-docker containerd runc
Install Docker Engine dari Repositori Resmi
Paket docker.io di repositori Ubuntu sering tertinggal versinya. Pakai repositori resmi Docker supaya mendapat pembaruan keamanan lebih cepat. Langkahnya:
# 1. Siapkan dependensi dan kunci GPG resmi Docker
sudo apt install -y ca-certificates curl
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
# 2. Daftarkan repositori (format deb822)
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo $VERSION_CODENAME)
Components: stable
Signed-By: /etc/apt/keyrings/docker.asc
EOF
# 3. Install Docker Engine, CLI, Buildx, dan plugin Compose
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Setelah selesai, uji dengan container paling sederhana:
sudo docker run hello-world
Jika muncul pesan sambutan dari Docker, instalasi berhasil. Agar tidak mengetik sudo setiap kali, masukkan user Anda ke grup docker, lalu login ulang:
sudo usermod -aG docker $USER
# Keluar lalu masuk lagi lewat SSH, kemudian cek:
docker ps
Poin Penting: anggota grup docker pada dasarnya setara root di server. Jangan masukkan user yang tidak Anda percaya ke grup ini.
Docker Compose: Satu File untuk Seluruh Stack
Docker Compose sudah terpasang sebagai plugin pada langkah sebelumnya. Perhatikan penulisannya: sekarang docker compose (dengan spasi), bukan docker-compose versi lama. Cek versinya:
docker compose version
Mengapa Compose penting bagi urusan biaya? Karena ia membuat seluruh konfigurasi tertulis dan bisa diulang. Server rusak atau Anda ingin pindah ke paket lain? Salin folder proyek, jalankan satu perintah, selesai. Tidak ada lagi catatan manual yang tercecer di kepala.
Contoh Nyata: Aplikasi Node.js dengan PostgreSQL
Kita siapkan stack sederhana: API Node.js yang terhubung ke PostgreSQL. Buat folder ~/api-demo, lalu isi dengan tiga berkas.
1. Dockerfile
# Image dasar ringan berbasis Alpine
FROM node:22-alpine
WORKDIR /app
# Salin package.json lebih dulu agar layer dependensi bisa di-cache
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
# Jalankan sebagai user non-root demi keamanan
USER node
EXPOSE 3000
CMD ["node", "server.js"]
2. File .env
# Jangan commit file ini ke Git
DB_PASSWORD=ganti-dengan-sandi-acak-yang-panjang
3. compose.yaml
services:
app:
build: .
restart: unless-stopped
ports:
# Hanya bisa diakses dari server itu sendiri (untuk reverse proxy)
- '127.0.0.1:3000:3000'
environment:
DATABASE_URL: postgres://appuser:${DB_PASSWORD}@db:5432/appdb
depends_on:
db:
condition: service_healthy
mem_limit: 256m
db:
image: postgres:17-alpine
restart: unless-stopped
environment:
POSTGRES_USER: appuser
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: appdb
volumes:
# Volume bernama: data tetap aman saat container dibuat ulang
- db_data:/var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U appuser -d appdb']
interval: 10s
timeout: 5s
retries: 5
mem_limit: 384m
volumes:
db_data:
Jalankan dan pantau:
docker compose up -d --build # build image lalu jalankan di latar belakang
docker compose ps # lihat status service
docker compose logs -f app # ikuti log aplikasi
Ada tiga keputusan kecil di file itu yang berdampak besar. Pertama, port dibatasi ke 127.0.0.1 sehingga aplikasi tidak langsung terbuka ke internet. Kedua, healthcheck memastikan aplikasi baru start setelah database benar-benar siap, bukan sekadar container-nya menyala. Ketiga, mem_limit mencegah satu service rakus memori menjatuhkan seluruh server.
Jebakan Keamanan yang Sering Terlewat
Ini yang paling sering membuat pemula kaget: Docker menulis aturan iptables sendiri, sehingga port yang Anda publikasikan bisa menembus UFW. Anda sudah menutup port 5432 di UFW, tetapi database tetap bisa diakses dari luar karena Compose memetakan 5432:5432. Menyebalkan, bukan?
Solusinya sederhana dan konsisten:
- Publikasikan port hanya ke
127.0.0.1bila layanan itu akan diakses lewat reverse proxy seperti Nginx atau Caddy. - Untuk database dan cache, jangan publikasikan port sama sekali. Antar container cukup berkomunikasi lewat nama service di jaringan internal Compose, seperti
dbpada contoh di atas. - Simpan rahasia di file
.envdengan izin ketat (chmod 600 .env), jangan tulis langsung di compose.yaml. - Gunakan tag image yang spesifik, hindari
latest, agar pembaruan tidak datang tiba-tiba dan merusak aplikasi.
Menjaga Satu VPS Tetap Lega: Log, Disk, dan Memori
Container yang berjalan berbulan-bulan menimbulkan dua masalah klasik: log yang menggunung dan image lama yang menumpuk. Keduanya bisa menghabiskan disk tanpa Anda sadari.
Batasi ukuran log untuk semua container lewat berkas /etc/docker/daemon.json:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
sudo systemctl restart docker # terapkan konfigurasi (container perlu dibuat ulang)
Lalu bersihkan sisa yang tidak terpakai secara berkala:
docker system df # lihat pemakaian disk oleh Docker
docker image prune -a --filter 'until=168h' # hapus image tak terpakai lebih dari 7 hari
Untuk memori, biasakan memantau dengan docker stats. Misalnya total tiga proyek Anda memakai sekitar 1,2 GB saat sibuk. Angka seperti itu membantu menentukan apakah paket VPS sekarang masih cukup atau perlu naik. Keputusan naik paket jadi berbasis data, bukan tebakan. Detail paket dan harga terbaru dapat dicek di vpshosting.id/harga atau langsung di panel my.vpshosting.id.
Satu catatan tentang pembagian tugas: Docker di atas adalah ekosistem Linux. Bila Anda trader yang butuh MetaTrader berjalan 24 jam, itu wilayah vps windows dengan akses RDP. Memisahkan keduanya justru lebih rapi: server Linux untuk aplikasi dan bot, server Windows khusus platform trading.
Alur Update Aplikasi yang Aman dan Murah
Setelah semuanya jalan, rutinitas pembaruan cukup tiga baris. Biasakan mencatatnya agar tidak ada langkah yang terlewat:
- Tarik kode terbaru:
git pull. - Bangun ulang dan ganti container:
docker compose up -d --build. - Periksa log beberapa menit:
docker compose logs --tail 50 app.
Sebelum update besar, cadangkan volume database. Cara paling gampang adalah dump lewat container:
# Backup database ke file SQL bertanggal
docker compose exec -T db pg_dump -U appuser appdb > backup-$(date +%F).sql
Simpan hasilnya di luar server, misalnya di penyimpanan lain atau komputer lokal. Backup yang berada di VPS yang sama bukan backup, hanya salinan yang akan ikut hilang bila server bermasalah.
Poin Penting: hemat dengan Docker bukan sekadar muat banyak aplikasi di satu server. Hematnya datang dari tiga kebiasaan: batasi memori tiap service, rotasi log, dan simpan seluruh konfigurasi di file Compose yang bisa dipindahkan kapan saja.
Langkah Berikutnya Setelah Docker Berjalan
Dengan fondasi ini, Anda bisa menambah layanan lain ke file Compose yang sama: Nginx sebagai reverse proxy dengan SSL, n8n untuk otomasi, atau WordPress untuk klien. Pola kerjanya tetap: satu folder per proyek, satu compose.yaml, satu .env.
Jika Anda masih menimbang apakah kebutuhan Anda lebih cocok di VPS atau hosting biasa, aturan praktisnya begini. Situs WordPress tunggal dengan trafik ringan biasanya cukup di hosting. Begitu Anda perlu versi runtime tertentu, beberapa aplikasi sekaligus, atau kontrol penuh atas server, VPS dengan Docker memberi ruang gerak yang jauh lebih besar untuk setiap rupiah yang Anda belanjakan.
Mulailah dari satu proyek kecil, biasakan alurnya, lalu tambahkan layanan satu per satu. Pilihan paket VPS yang sesuai dapat Anda lihat di vpshosting.id/harga, dan seluruh layanan Anda bisa dikelola dari my.vpshosting.id.



