RDP Monster

Ubuntu 24.04/22.04 VPS'e Docker Kurulumu: Resmi Yöntem

Ubuntu 24.04/22.04 VPS'e Docker Kurulumu: Resmi Yöntem

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öntemPaketDeğerlendirme
Docker'ın apt deposudownload.docker.com üzerinden docker-ceÖnerilen: güncel sürümler, apt upgrade ile güncelleme, Compose ve Buildx eklentileri dahil.
Ubuntu universedocker.ioÇalışır, ancak Ubuntu'nun kendi derlemesi upstream'in gerisindedir ve eklentiler yoktur.
Snapsnap install dockerKendi 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ğiget.docker.comAynı 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:

  1. Yayımlanan portları loopback'e bağlayın. -p 127.0.0.1:8080:80 servisi 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 -p seçeneğine hiç ihtiyacı yoktur.
  2. DOCKER-USER zincirinde filtreleyin. Docker bu zinciri kendi FORWARD kuralları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?

Depo en güncel kararlı Docker Engine sürümünü kurar ve apt upgrade onu güncel tutar.
Docker'ın apt deposu yapılandırıldığında 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?

Kullanıcınız /var/run/docker.sock dosyasını okuyamıyor; docker grubuna katılın veya sudo kullanın.
Daemon soketinin sahibi 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?

Docker'ın deposuyla apt kullanın; snap sunucuda hiçbir avantaj sunmadan kısıtlama tuhaflıkları ekler.
Docker'ın kendi deposundan apt'yi tercih edin. Snap sıkı biçimde kısıtlanmıştır: ek arayüz bağlantıları olmadan ev dizininiz dışındaki dosyaları okuyamaz, 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?

Motorun kendisi hafiftir; VPS'i konteynerlerinize ve imajlarınıza göre boyutlandırın.
Docker Engine boştayken birkaç düzine megabayt RAM kullanır, dolayısıyla asıl bütçe iş yükünüzdür. Veritabanı olan tek bir küçük web uygulaması 2 GB içinde rahatça çalışır; daha ağır yığınlar veya birden fazla proje 4 GB ve üzerini ister. Disk çoğu kişinin sandığından daha önemlidir: imajlar, derleme önbelleği ve loglar hep /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.

Bayilik programımıza kaydolun

Bilgileriniz

Bir sorunuz varsa, contact us by clicking here !
Ad Soyad(Zorunlu)
E-posta adresinizi girin, şu adreste bir hesabınız olmalı: manager.rdp.monster !

Şirketiniz

Varsa web sitenizin adresini girin
Hizmetleri müşterilerinize nasıl satacağınızı kısaca açıklayın. Örneğin, forumlarda insanlarla konuşmak gibi.

Çerez kullanıyoruz !

Tarama deneyiminizi geliştirmek, kişiselleştirilmiş reklam veya içerik sunmak ve trafiğimizi analiz etmek için çerez kullanıyoruz. «Kabul Et»'e tıklayarak çerez kullanımımızı onaylarsınız.