All Newbie, Semua Tentang Ilmu

Recent

Cara Install Docker di Ubuntu 24.04 + Container Pertama

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.

Kapal peti kemas dilihat dari udara sebagai metafora container Docker
Foto: Wilfredor, CC BY-SA 3.0, via Wikimedia Commons

Ringkasan singkat

  • Pasang dari repositori resmi Docker, bukan paket Ubuntu.
  • Grup docker setara 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.

Lapisan Docker: host, dockerd, container, dan volumeUbuntu 24.04 (host) — kernel dibagi bersamadockerdcontainerdcontainer: webnginx:alpineport 8080:80container: dbpostgres:16volume: ./html
Diagram: Lapisan Docker: host, dockerd, container, dan volume

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:

BagianArti
-dJalan di latar belakang
--name webNama container, dipakai untuk docker logs dan docker stop
-p 8080:80Port 8080 di host diteruskan ke port 80 di container
nginx:alpineImage 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

GejalaPenyebabSolusi
permission denied /var/run/docker.sockUser belum masuk grup dockersudo usermod -aG docker $USER, logout lalu login
port is already allocatedPort host dipakai proses lainGanti port kiri, misal -p 8081:80, atau sudo ss -lptn 'sport = :8080'
Container langsung berhentiProses utama gagaldocker logs <nama>, cek konfigurasi
no space left on deviceImage lama menumpukdocker system df lalu docker system prune
Error 404 dari NginxFile tidak ada di mountCek 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.





0 comments:

Post a Comment