📑 Daftar Isi
- Kenapa Banyak yang Gagal Setup Docker di VPS
- Setup Docker di VPS: Langkah Demi Langkah
- 1. Siapkan VPS dan User Khusus
- 2. Install Docker dari Repo Resmi
- 3. Kenalan Sama Perintah Dasar Docker
- 4. Jalanin Container Pertamamu
- 5. Bikin Image Sendiri dengan Dockerfile
- 6. Docker Compose untuk Aplikasi yang Lebih Ribet
- 7. Jangan Sampai Data Hilang: Soal Volume
- 8. Security: Ini Bagian yang Paling Sering Dilewatkan
- 9. Pantau Container dan Bikin Auto-Start
- Troubleshooting: Ketika Docker Gak Jalan Mulus
- FAQ Seputar Setup Docker di VPS
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.
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.

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
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
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.

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
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
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.
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.