Ubuntu 24.04/22.04 VPS'e Docker Kurulumu: Resmi Yöntem
- 3 Ekim 2026
- 09:00
- Yazar: Adrien Roche
- Eğitimler

Başlamadan önce: KVM VPS, desteklenen bir Ubuntu ve sudo yetkili kullanıcı
Docker Engine kendi çekirdeğiyle gelmez. Her konteyner ana makinenin çekirdeğini paylaşır ve Linux namespace, cgroup ve netfilter yapılarına dayanır; bu yüzden daemon, çekirdeğin size ait olduğu bir VPS ister. KVM (tam sanallaştırma) VPS tam olarak bunu verir. OpenVZ veya LXC üzerine kurulu konteyner tabanlı planlarda çekirdek sağlayıcıya aittir ve Docker ya hiç başlamaz ya da yalnızca ana makine iç içe sanallaştırmayı etkinleştirdiyse çalışır. Herhangi bir kurulum yapmadan önce kontrol edin:
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, 64 bit Ubuntu 24.04 LTS (noble) ve 22.04 LTS (jammy) için x86_64 ve arm64 mimarilerinde paket yayımlar. Ayrıca sudo yetkisine sahip bir kullanıcıya ihtiyacınız var; aşağıdaki docker grubu ve rootless bölümleri root yerine normal bir hesap varsayar.
Docker Engine'i resmi apt deposundan kurun
Ubuntu üzerinde Docker kurmanın dört yaygın yolu vardır ve sunucular için Docker'ın belgelediği ve desteklediği yöntem yalnızca bir tanesidir:
| Yöntem | Paket | Değerlendirme |
|---|---|---|
| Docker'ın apt deposu | download.docker.com üzerinden docker-ce | Önerilen: güncel sürümler, apt upgrade ile güncelleme, Compose ve Buildx eklentileri dahil. |
| Ubuntu universe | docker.io | Çalışır, ancak Ubuntu'nun kendi derlemesi upstream'in gerisindedir ve eklentiler yoktur. |
| Snap | snap install docker | Kendi yollarına sahip kısıtlı bir kurulum; sık sık "permission denied" sürprizlerine yol açar. Sunucularda kaçının. |
| Kolaylık betiği | get.docker.com | Aynı paketler, ama incelenmeden root kabuğuna aktarılır. Yalnızca tek kullanımlık makineler için. |
Adım 1: çakışan paketleri kaldırın
VPS imajında Ubuntu'nun docker.io paketi, eski bir docker-compose veya podman-docker zaten varsa, iki derleme /usr/bin/docker için çekişmesin diye bunları kaldırın. Bu döngü Docker'ın belgelerinden gelir ve temiz bir sistemde zararsızdır; /var/lib/docker dizinine dokunmaz:
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do
sudo apt-get remove $pkg
done
Adım 2: Docker'ın GPG anahtarını ve apt kaynağını ekleyin
Anahtar /etc/apt/keyrings/ dizinine konur ve signed-by= ile referans verilir; bu, anahtarı kullanımdan kaldırılan apt-key ile küresel olarak güvenilir kılmak yerine yalnızca bu depoya sınırlar. Kod adı /etc/os-release dosyasından okunur, dolayısıyla aynı blok hem 24.04 hem de 22.04 üzerinde çalışır:
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
Son apt-get update adımındaki imza hatası neredeyse her zaman anahtar dosyasının okunamadığı anlamına gelir; chmod satırını yeniden çalıştırın.
Adım 3: motoru ve eklentilerini kurun
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
docker-ce daemon, docker-ce-cli istemci, containerd.io alttaki çalışma ortamıdır; iki eklenti de docker buildx ve docker compose komutlarını sağlar. Ubuntu'da paketin kurulum sonrası betiği docker.service servisini hemen başlatır ve açılışta etkinleştirir.
Adım 4: hello-world ile doğrulayın
sudo docker run hello-world
docker --version
sudo docker info | head -n 20
hello-world kesin testtir: istemci daemon ile konuşur, daemon Docker Hub'dan küçük bir imaj indirir, bir konteyner oluşturur, çalıştırır ve çıktısını geri akıtır. "Hello from Docker!" görüyorsanız her katman çalışıyor demektir. Sağlıklı bir 24.04 veya 22.04 kurulumunda docker info çıktısı Storage Driver: overlay2 ve Cgroup Version: 2 gösterir.
Docker'ı sudo olmadan çalıştırın: docker grubu
Daemon, sahibi root:docker olan /var/run/docker.sock Unix soketini dinler; bu yüzden docker grubunun üyeleri CLI'yi sudo olmadan kullanabilir:
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
Neyi verdiğinizi iyi anlayın. Bu sokete erişebilen herkes docker run -v /:/host --privileged ... çalıştırıp VPS'teki her dosyayı okuyabilir veya değiştirebilir; bu da docker grubu üyeliğini parola sorulmadan ve sudo günlüğüne düşmeden root'a eşdeğer kılar. Buna tam olarak sudo erişimi gibi davranın; Ubuntu'da kullanıcı değiştirme ve yetki yükseltme rehberimiz bu ayrımın çok kullanıcılı bir makinede neden önemli olduğunu açıklıyor.
Docker Compose eklentisi
docker-compose-plugin paketi Compose v2'yi docker compose alt komutu olarak (boşlukla) sağlar. Eski Python tabanlı docker-compose ikili dosyası kullanım ömrünü tamamlamıştır ve yanına kurulmamalıdır. Sürümü kontrol edin, ardından küçük bir compose.yaml ile test edin:
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
İki ayrıntı bilinçlidir: restart: unless-stopped konteyneri yeniden başlatmadan sonra geri getirir ve port, güvenlik duvarı bölümünde açıklanan nedenlerle tüm arayüzler yerine 127.0.0.1 adresine bağlanır.
Rootless mod: root olmayan bir daemon
Rootless mod, daemon'ı ve konteynerleri bir kullanıcı namespace'i içinde çalıştırır; böylece bir konteyner kaçışı root yerine yetkisiz bir hesapta son bulur. Bir VPS'i birkaç kişi paylaşıyorsa doğru seçim budur. Ön koşullar: ikincil UID/GID aralıkları (Ubuntu bunları normal kullanıcılar için /etc/subuid ve /etc/subgid dosyalarında oluşturur), uidmap araçları, bir kullanıcı D-Bus oturumu ve Docker'ın rootless ek paketleri:
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
Kurulum aracı kullanıcıya özel bir systemd birimi oluşturur ve kabuğunuzun ihtiyaç duyduğu iki değişkeni yazdırır. Bunları ~/.bashrc dosyasına ekleyin, sonra kullanıcı daemon'ının oturum açılmadan da başlamasını sağlayın:
export PATH=/usr/bin:$PATH
export DOCKER_HOST=unix:///run/user/$(id -u)/docker.sock
systemctl --user enable docker
sudo loginctl enable-linger $(whoami)
Rootless modun gerçek sınırları vardır: sudo setcap cap_net_bind_service=ep $(which rootlesskit) komutunu çalıştırıp kullanıcı daemon'ını yeniden başlatmadıkça 1024 altındaki portlar yayımlanamaz, overlay ağlar kullanılamaz ve veriler ~/.local/share/docker altında tutulur. Ubuntu 24.04'te AppArmor yetkisiz kullanıcı namespace'lerini kısıtlar; deb paketleri rootlesskit için gereken profili içerir, ancak statik ikili dosyayla yapılan kurulumda bu profilin rootless belgelerinde anlatıldığı gibi elle eklenmesi gerekir.
Açılış davranışı, depolama ve log rotasyonu
Yeniden başlatmadan sonra konteynerlerinizin ayakta olup olmayacağını iki ayrı şey belirler: daemon etkin olmalı ve her konteynerin bir yeniden başlatma politikası olmalıdır. Ubuntu paketleri servisi sizin için etkinleştirir; bunu doğrulayın, birim durumları size yabancı geliyorsa systemctl ile servisleri listeleme referansımız her sütunu açıklıyor:
systemctl is-enabled docker.service containerd.service
sudo systemctl enable docker.service containerd.service # only if the line above said disabled
--restart olmadan başlatılan konteynerler yeniden başlatmadan sonra kapalı kalır; kalıcı olması gereken her şey için komut satırında --restart unless-stopped veya Compose içinde restart: unless-stopped kullanın.
Docker'ın sakladığı her şey (imaj katmanları, konteyner dosya sistemleri, birimler, loglar) /var/lib/docker altında yaşar ve küçük bir VPS'te diski dolduran dizin budur. docker system df ile izleyin, artık katmanları docker system prune ile temizleyin ve çalışan hiçbir konteynerin kullanmadığı tüm imajları da silen -a seçeneğini eklemeden önce uyarıyı okuyun. VPS'te ikinci bir disk varsa, büyük bir şey indirmeden önce /etc/docker/daemon.json içinde data-root ayarını oraya yönlendirin.
Loglar özel bir uyarıyı hak ediyor. Varsayılan json-file sürücüsü konteyner stdout çıktısının her satırını /var/lib/docker/containers/<id>/<id>-json.log dosyasına yazar ve siz yapılandırmadıkça hiç rotasyon yapmaz. Konuşkan bir konteyner bir haftada tüm diski yiyebilir. Daemon genelinde sınırları ilk günden koyun:
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
Log seçenekleri yeniden başlatmadan sonra oluşturulan konteynerlere uygulanır; bu yüzden uzun süre çalışanları bir kez yeniden oluşturun. live-restore sayesinde daemon, çalışan konteynerleri öldürmeden yükseltme için yeniden başlatılabilir.
Docker ve ufw: yayımlanan portlar güvenlik duvarınızı atlar
Genel bir VPS'te çoğu kişiyi yakalayan kısım burasıdır. Docker kendi iptables kurallarını yönetir: -p 8080:80 ile bir port yayımladığınızda daemon, nat tablosunun PREROUTING zincirine bir DNAT kuralı ve FORWARD zincirine bir kabul kuralı ekler. ufw'nin kuralları ise yönlendirilen trafiğin hiç uğramadığı INPUT zincirinde durur. Yani ufw deny 8080 hiçbir işe yaramaz ve 0.0.0.0:5432 üzerinde yayımlanmış bir veritabanı konteyneri, ufw portu engellenmiş gösterirken tüm internetten erişilebilir olur. docker ps çıktısının PORTS sütununda 0.0.0.0: ifadesini arayın veya ss -tlnp çalıştırın; Linux'ta açık portları kontrol etme rehberimiz bu çıktının nasıl okunacağını ve dışarıdan maruziyetin nasıl doğrulanacağını gösteriyor.
Tercih sırasına göre iki temiz çözüm:
- Yayımlanan portları loopback'e bağlayın.
-p 127.0.0.1:8080:80servisi yalnızca VPS'in kendisinden erişilebilir tutar; genellikle bilinçli olarak dışarı açtığınız nginx veya Caddy gibi bir ters vekil sunucunun arkasında. Yalnızca birbirleriyle konuşan konteynerlerin-pseçeneğine hiç ihtiyacı yoktur. DOCKER-USERzincirinde filtreleyin. Docker bu zinciri kendiFORWARDkurallarından önce değerlendirir ve asla üzerine yazmaz. Bir paket buraya ulaştığında DNAT çoktan gerçekleşmiş olduğundan, özgün portu conntrack ile eşleştirin:
sudo iptables -I DOCKER-USER -i eth0 ! -s 203.0.113.10 -p tcp \
-m conntrack --ctorigdstport 8080 --ctdir ORIGINAL -j DROP
eth0 yerine kendi genel arayüzünüzü, 203.0.113.10 yerine izin verilen adresi yazın. Bu kurallar kalıcı değildir; iptables-persistent paketiyle kaydedin. daemon.json içinde "iptables": false ayarlamak konteyner ağını hata ayıklaması zor biçimlerde bozar; ona dokunmayın.
Docker'ı tamamen kaldırın
Önce paketleri temizleyin, sonra apt'nin bilerek bıraktığı veri dizinlerini silin:
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
Rootless bir kurulum için önce kullanıcı olarak dockerd-rootless-setuptool.sh uninstall komutunu çalıştırın, ardından ~/.local/share/docker dizinini silin.
Bütün bunlar root yetkisine sahip olduğunuz, çekirdeği kontrol ettiğiniz ve kimseye sormadan iptables kurallarını değiştirebildiğiniz bir sunucuyu varsayar. Böyle bir makineye hâlâ ihtiyacınız varsa, rdp.monster'ın tam root erişimli KVM Linux VPS çözümü Ubuntu 24.04 veya 22.04 ile gelir; ayrılmış CPU ve RAM, sınırsız (adil kullanım) bant genişliği, KYC yok, kripto kabul edilir, aylık $8.99'dan başlar ve ödeme onaylandıktan yaklaşık 10 saniye sonra teslim edilir; böylece ödemenin hemen ardından yukarıdaki hello-world testini kendi sunucunuzda çalıştırabilirsiniz.
Sık sorulan sorular
Ubuntu'da apt hangi Docker sürümünü kurar ve nasıl güncellerim?
apt-get install docker-ce komutu Ubuntu kod adınız için mevcut en yeni kararlı sürümü indirir ve sonraki her sudo apt-get update && sudo apt-get upgrade sizi ileri taşır. Hem istemci hem sunucu sürümünü görmek için docker version çalıştırın. Belirli bir sürüme sabitlemek için adayları apt-cache madison docker-ce ile listeleyin, docker-ce=<version> paketini eşleşen docker-ce-cli ile birlikte kurun ve ardından her iki pakete apt-mark hold uygulayın.Neden "permission denied while trying to connect to the Docker daemon socket" hatası alıyorum?
root:docker olduğundan sıradan bir kullanıcı permission denied hatası alır. Ya komutların başına sudo ekleyin ya da sudo usermod -aG docker $USER ile kendinizi gruba ekleyip yeni bir oturum açın (veya newgrp docker çalıştırın), çünkü grup değişiklikleri yalnızca yeni oturumlarda geçerli olur. Hata devam ederse üyeliği groups ile doğrulayın, daemon'ın çalıştığını systemctl status docker ile kontrol edin ve DOCKER_HOST değişkeninin var olmayan bir rootless sokete işaret etmediğinden emin olun.Ubuntu Server üzerinde Docker'ı snap ile mi apt ile mi kurmalıyım?
daemon.json ve veriler için farklı yollar kullanır ve güncelleme temposunu siz değil snapd belirler. Bu tuhaflıklar açıklanamayan permission denied ve bind-mount hataları olarak karşınıza çıkar. apt paketleri standart Ubuntu geleneklerine uyar, systemd ile normal biçimde bütünleşir ve zaten çalıştırdığınız apt upgrade üzerinden upstream güncellemelerini alır.Docker çalıştıran bir VPS ne kadar RAM ve disk ister?
/var/lib/docker altına iner ve docker system prune ile log rotasyonu olmadan 20 GB hızla dolar. Derlemeler ani yük yarattığı ve konteynerler zarifçe takas yapamadığı için paylaşımlı yerine ayrılmış CPU ve RAM tercih edin.Adrien Roche, Altyapı ve Hosting Editörü
Windows Server ve Linux filolarını 10+ yıldır işleten sistem mühendisi. Adrien, rdp.monster altyapı dokümantasyonunu yönetir ve RDP, VPS hosting, sunucu yönetimi, ağ ve gizlilik araçları üzerine rehberlerimizi yazar.
İlgili yazılar




