Lewati ke isi

Server & Infrastruktur

Cara Install Docker dan Docker Compose di Ubuntu

Pasang Docker Engine dan plugin Compose dari repositori resmi di Ubuntu, atur setelah instalasi, jalankan stack pertama, dan atasi error umum.

Terbit 5 menit baca

Jawaban singkat

Hapus paket Docker tidak resmi, tambahkan repositori apt resmi Docker beserta kuncinya, lalu pasang docker-ce, docker-ce-cli, containerd.io, docker-buildx-plugin, dan docker-compose-plugin. Uji dengan hello-world, atur akses user, batasi log, lalu jalankan stack pertama dengan docker compose up -d.

Daftar isi
  1. Langkah instalasi
  2. 1. Hapus paket yang bentrok
  3. 2. Tambahkan kunci GPG
  4. 3. Tambahkan repositori
  5. 4. Pasang paket
  6. 5. Uji
  7. Pengaturan setelah instalasi
  8. Menjalankan docker tanpa sudo
  9. Membatasi ukuran log
  10. Perhatikan firewall
  11. Menjalankan stack compose pertama
  12. Error yang sering muncul
  13. Pertanyaan yang sering diajukan
  14. Checklist

Kalau kamu memasang Docker dengan apt install docker.io, perintah docker compose bisa tidak tersedia atau versinya tertinggal dari tutorial yang kamu ikuti. Penyebabnya, ada dua sumber paket Docker di Ubuntu: paket dari repositori Ubuntu sendiri dan paket dari repositori resmi Docker. Dokumentasi Docker menyarankan repositori resminya, yang sekaligus membawa plugin Compose versi baru. Langkah di bawah mengikuti dokumentasi resmi tersebut per 4 November 2026. Versi Ubuntu yang didukung menurut halaman itu: 22.04 LTS, 24.04 LTS, 26.04 LTS, dan 26.10, untuk arsitektur 64-bit. Turunan seperti Linux Mint tidak didukung resmi.

Belum terlalu paham konsep image dan container? Baca dulu apa itu Docker.

Langkah instalasi

  1. Hapus paket yang bisa bentrok. Paket tidak resmi seperti docker.io, docker-compose, podman-docker, serta containerd dan runc versi distribusi perlu disingkirkan lebih dulu. Wajar bila apt bilang paket-paket itu memang tidak terpasang.
  2. Tambahkan kunci GPG resmi Docker. Kunci ini dipakai apt untuk memastikan paket benar-benar dari Docker.
  3. Tambahkan repositori Docker dalam format deb822, lalu perbarui daftar paket.
  4. Pasang Docker Engine dan plugin-pluginnya, termasuk Compose.
  5. Uji instalasi dengan image hello-world.

Berikut perintah untuk setiap langkah.

1. Hapus paket yang bentrok

sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-compose-v2 docker-doc docker-buildx podman-docker containerd runc | cut -f1)

Image, container, dan volume lama di /var/lib/docker/ tidak ikut terhapus oleh perintah ini.

2. Tambahkan kunci GPG

sudo apt update
sudo apt install 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

sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF

sudo apt update

Bagian Suites otomatis terisi kode nama versi Ubuntu-mu, jadi perintah yang sama bisa dipakai di semua versi yang didukung.

4. Pasang paket

sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Paket terakhir, docker-compose-plugin, yang menyediakan perintah docker compose (dengan spasi). Perintah lama docker-compose (dengan tanda hubung) adalah program terpisah dan tidak dipasang di sini.

5. Uji

sudo systemctl status docker
sudo docker run hello-world
docker compose version

Bila hello-world mencetak pesan sambutan, Docker Engine sudah berjalan. Di Ubuntu dan Debian, layanan Docker otomatis aktif saat boot.

Pengaturan setelah instalasi

Menjalankan docker tanpa sudo

Tambahkan user ke grup docker:

sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker

Logout lalu login lagi agar keanggotaan grup berlaku di semua sesi.

Membatasi ukuran log

Driver log bawaan, json-file, menyimpan log container di host dan terus membesar. Buat atau edit /etc/docker/daemon.json:

{
  "log-driver": "local"
}

Driver local merotasi log secara default. Muat ulang dengan sudo systemctl restart docker. Pengaturan ini hanya berlaku untuk container yang dibuat setelahnya.

Perhatikan firewall

Dokumentasi Docker juga mencatat bahwa port container yang dipublikasikan melewati aturan ufw dan firewalld. Jadi jangan mengandalkan UFW untuk menutup port container. Publikasikan port ke 127.0.0.1 untuk layanan internal. Ini salah satu poin di kesalahan umum Docker di produksi.

Menjalankan stack compose pertama

Buat folder proyek dan file compose.yaml:

mkdir ~/web-contoh && cd ~/web-contoh

Isi compose.yaml:

services:
  web:
    image: nginx:1.30
    restart: unless-stopped
    ports:
      - "127.0.0.1:8080:80"
    volumes:
      - ./html:/usr/share/nginx/html:ro

Tag nginx:1.30 hanya contoh versi yang dikunci. Ganti dengan versi yang sesuai kebutuhanmu, asal bukan latest. Buat halaman sederhana lalu jalankan:

mkdir html && echo "Halo dari Docker" > html/index.html
docker compose up -d
docker compose ps
curl http://127.0.0.1:8080

Perintah sehari-hari yang perlu kamu ingat:

  • docker compose logs -f: melihat log.
  • docker compose down: menghentikan dan menghapus container (volume tetap ada).
  • docker compose pull && docker compose up -d: memperbarui image lalu menjalankan ulang.

Port sengaja diikat ke 127.0.0.1. Untuk membukanya ke publik dengan HTTPS, letakkan reverse proxy di depannya, seperti di cara pasang Caddy sebagai reverse proxy.

Error yang sering muncul

Pesan errorPenyebabSolusi
permission denied while trying to connect to the Docker daemon socketUser belum di grup docker atau belum login ulangJalankan langkah grup docker, lalu logout dan login
docker: 'compose' is not a docker commandPlugin Compose belum terpasangsudo apt install docker-compose-plugin
Conflicting values set for option Signed-ByAda file repositori Docker lama dengan kunci berbedaHapus file lama di /etc/apt/sources.list.d/
port is already allocatedPort host sudah dipakai proses lainGanti port host atau hentikan proses itu
permission denied pada ~/.docker/config.jsonFolder dibuat saat menjalankan docker dengan sudosudo chown "$USER":"$USER" ~/.docker -R

Pertanyaan yang sering diajukan

Apakah boleh tetap memakai paket docker.io dari Ubuntu?

Boleh, paket itu berfungsi. Hanya saja versinya mengikuti siklus Ubuntu, dan dokumentasi resmi Docker meminta paket itu dihapus sebelum memasang dari repositori Docker agar tidak bentrok.

Apa bedanya docker-compose dan docker compose?

docker-compose adalah program lama yang berdiri sendiri. docker compose adalah plugin untuk perintah docker yang dipasang lewat docker-compose-plugin. Format file compose-nya sama, dan dokumentasi terbaru memakai versi plugin.

Bagaimana cara memperbarui Docker nanti?

Karena berasal dari repositori apt, cukup sudo apt update lalu sudo apt upgrade. Container bisa berhenti sesaat ketika Docker Engine dimulai ulang saat pembaruan, dan hanya hidup lagi otomatis bila punya restart policy. Lakukan di jam sepi.

Bagaimana cara menghapus Docker sepenuhnya?

Hapus paketnya dengan apt purge untuk docker-ce dan paket terkait, lalu hapus folder /var/lib/docker dan /var/lib/containerd bila datanya memang tidak diperlukan lagi. Langkah kedua menghapus semua image, container, dan volume.

Checklist

  • Paket Docker tidak resmi sudah dihapus
  • Repositori resmi Docker dan kuncinya terpasang
  • docker run hello-world dan docker compose version berhasil
  • User pengelola masuk grup docker, tidak lebih
  • Driver log dibatasi di daemon.json
  • Port layanan internal diikat ke 127.0.0.1

Sumber & referensi

Baca juga