RDP Monster

Instal Docker di VPS Ubuntu 24.04/22.04: Cara Resmi

Instal Docker di VPS Ubuntu 24.04/22.04: Cara Resmi

Sebelum mulai: VPS KVM, Ubuntu yang didukung, dan pengguna sudo

Docker Engine tidak membawa kernel sendiri. Setiap kontainer berbagi kernel host dan bergantung pada namespaces, cgroups, serta netfilter Linux, sehingga daemon-nya butuh VPS tempat Anda memiliki kernel. Itulah yang diberikan VPS KVM (virtualisasi penuh). Pada paket berbasis kontainer di atas OpenVZ atau LXC, kernel dimiliki penyedia dan Docker menolak berjalan atau hanya berfungsi bila host mengaktifkan nesting. Periksa sebelum menginstal apa pun:

systemd-detect-virt                          # expect: kvm
. /etc/os-release && echo "$VERSION_CODENAME"   # noble (24.04) or jammy (22.04)
uname -m                                     # x86_64 or aarch64

Docker menyediakan paket untuk Ubuntu 24.04 LTS (noble) dan 22.04 LTS (jammy) 64-bit, pada x86_64 dan arm64. Anda juga perlu pengguna dengan hak sudo; bagian grup docker dan mode rootless di bawah mengasumsikan akun biasa, bukan root.

Instal Docker Engine dari repositori apt resmi

Ada empat cara umum menginstal Docker di Ubuntu, dan hanya satu yang didokumentasikan serta didukung Docker untuk server:

MetodePaketPenilaian
Repositori apt Dockerdocker-ce dari download.docker.comDirekomendasikan: rilis terbaru, pembaruan lewat apt upgrade, plugin Compose dan Buildx sudah termasuk.
Universe Ubuntudocker.ioBerfungsi, tetapi build milik Ubuntu tertinggal dari upstream dan tanpa plugin.
Snapsnap install dockerInstalasi terkurung dengan jalur sendiri; sering memicu kejutan "permission denied". Hindari di server.
Skrip praktisget.docker.comPaket yang sama, tetapi disalurkan tanpa ditinjau ke shell root. Hanya untuk mesin sekali pakai.

Langkah 1: hapus paket yang berkonflik

Jika image VPS sudah memuat docker.io milik Ubuntu, docker-compose lama, atau podman-docker, hapus semuanya agar kedua build tidak berebut /usr/bin/docker. Perulangan ini berasal dari dokumentasi Docker dan aman pada sistem bersih; ia tidak menyentuh /var/lib/docker:

for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do
  sudo apt-get remove $pkg
done

Langkah 2: tambahkan kunci GPG dan sumber apt Docker

Kunci ditempatkan di /etc/apt/keyrings/ dan dirujuk dengan signed-by=, sehingga cakupannya terbatas pada satu repositori ini, bukan dipercaya secara global lewat apt-key yang sudah usang. Codename dibaca dari /etc/os-release, jadi blok yang sama berjalan di 24.04 dan 22.04:

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

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update

Galat tanda tangan pada apt-get update terakhir hampir selalu berarti berkas kunci tidak terbaca; jalankan ulang baris chmod.

Langkah 3: instal engine dan plugin-nya

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

docker-ce adalah daemon, docker-ce-cli kliennya, containerd.io runtime di bawahnya, dan kedua plugin menyediakan docker buildx serta docker compose. Di Ubuntu, skrip pasca-instalasi paket langsung menjalankan docker.service dan mengaktifkannya saat boot.

Langkah 4: verifikasi dengan hello-world

sudo docker run hello-world
docker --version
sudo docker info | head -n 20

hello-world adalah uji yang menentukan: klien berbicara dengan daemon, daemon menarik image kecil dari Docker Hub, membuat kontainer, menjalankannya, dan mengalirkan keluarannya kembali. Jika muncul "Hello from Docker!", semua lapisan berfungsi. Pada instalasi 24.04 atau 22.04 yang sehat, docker info melaporkan Storage Driver: overlay2 dan Cgroup Version: 2.

Menjalankan Docker tanpa sudo: grup docker

Daemon mendengarkan pada soket Unix /var/run/docker.sock, milik root:docker, sehingga anggota grup docker dapat memakai CLI tanpa sudo:

sudo groupadd docker          # usually exists already; harmless if it does
sudo usermod -aG docker $USER
newgrp docker                 # or log out and back in
docker run hello-world

Pahami apa yang baru saja Anda berikan. Siapa pun yang bisa mengakses soket itu dapat menjalankan docker run -v /:/host --privileged ... dan membaca atau menulis ulang berkas apa pun di VPS, sehingga keanggotaan grup docker setara dengan root, tanpa permintaan kata sandi dan tanpa catatan log sudo. Perlakukan persis seperti akses sudo; panduan kami tentang berpindah pengguna dan eskalasi hak akses di Ubuntu menjelaskan mengapa perbedaan itu penting pada mesin multi-pengguna.

Plugin Docker Compose

Paket docker-compose-plugin menyediakan Compose v2 sebagai subperintah docker compose (dengan spasi). Biner Python docker-compose yang lama sudah berakhir masa dukungannya dan sebaiknya tidak dipasang berdampingan. Periksa versinya, lalu uji dengan compose.yaml minimal:

docker compose version

mkdir -p ~/web && cd ~/web
cat > compose.yaml <<'EOF'
services:
  web:
    image: nginx:alpine
    ports:
      - "127.0.0.1:8080:80"
    restart: unless-stopped
EOF

docker compose up -d
docker compose ps
curl -I http://127.0.0.1:8080
docker compose down

Dua detail sengaja dipilih: restart: unless-stopped mengembalikan kontainer setelah reboot, dan port diikat ke 127.0.0.1 alih-alih semua antarmuka, dengan alasan yang dijelaskan pada bagian firewall.

Mode rootless: daemon yang bukan root

Mode rootless menjalankan daemon dan kontainer di dalam user namespace, sehingga pelarian kontainer berakhir di akun tanpa hak istimewa, bukan root. Ini pilihan tepat bila beberapa orang berbagi satu VPS. Prasyaratnya adalah rentang UID/GID subordinat (Ubuntu membuatnya untuk pengguna biasa di /etc/subuid dan /etc/subgid), alat uidmap, sesi D-Bus pengguna, dan paket tambahan rootless dari Docker:

sudo apt-get install -y uidmap dbus-user-session docker-ce-rootless-extras
grep "^$USER:" /etc/subuid /etc/subgid   # each should show a range of 65536 IDs

# optional: stop the system-wide daemon if you only want rootless
sudo systemctl disable --now docker.service docker.socket

dockerd-rootless-setuptool.sh install

Alat penyiapan membuat unit systemd per pengguna dan menampilkan dua variabel yang dibutuhkan shell Anda. Tambahkan ke ~/.bashrc, lalu buat daemon pengguna berjalan saat boot tanpa perlu login:

export PATH=/usr/bin:$PATH
export DOCKER_HOST=unix:///run/user/$(id -u)/docker.sock

systemctl --user enable docker
sudo loginctl enable-linger $(whoami)

Mode rootless punya batasan nyata: port di bawah 1024 tidak bisa dipublikasikan kecuali Anda menjalankan sudo setcap cap_net_bind_service=ep $(which rootlesskit) lalu me-restart daemon pengguna, jaringan overlay tidak tersedia, dan data disimpan di ~/.local/share/docker. Di Ubuntu 24.04, AppArmor membatasi user namespace tanpa hak istimewa; paket deb menyertakan profil yang dibutuhkan rootlesskit, tetapi instalasi biner statis mengharuskan Anda menambahkannya secara manual seperti dijelaskan pada dokumentasi rootless.

Perilaku saat boot, penyimpanan, dan rotasi log

Dua hal terpisah menentukan apakah kontainer Anda hidup setelah reboot: daemon harus diaktifkan, dan setiap kontainer harus punya kebijakan restart. Paket Ubuntu sudah mengaktifkan layanannya; pastikan hal itu, dan jika status unit terasa asing, referensi kami tentang menampilkan daftar layanan dengan systemctl menjelaskan setiap kolomnya:

systemctl is-enabled docker.service containerd.service
sudo systemctl enable docker.service containerd.service   # only if the line above said disabled

Kontainer yang dijalankan tanpa --restart tetap mati setelah reboot; gunakan --restart unless-stopped di baris perintah atau restart: unless-stopped di Compose untuk apa pun yang permanen.

Semua yang disimpan Docker (lapisan image, filesystem kontainer, volume, log) berada di /var/lib/docker, dan pada VPS kecil direktori inilah yang memenuhi disk. Pantau dengan docker system df, bersihkan lapisan menganggur dengan docker system prune, dan baca peringatannya sebelum menambahkan -a, yang juga menghapus setiap image yang tidak dipakai kontainer berjalan. Jika VPS punya disk kedua, arahkan data-root ke sana di /etc/docker/daemon.json sebelum menarik data besar.

Log layak mendapat peringatan khusus. Driver json-file bawaan menulis setiap baris stdout kontainer ke /var/lib/docker/containers/<id>/<id>-json.log dan tidak melakukan rotasi kecuali Anda mengonfigurasinya. Kontainer yang cerewet bisa menghabiskan seluruh disk dalam sepekan. Tetapkan batas tingkat daemon sejak hari pertama:

sudo tee /etc/docker/daemon.json > /dev/null <<'EOF'
{
  "log-driver": "json-file",
  "log-opts": { "max-size": "10m", "max-file": "3" },
  "live-restore": true
}
EOF
sudo systemctl restart docker

Opsi log berlaku untuk kontainer yang dibuat setelah restart, jadi buat ulang sekali kontainer yang berjalan lama. live-restore memungkinkan daemon di-restart untuk pemutakhiran tanpa mematikan kontainer yang berjalan.

Docker dan ufw: port yang dipublikasikan melewati firewall Anda

Inilah bagian yang menjebak kebanyakan orang pada VPS publik. Docker mengelola aturan iptables-nya sendiri: saat Anda mempublikasikan port dengan -p 8080:80, daemon menyisipkan aturan DNAT di rantai PREROUTING pada tabel nat dan aturan accept di FORWARD. Aturan ufw berada di INPUT, yang tidak pernah dilalui trafik yang diteruskan. Jadi ufw deny 8080 tidak berpengaruh, dan kontainer basis data yang dipublikasikan di 0.0.0.0:5432 bisa diakses dari seluruh internet meski ufw melaporkan port itu diblokir. Cari 0.0.0.0: di kolom PORTS pada docker ps, atau jalankan ss -tlnp; panduan kami tentang memeriksa port terbuka di Linux menunjukkan cara membaca keluaran itu dan memastikan paparan dari luar.

Dua solusi bersih, sesuai urutan preferensi:

  1. Ikat port yang dipublikasikan ke loopback. -p 127.0.0.1:8080:80 membuat layanan hanya dapat dijangkau dari VPS itu sendiri, biasanya di balik reverse proxy seperti nginx atau Caddy yang Anda buka secara sengaja. Kontainer yang hanya saling berkomunikasi sama sekali tidak butuh -p.
  2. Saring di rantai DOCKER-USER. Docker mengevaluasi rantai ini sebelum aturan FORWARD miliknya sendiri dan tidak pernah menimpanya. Karena DNAT sudah terjadi saat paket tiba di sana, cocokkan port aslinya dengan conntrack:
sudo iptables -I DOCKER-USER -i eth0 ! -s 203.0.113.10 -p tcp \
  -m conntrack --ctorigdstport 8080 --ctdir ORIGINAL -j DROP

Ganti eth0 dengan antarmuka publik Anda dan 203.0.113.10 dengan alamat yang diizinkan masuk. Aturan ini tidak persisten; simpan dengan paket iptables-persistent. Menyetel "iptables": false di daemon.json merusak jaringan kontainer dengan cara yang sulit di-debug; jangan diutak-atik.

Menghapus Docker sepenuhnya

Purge dulu paketnya, lalu hapus direktori data yang sengaja ditinggalkan apt:

sudo apt-get purge -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
sudo rm -rf /var/lib/docker /var/lib/containerd
sudo rm -f /etc/apt/sources.list.d/docker.list /etc/apt/keyrings/docker.asc
sudo apt-get autoremove -y

Untuk penyiapan rootless, jalankan dockerd-rootless-setuptool.sh uninstall sebagai pengguna tersebut lebih dulu, lalu hapus ~/.local/share/docker.

Semua ini mengandaikan server tempat Anda memegang root, mengendalikan kernel, dan bisa menulis ulang iptables tanpa izin siapa pun. Jika Anda membutuhkan mesin seperti itu, VPS Linux KVM dengan akses root penuh dari rdp.monster hadir dengan Ubuntu 24.04 atau 22.04, CPU dan RAM khusus, bandwidth tidak terbatas (fair-use), tanpa KYC, menerima kripto, mulai $8.99/bulan, dan dikirim sekitar 10 detik setelah pembayaran dikonfirmasi, sehingga Anda bisa menjalankan pemeriksaan hello-world di atas pada server sendiri tepat setelah checkout.

Pertanyaan yang sering ditanyakan

Versi Docker mana yang diinstal apt di Ubuntu, dan bagaimana cara memperbaruinya?

Repositori menginstal Docker Engine stabil terbaru, dan apt upgrade menjaganya tetap mutakhir.
Dengan repositori apt Docker terkonfigurasi, apt-get install docker-ce menarik rilis stabil terbaru yang tersedia untuk codename Ubuntu Anda, dan setiap sudo apt-get update && sudo apt-get upgrade berikutnya membawa Anda maju. Jalankan docker version untuk melihat versi klien dan server. Untuk mengunci rilis tertentu, daftarkan kandidatnya dengan apt-cache madison docker-ce lalu instal docker-ce=<version> bersama docker-ce-cli yang cocok, kemudian apt-mark hold kedua paket tersebut.

Mengapa muncul "permission denied while trying to connect to the Docker daemon socket"?

Pengguna Anda tidak bisa membaca /var/run/docker.sock; gabung ke grup docker atau pakai sudo.
Soket daemon dimiliki oleh root:docker, sehingga pengguna biasa mendapat permission denied. Awali perintah dengan sudo atau tambahkan diri Anda dengan sudo usermod -aG docker $USER, lalu mulai sesi login baru (atau jalankan newgrp docker) karena perubahan grup hanya berlaku pada sesi baru. Jika galat tetap muncul, periksa groups untuk memastikan keanggotaan, pastikan daemon berjalan dengan systemctl status docker, dan pastikan DOCKER_HOST tidak menunjuk ke soket rootless yang tidak ada.

Sebaiknya instal Docker dengan snap atau apt di Ubuntu Server?

Gunakan apt dengan repositori Docker; snap menambah keanehan confinement tanpa keuntungan di server.
Utamakan apt dari repositori milik Docker sendiri. Snap dikurung ketat: ia tidak bisa membaca berkas di luar direktori home tanpa koneksi antarmuka tambahan, memakai jalur berbeda untuk daemon.json dan data, serta ritme pembaruannya dikendalikan snapd, bukan Anda. Keanehan itu muncul sebagai permission denied misterius dan kegagalan bind-mount. Paket apt mengikuti konvensi standar Ubuntu, terintegrasi normal dengan systemd, dan menerima pembaruan upstream lewat apt upgrade yang sudah Anda jalankan.

Berapa RAM dan disk yang dibutuhkan VPS Docker?

Engine-nya sendiri ringan; sesuaikan ukuran VPS dengan kontainer dan image-nya.
Docker Engine hanya memakai beberapa puluh megabyte RAM saat idle, jadi anggaran sebenarnya adalah beban kerja Anda. Satu aplikasi web kecil dengan basis data berjalan nyaman di 2 GB; stack lebih berat atau beberapa proyek butuh 4 GB atau lebih. Disk lebih penting dari dugaan banyak orang: image, cache build, dan log semuanya masuk ke /var/lib/docker, dan 20 GB cepat penuh tanpa docker system prune serta rotasi log. Utamakan CPU dan RAM khusus dibanding kuota burstable, karena build melonjak tajam dan kontainer tidak bisa melakukan swap dengan mulus.

Adrien Roche, Editor Infrastruktur & Hosting

Insinyur sistem dengan pengalaman 10+ tahun mengoperasikan armada Windows Server dan Linux. Adrien mengelola dokumentasi infrastruktur rdp.monster dan menulis panduan kami tentang RDP, hosting VPS, administrasi server, jaringan, dan perangkat privasi.

Daftar ke program reseller kami

Data Anda

Jika Anda punya pertanyaan, contact us by clicking here !
Nama(Wajib)
Masukkan alamat email Anda, Anda harus memiliki akun di manager.rdp.monster !

Perusahaan Anda

Masukkan alamat situs web Anda jika ada
Jelaskan singkat bagaimana Anda akan menjual layanan kepada pelanggan Anda. Misalnya, berbincang dengan orang-orang di forum.

Kami menggunakan cookie !

Kami menggunakan cookie untuk meningkatkan pengalaman penjelajahan Anda, menampilkan iklan atau konten yang dipersonalisasi, dan menganalisis lalu lintas kami. Dengan mengklik «Terima», Anda menyetujui penggunaan cookie oleh kami.