• Indonesian
  • English
  • Cara Setup Docker di VPS Ubuntu: Panduan Lengkap 2026

    Kecepatan:
    ⏱ 10 min read

    Jadi gini, kemarin-kemarin ada aja client yang nanya soal Docker. Bukan karena server-nya error, bukan pula karena down, tapi karena mereka mulai pindah dari cara klasik — install aplikasi langsung di OS — ke container. Awalnya sih aku mikir, lha, ini mah gampang. Eh, pas kutanya lebih dalam, ternyata mereka bingung mulai dari mana. Install Docker aja udah ragu-ragu, apalagi soal volume, network, sampe security. Nah, daripada jawab satu-satu lewat chat yang ujung-ujungnya kepanjangan, mending aku tulis aja di sini biar jadi referensi. Monggo, duduk santai, seduh kopi dulu, terus baca pelan-pelan.

    Gini lho cara pandang gampangnya. Coba bayangin kamu masak di dapur. Kalau gak ada container, tiap resep butuh peralatan yang nempel permanen di dapur — habis masak nasi goreng, harus nyuci wajan dulu, bersihin kompor, baru bisa masak resep lain. Dengan Docker, tiap resep bawa dapurnya sendiri-sendiri. Mau bikin sate pas lagi masak nasi goreng? Gak masalah, gak saling ganggu, gak ada wajan yang rebutan. Kurang lebih gitu cara kerja Docker: tiap aplikasi bawa lingkungannya sendiri, lengkap sama dependensi-nya. Gampang dibawa kemana-mana, gampang dihapus, dan gak ninggalin sampah berantakan di server kamu.

    Difficulty: Beginner
    Last Updated: Agustus 2026
    Tested On: Ubuntu 22.04 LTS & 24.04 LTS, VPS KVM, RAM minimal 1GB, Docker Engine 26.x

    Kenapa Banyak yang Gagal Setup Docker di VPS

    Masalahnya bukan di Dockernya. Docker Engine sendiri itu solid banget, udah dipakai jutaan server di dunia. Yang bikin gagal justru cara orang install dan pakainya. Yang paling sering kelihatan di lapangan: install lewat paket bawaan distro yang versinya jadul (Docker 18 atau 19 gitu, dari repo Ubuntu lama), gak pernah set resource limit, gak bikin user khusus, terus semua container jalan sebagai root. Dikira aman, padahal banyak lubang. Aku pernah nemu satu kasus server production yang jalannya dua puluh container tanpa limit sama sekali. Pas traffic naik dikit aja, swap langsung penuh, host nyaris nge-hang, dan yang bayar rugi ya client-nya.

    Terus, soal resource. Ini yang paling sering dilupakan. Container itu bukan magic — dia tetep pake CPU dan RAM dari host. Kalau kamu jalanin 5 container tanpa limit, itu kayak 5 proses jahil yang bisa berebut resource. Aplikasi yang tadinya enteng bisa mendadak ngerem karena tetangganya lagi makan resource gila-gilaan. Dampaknya ke production jelas: response time naik, user komplen, dan kalau udah parah, downtime. Gak heran kalau banyak orang salah nyimpulin “Docker itu boros”, padahal aslinya mereka aja yang gak ngatur.

    Nah, satu lagi yang sering banget jadi masalah: disk penuh karena log container yang numpuk. Docker itu default-nya nulis log tanpa batas ukuran file. Container yang rame bisa nulis log ratusan MB sehari, apalagi kalau aplikasinya error loop. Kalau partisi root penuh, server jadi susah banget dibenerin — banyak service nolak start, SSH kadang masih bisa tapi ya gitu deh, pelan banget. Ini kasus yang aku sendiri udah kejadian, dan percaya, itu pengalaman yang gak pengen diulang. Makanya di artikel ini, semua pitfall tadi bakal aku bahas pelan-pelan biar kamu gak ngalamin hal yang sama.

    arsitektur docker container di vps ubuntu

    Setup Docker di VPS: Langkah Demi Langkah

    Oke, sampai bagian yang ditunggu. Ikuti urutannya ya, jangan di-skip. Semua command di sini udah aku tes di Ubuntu 22.04 dan 24.04, jadi harusnya jalan mulus. Kalau kamu pakai OS lain, prinsipnya sama, tinggal sesuaikan package manager-nya.

    1. Siapkan VPS dan User Khusus

    Sebelum install apa-apa, pastikan VPS kamu udah update. Abis itu bikin user khusus buat kerjaan Docker, biar gak semua hal jalan pakai root. Soalnya kalau semua command jalan sebagai root, satu kesalahan kecil bisa efeknya gede.

    sudo apt update
    sudo apt upgrade -y
    sudo adduser deployer
    sudo usermod -aG sudo deployer
    su - deployer
    Biar aman, cek dulu sekuriti SSH kamu sebelum lanjut. Kalau belum pernah, baca artikel sekuriti SSH server di VPS dulu biar gak ada yang nyusup pas kamu sibuk setup Docker.

    2. Install Docker dari Repo Resmi

    Ini bagian yang paling sering dilewatin orang: install dari repo resmi Docker, bukan paket bawaan distro. Alasannya simpel — versi di repo resmi selalu fresh dan dapet update rutin. Jangan sekali-kali install dari paket distro kalau gak terpaksa.

    sudo apt install -y ca-certificates curl gnupg
    sudo install -m 0755 -d /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
    sudo chmod a+r /etc/apt/keyrings/docker.gpg
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    sudo apt update
    sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

    Setelah install selesai, aktifkan service-nya dan cek versinya:

    sudo systemctl enable --now docker
    sudo systemctl status docker
    docker --version
    docker compose version

    Biar kamu gak usah sudo terus-terusan pas jalanin docker, masukin user kamu ke grup docker:

    sudo usermod -aG docker $USER
    newgrp docker
    docker run hello-world
    Hati-hati: user yang ada di grup docker otomatis punya akses root ke host (lewat mounting). Jadi jangan asal nambahin user ke grup ini. Hanya user yang kamu percaya penuh.

    3. Kenalan Sama Perintah Dasar Docker

    Sebelum masuk ke bikin container, ada baiknya hafal beberapa perintah dasar dulu. Ini yang paling sering kupakai sehari-hari:

    Perintah Fungsinya
    docker ps -a Nampilin semua container, yang jalan maupun yang mati
    docker images List image yang udah kamu download
    docker logs <nama> Lihat isi log container
    docker exec -it <nama> bash Masuk ke dalam container
    docker stop <nama> Stop container
    docker rm <nama> Hapus container
    docker stats Lihat pemakaian CPU/RAM tiap container
    docker system prune -a Bersihkan image dan container yang gak kepake

    4. Jalanin Container Pertamamu

    Kita mulai dari yang gampang: Nginx. Container ini cuma buat mastiin setup kamu sehat:

    docker run -d --name webserver -p 8080:80 nginx:alpine
    docker ps
    curl http://localhost:8080

    Kalau curl balas dengan halaman HTML Nginx, berarti Docker kamu sehat. Gampang kan? Nah, dari sini kamu udah punya fondasi buat bikin container yang lebih kompleks.

    5. Bikin Image Sendiri dengan Dockerfile

    Jalanin image orang lain itu gampang. Tantangannya pas kamu mau jalanin aplikasi kamu sendiri. Nah, di situ Dockerfile berperan. Ini contoh simpel buat aplikasi Python Flask:

    FROM python:3.11-slim
    WORKDIR /app
    COPY requirements.txt .
    RUN pip install --no-cache-dir -r requirements.txt
    COPY . .
    EXPOSE 5000
    CMD ["python", "app.py"]

    Lalu build dan jalankan:

    docker build -t myapp:latest .
    docker run -d --name myapp -p 5000:5000 myapp:latest

    Intinya: FROM itu base image, WORKDIR folder kerja, COPY ngopy file, RUN jalanin perintah pas proses build, dan CMD adalah perintah yang dijalanin pas container start. Simpel, tapi ini fondasi dari semua yang bakal kamu bangun nanti.

    diagram stack docker compose nginx php mariadb di vps

    6. Docker Compose untuk Aplikasi yang Lebih Ribet

    Kalau cuma satu container, sih gampang. Tapi kalau kamu butuh web server + database + cache sekaligus, Docker Compose adalah jawabannya. Bayangin kayak resep masak lengkap: semua bahan dan langkah ditulis dalam satu file YAML.

    Contoh simpel, stack Nginx + PHP-FPM + MariaDB:

    services:
      web:
        image: nginx:alpine
        ports:
          - "80:80"
        volumes:
          - ./site:/usr/share/nginx/html
          - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
        depends_on:
          - php
      php:
        image: php:8.2-fpm
        volumes:
          - ./site:/var/www/html
      db:
        image: mariadb:11
        environment:
          MARIADB_ROOT_PASSWORD: ganti-ini
          MARIADB_DATABASE: myapp
        volumes:
          - dbdata:/var/lib/mysql
    
    volumes:
      dbdata:
    docker compose up -d
    docker compose ps
    docker compose logs -f
    Jangan taruh password asli di file compose yang ikut ke git. Pake environment variable atau Docker secrets. Password di repository itu kayak kunci rumah yang diumumin di grup WhatsApp — tinggal nunggu waktu doang.

    7. Jangan Sampai Data Hilang: Soal Volume

    Ini bagian yang gak boleh dilupain. Container itu sifatnya sementara. Kalau kamu hapus container, data yang ada di dalamnya ikut hilang. Buat data yang penting, simpan di luar container pakai volume.

    Ada dua cara: named volume dan bind mount. Named volume dikelola oleh Docker sendiri, bind mount nyambung langsung ke folder di host. Buat database, mending pakai named volume. Buat file yang mau kamu edit langsung dari host, pakai bind mount.

    docker volume create dbdata
    docker run -d --name mysql 
      -v dbdata:/var/lib/mysql 
      -e MYSQL_ROOT_PASSWORD=rahasia 
      mysql:8

    Kalau container mysql dihapus, datanya tetep aman di volume. Tinggal buat container baru yang nunjuk ke volume yang sama. Ini yang bikin “hapus container” jadi hal yang gak serem lagi.

    8. Security: Ini Bagian yang Paling Sering Dilewatkan

    Oke, sekarang bagian favoritku. Banyak orang setup Docker terus lupa ngunci pintunya. Padahal container itu bukan tembok. Kalau aplikasi di dalam container kena exploit, attacker bisa naik ke host kalau kamu gak ngelindungin diri. Beberapa hal yang wajib kamu lakuin:

    • Jalanin container sebagai user non-root sedapat mungkin, pakai opsi –user atau set USER di Dockerfile.
    • Batasi resource dengan –memory dan –cpus biar satu container gak bisa makan semua resource host.
    • Pakai –read-only buat container yang gak perlu nulis ke filesystem-nya.
    • Drop capability yang gak perlu dengan –cap-drop ALL.
    • Jangan expose port ke 0.0.0.0 kalau service-nya cuma dipakai internal. Pakai Docker network aja.
    • Batasi ukuran log container biar gak ngepenuhin disk — contoh config-nya di bawah.
    docker run -d --name app 
      --memory 256m --cpus 0.5 
      --read-only --cap-drop ALL 
      -p 127.0.0.1:8000:8000 
      myapp:latest

    Buat limitasi log, bikin file /etc/docker/daemon.json isinya gini, lalu restart Docker:

    {
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "10m",
        "max-file": "3"
      }
    }
    sudo systemctl restart docker
    Kalau kamu expose aplikasi ke publik, jangan lupa konfigurasi firewall-nya. Baca panduan firewall UFW di VPS biar port yang kebuka cuma yang perlu, bukan semuanya.

    9. Pantau Container dan Bikin Auto-Start

    Container yang jalan di VPS tetep butuh dipantau. docker stats buat cek resource secara real-time, dan kalau mau yang lebih visual, pasang monitoring. Yang gak kalah penting: pastikan container auto-restart kalau crash, plus ikut nyala pas VPS reboot.

    docker run -d --name app --restart unless-stopped myapp:latest

    Restart policy unless-stopped artinya container bakal nyala otomatis pas VPS reboot, dan restart sendiri kalau tiba-tiba crash. Buat pemantauan yang lebih enak dilihat, kamu bisa cek artikel setup monitoring Netdata di VPS. Dan jangan lupa, data container yang penting wajib di-backup — lihat cara backup VPS otomatis kalau belum ada jadwalnya.

    Troubleshooting: Ketika Docker Gak Jalan Mulus

    Gak semua jalan mulus, dan itu wajar. Ini beberapa kasus yang sering muncul beserta solusi cepatnya:

    Gejala Penyebab Umum Solusi Cepat
    docker: permission denied User belum masuk grup docker sudo usermod -aG docker $USER lalu logout dan login ulang
    bind: address already in use Port udah dipakai service lain sudo ss -tlnp | grep 80 buat cek, matikan prosesnya atau ganti port
    Container restart terus-terusan Aplikasi di dalamnya crash atau healthcheck gagal docker logs <nama> dan baca error di ujungnya
    Disk penuh padahal file kecil Image, container, dan log numpuk docker system prune -a, lalu bersihin log lama di /var/lib/docker/containers
    Host nge-hang pas container jalan Gak ada resource limit sama sekali Tambahkan –memory dan –cpus, terus restart container
    Daemon gak jalan setelah reboot Service belum di-enable sudo systemctl enable –now docker

    FAQ Seputar Setup Docker di VPS

    Q: Apakah Docker aman dipakai di VPS dengan RAM 1GB?

    Aman, asal kamu bijak. Docker Engine sendiri ringan. Yang bikin berat adalah aplikasi di dalamnya. Buat VPS 1GB, cukup jalanin 1-2 container kecil yang dikasih limit –memory. Jangan sekaligus 10 container.

    Q: Bedanya Docker sama virtual machine apa?

    Kalau VM bawa kernel sendiri dan hardware virtual, Docker pake kernel host-nya dan cuma mengisolasi proses. Hasilnya Docker jauh lebih ringan dan start-nya hitungan detik. Kalau pengen baca lebih jauh soal virtualisasi, ada artikel tentang KVM dan Proxmox di situs ini.

    Q: Kalau VPS-nya kena high load, apakah salah Docker?

    Belum tentu. Docker cuma kendaraan. Seringnya high load berasal dari aplikasi yang gak di-optimize atau container yang gak dibatasi resource-nya. Kalau mau tau cara nanganinnya, cek artikel cara mengatasi high load di VPS.

    Q: Wajibkah pakai Docker Compose?

    Gak wajib, tapi sangat disarankan kalau aplikasimu butuh lebih dari satu service. Compose bikin setup reproducible — satu file YAML, bisa dipakai ulang di server lain, termasuk pas migrasi nanti.

    Author: Syslog Solutions — NOC & Server Management Team. We handle 500+ servers daily, from shared hosting to enterprise dedicated infrastructure.

    Oke, segitu dulu untuk sekarang. Kalau kamu baru mulai, coba praktekin step di atas pelan-pelan, mulai dari install sampai jalanin container Nginx. Jangan buru-buru, nikmatin prosesnya. Dan kalau nanti nemu kendala, inget: log adalah teman terbaikmu — docker logs bakal ngasih tau semuanya. Sip, mugi bermanfaat, ya. Santai aja, bakal kelar kok.