Docker membuat aplikasi berjalan di dalam container: satu paket berisi kode, library, dan konfigurasi, sehingga tidak lagi bergantung pada kondisi sistem. Di Ubuntu 24.04, cara paling aman memasangnya adalah dari repositori resmi Docker, bukan dari paket bawaan Ubuntu yang versinya lebih tua.

Ringkasan singkat
- Pasang dari repositori resmi Docker, bukan paket Ubuntu.
- Grup
dockersetara akses root. - Port dipetakan dengan
-p 8080:80. - Batasi log sebelum disk penuh.
Panduan ini selesai dalam sekitar 10 menit dan berakhir dengan container Nginx yang bisa diakses dari browser.
1. Bersihkan paket lama
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do
sudo apt-get remove -y $pkg
done
Kalau paketnya memang belum ada, pesan unable to locate package aman diabaikan. Jangan jalankan apt autoremove pada sistem produksi tanpa memeriksa daftar paketnya.
2. Pasang prasyarat dan kunci GPG
sudo apt-get update
sudo apt-get 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
3. Tambahkan repositori resmi
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
Untuk Ubuntu 24.04, $VERSION_CODENAME bernilai noble. Cek dengan:
cat /etc/apt/sources.list.d/docker.list
4. Instal Docker Engine
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Verifikasi:
sudo docker run hello-world
Kalau muncul Hello from Docker!, instalasi berhasil.
5. Jalankan tanpa sudo
sudo usermod -aG docker $USER
Keluar dan masuk lagi (atau newgrp docker) agar grup berlaku. Perlu diketahui: anggota grup docker setara dengan akses root, jadi hanya berikan ke akun yang kamu percaya.
6. Container pertama: Nginx
docker run -d --name web -p 8080:80 nginx:alpine
docker ps
curl -I http://localhost:8080
Penjelasan singkat:
| Bagian | Arti |
|---|---|
-d | Jalan di latar belakang |
--name web | Nama container, dipakai untuk docker logs dan docker stop |
-p 8080:80 | Port 8080 di host diteruskan ke port 80 di container |
nginx:alpine | Image Nginx varian ringan |
Perintah harian yang berguna:
docker logs -f web
docker exec -it web sh
docker stop web && docker rm web
7. Docker Compose
Untuk lebih dari satu container, Compose lebih rapi. Buat file compose.yaml:
services:
web:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html:ro
restart: unless-stopped
Lalu:
mkdir -p html
echo "<h1>Halo dari Docker</h1>" > html/index.html
docker compose up -d
docker compose ps
Perubahan pada html/index.html langsung terlihat di browser karena folder di-mount ke dalam container.
8. Bersihkan ruang disk
docker system df
docker system prune -af
prune menghapus container berhenti, network tak terpakai, dan image tanpa tag. Jangan jalankan jika masih ada container yang dihentikan sementara tetapi akan dimulai lagi.
9. Memantau dan memperbarui
Dua perintah ini cukup untuk sebagian besar kebutuhan harian:
docker stats --no-stream
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
Untuk memperbarui image, tarik versi baru lalu buat ulang container. Data tetap aman selama disimpan di volume:
docker pull nginx:alpine
docker compose pull
docker compose up -d
Hindari tag latest di produksi. Tanpa versi yang dipatok, pembaruan bisa membawa perubahan yang tidak kamu uji. Gunakan tag spesifik seperti nginx:1.27-alpine, lalu naikkan versinya secara sadar.
Image lama menumpuk tanpa terlihat. Cek pemakaian lalu bersihkan yang tidak punya tag:
docker system df -v
docker image prune -a
10. Batasi ukuran log sebelum disk penuh
Driver log bawaan json-file tidak punya batas. Container yang ramai bisa menghabiskan disk dalam beberapa hari. Atur sekali di daemon:
sudo nano /etc/docker/daemon.json
{
"log-driver": "json-file",
"log-opts": { "max-size": "10m", "max-file": "3" }
}
sudo systemctl restart docker
docker inspect -f '{{.HostConfig.LogConfig}}' web
Kebijakan ini berlaku untuk container yang dibuat setelahnya. Container lama harus dibuat ulang agar ikut terbatas — perhatikan bahwa membuat ulang container akan menghapus data yang tidak berada di volume.
11. Batasi port yang terbuka
-p 8080:80 membuka port ke semua interface, termasuk IP publik VPS. Kalau container hanya dipakai bersama Nginx di host, ikat ke localhost:
docker run -d --name web -p 127.0.0.1:8080:80 nginx:alpine
Cek dari luar untuk memastikan port benar-benar tertutup:
sudo ss -lptn 'sport = :8080'
sudo ufw status
Aturan yang aman: hanya port 80/443 yang terbuka ke internet, sisanya lewat localhost atau VPN.
Masalah yang sering muncul
| Gejala | Penyebab | Solusi |
|---|---|---|
| permission denied /var/run/docker.sock | User belum masuk grup docker | sudo usermod -aG docker $USER, logout lalu login |
| port is already allocated | Port host dipakai proses lain | Ganti port kiri, misal -p 8081:80, atau sudo ss -lptn 'sport = :8080' |
| Container langsung berhenti | Proses utama gagal | docker logs <nama>, cek konfigurasi |
| no space left on device | Image lama menumpuk | docker system df lalu docker system prune |
| Error 404 dari Nginx | File tidak ada di mount | Cek path volume dan izin baca |
Pertanyaan yang sering diajukan
Apa bedanya Docker dan VirtualBox?
VirtualBox menjalankan sistem operasi penuh, butuh beberapa GB RAM dan waktu boot. Container berbagi kernel host, jadi mulai dalam hitungan detik dan jauh lebih hemat sumber daya.
Apakah data hilang saat container dihapus?
Ya, data di dalam container hilang. Karena itu gunakan volume atau bind mount untuk apa pun yang perlu disimpan.
Perlu Docker Desktop?
Tidak, untuk server cukup Docker Engine seperti di panduan ini.
Apakah aman untuk produksi?
Bisa, dengan syarat: image dari sumber tepercaya, container dijalankan tanpa hak istimewa tambahan, dan port yang dibuka dibatasi firewall.
Langkah berikutnya
Kalau Ubuntu Server-nya belum ada, mulai dari panduan instalasi Ubuntu Server. Setelah Docker berjalan, biasakan diri dengan perintah dasar transfer file — atau langsung pakai docker cp untuk menyalin file ke container.
Baca juga:
0 comments:
Post a Comment