Semua Panduan VPSHosting & cPanelTutorial LinuxDocker & DeployWordPressDomain & DNSKeamanan ServerVPS Windows & Forex
VPSHosting.ID›Cara Install Docker dan Docker Compose di VPS Ub
Docker & Deploy

Cara Install Docker dan Docker Compose di VPS Ubuntu (2026)

✍️ Dewi Lestari 📅 27 Oktober 2026 ⏱️ 7 mnt baca 👁️ 3×
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:

AspekSatu VPS per proyekSatu VPS + Docker
Jumlah tagihan bulanan3 langganan1 langganan
Konflik versi runtimeSering, harus diatur manualTerisolasi per container
Waktu menyiapkan server baruBerjam-jamHitungan menit lewat file Compose
Pindah serverInstal ulang semuanyaSalin folder proyek dan jalankan satu perintah
Overhead resourceTiga OS berjalanSatu 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.1 bila 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 db pada contoh di atas.
  • Simpan rahasia di file .env dengan 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:

  1. Tarik kode terbaru: git pull.
  2. Bangun ulang dan ganti container: docker compose up -d --build.
  3. 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.

Lihat paket VPS
Terapkan yang Anda baca langsung di VPSHosting.ID.
Kunjungi VPSHosting.ID ↗