X

Lütfen Ülke (Bölge) Seçiniz

Türkiye (Türkçe)Türkiye (Türkçe)
X
X

Lütfen Ülke (Bölge) Seçiniz

Türkiye (Türkçe)Türkiye (Türkçe)
X
🔥 Türkiye Lokasyon VDS & VPS sunucularında %20 indirim! Kupon Kodu: Türkiye'de %20 İndirim! Kod: DATA20
Şirketimizdeki KALİTEYİ Yakından Tanıyın!

VDS'e Docker Kurulumu ve İlk Konteyneri Çalıştırma

VDS'e Docker Kurulumu ve İlk Konteyneri Çalıştırma

Docker kurulumu, uygulamalarınızı bağımlılıklarıyla birlikte paketleyip her ortamda aynı şekilde çalıştırmanın en pratik yoludur. Bir VDS üzerinde Docker kullandığınızda veritabanı, web sunucusu ve uygulama katmanlarını birbirinden izole konteynerlerde çalıştırabilir, sunucuyu kirletmeden yeni servisler deneyebilirsiniz. Bu rehberde Docker'ı Ubuntu 22.04/24.04 ve AlmaLinux 9 üzerinde resmi Docker deposundan kuruyor, ilk konteynerinizi çalıştırıyor ve canlı ortamda atlanmaması gereken güvenlik ayrıntılarını anlatıyoruz.

Docker Nedir, Sanal Makineden Farkı Ne?

Docker, uygulamaları konteyner adı verilen izole ortamlarda çalıştıran bir platformdur. Sanal makineler her biri için ayrı bir işletim sistemi çekirdeği ve tam bir sistem çalıştırırken, konteynerler ana makinenin çekirdeğini paylaşır ve yalnızca uygulamanın ihtiyaç duyduğu dosyaları içerir. Bu yüzden saniyeler içinde başlar ve çok daha az bellek tüketir.

ÖzellikKonteyner (Docker)Sanal makine
ÇekirdekAna makineyle paylaşılırHer VM'in kendi çekirdeği vardır
Başlama süresiSaniyelerDakikalar
Kaynak kullanımıDüşükDaha yüksek
İzolasyonSüreç düzeyindeDonanım sanallaştırma düzeyinde
Tipik kullanımUygulama ve servis dağıtımıTam işletim sistemi gerektiren iş yükleri

Docker'ın çalışabilmesi için çekirdek özelliklerine (cgroups, namespaces) tam erişim gerekir. KVM gibi tam sanallaştırma kullanan VDS'lerde Docker sorunsuz çalışır; çekirdeği ana makineyle paylaşan bazı konteyner tabanlı sanal sunucularda ise kurulum mümkün olmayabilir.

Kurulum Öncesi: Dağıtım Paketleri mi, Resmi Depo mu?

Ubuntu deposunda docker.io, AlmaLinux'ta ise Docker uyumlu podman paketleri bulunur. Ancak Docker Engine'in güncel sürümünü, Compose eklentisini ve Buildx'i birlikte almak için Docker'ın kendi resmi deposunu kullanmak önerilen yöntemdir. Aynı sistemde dağıtım paketleriyle resmi paketleri karıştırmak çakışmalara yol açar; bu yüzden önce eski paketleri kaldırıyoruz.

Ayrıca internetteki curl ... | sh biçimindeki kolaylık betikleri test ortamları için tasarlanmıştır. Canlı sunucuda aşağıdaki depo tabanlı yöntemi kullanın; böylece Docker, normal sistem güncellemelerinizle birlikte güncellenir.

Ubuntu 22.04 ve 24.04'te Docker Kurulumu

  1. Çakışabilecek paketleri kaldırın. Sistemde yoksa komut yalnızca bulunamadı der:
    for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove -y $pkg; done
  2. Docker'ın GPG anahtarını ekleyin:
    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. Depoyu ekleyin. Komut, Ubuntu sürümünüzün kod adını (22.04 için jammy, 24.04 için noble) otomatik bulur:
    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
  4. Docker Engine, CLI, containerd, Buildx ve Compose eklentisini kurun:
    sudo apt-get update
    sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Ubuntu'da Docker servisi kurulumla birlikte başlar ve açılışta otomatik çalışacak şekilde etkinleştirilir.

AlmaLinux 9'da Docker Kurulumu

AlmaLinux 9, RHEL 9 ile uyumlu olduğu için Docker'ın RHEL deposu kullanılabilir. Önce dağıtımla gelen Podman ve Buildah paketlerini kaldırın, çünkü Docker paketleriyle çakışırlar:

sudo dnf remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine podman runc buildah

Ardından depoyu ekleyip paketleri kurun:

sudo dnf install -y dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Kurulum sırasında Docker'ın GPG anahtarını onaylamanız istenebilir; parmak izinin Docker belgelerindeki değerle eşleştiğini kontrol edin. AlmaLinux'ta servis kendiliğinden başlamaz, etkinleştirmeniz gerekir:

sudo systemctl enable --now docker

Kurulumu Doğrulama ve İlk Konteyner

Her iki dağıtımda da kurulumu test konteyneriyle doğrulayın:

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

hello-world imajı indirilip çalıştırıldığında kurulumun başarılı olduğunu bildiren bir mesaj görürsünüz. Şimdi işe yarar bir konteyner çalıştıralım: Nginx web sunucusu.

sudo docker run -d --name web -p 127.0.0.1:8080:80 --restart unless-stopped nginx:stable

Bu komutta:

  • -d konteyneri arka planda çalıştırır.
  • --name web konteynere akılda kalıcı bir ad verir.
  • -p 127.0.0.1:8080:80 sunucunun yalnızca yerel 8080 portunu konteynerin 80 portuna bağlar.
  • --restart unless-stopped sunucu yeniden başladığında konteynerin de otomatik açılmasını sağlar.
curl -I http://127.0.0.1:8080
sudo docker ps
sudo docker logs web

Docker Compose ile Çok Konteynerli Uygulama

Gerçek projelerde genellikle birden fazla konteyner birlikte çalışır. Compose, bunları tek bir YAML dosyasında tanımlamanızı sağlar. Docker'ın güncel sürümlerinde Compose bir eklentidir ve komut docker-compose değil docker compose şeklinde yazılır. Örnek bir proje dizini oluşturun:

mkdir -p ~/uygulama && cd ~/uygulama
nano compose.yaml
services:
  db:
    image: mariadb:11
    restart: unless-stopped
    environment:
      MARIADB_ROOT_PASSWORD: degistirin-guclu-parola
      MARIADB_DATABASE: uygulama
    volumes:
      - db_data:/var/lib/mysql

  web:
    image: nginx:stable
    restart: unless-stopped
    ports:
      - "127.0.0.1:8080:80"
    depends_on:
      - db

volumes:
  db_data:
sudo docker compose up -d
sudo docker compose ps
sudo docker compose logs -f

Veritabanı verisi db_data adlı kalıcı birimde (volume) saklanır; konteyneri silip yeniden oluştursanız bile veri kaybolmaz. Parolaları gerçek projelerde dosyaya düz yazmak yerine aynı dizindeki bir .env dosyasında tutun ve bu dosyanın izinlerini kısıtlayın.

Güvenlik: Docker ve Güvenlik Duvarı İlişkisi

Docker ile ilgili en sık gözden kaçan konu budur: Docker, yayınlanan portlar için iptables kurallarını doğrudan kendisi yazar. Bu kurallar UFW'nin kurallarından önce işlendiği için -p 8080:80 şeklinde yayınladığınız bir port, UFW'de kapalı görünse bile internete açık olabilir. AlmaLinux'ta da Docker firewalld'ye kendi bölgesini ekler ve yayınlanan portlar benzer şekilde erişilebilir hale gelir.

Bu nedenle şu kurallara uyun:

  • Doğrudan dışarıya açılması gerekmeyen portları 127.0.0.1: önekiyle yalnızca yerel arayüze bağlayın.
  • Veritabanı konteynerlerinin portunu hiç yayınlamayın; aynı Compose ağı içindeki konteynerler birbirine servis adıyla (db) erişir.
  • Web uygulamalarını ana makinedeki Nginx üzerinden ters vekil ile yayınlayın ve SSL'i orada sonlandırın. Nginx tarafı için Nginx kurulum rehberimize bakabilirsiniz.
  • Kurulumdan sonra portların dışarıdan nasıl göründüğünü port kontrol aracı ile test edin.

Docker Grubuna Kullanıcı Eklemek

Her komutta sudo yazmamak için kullanıcınızı docker grubuna ekleyebilirsiniz:

sudo usermod -aG docker $USER

Değişikliğin geçerli olması için oturumu kapatıp yeniden açın. Ancak şunu bilin: docker grubundaki bir kullanıcı, ana makinenin dosya sistemini konteynere bağlayarak fiilen root yetkisi elde edebilir. Bu grubu yalnızca root'a güvendiğiniz kadar güvendiğiniz kullanıcılara verin.

İmaj Seçimi ve Güncelleme Alışkanlıkları

Konteyner güvenliği büyük ölçüde hangi imajı çalıştırdığınıza bağlıdır. Birkaç basit kural riskleri ciddi biçimde azaltır:

  • Resmi veya doğrulanmış imajları tercih edin. Docker Hub'da kimin yayımladığı belli olmayan imajlar zararlı yazılım içerebilir.
  • latest etiketine güvenmeyin. nginx:latest her çekişte farklı bir sürüm getirebilir. nginx:stable veya belirli bir sürüm numarası kullanmak, güncellemeleri kontrollü yapmanızı sağlar.
  • İmajları düzenli güncelleyin. Ana makineyi güncellemek konteyner içindeki paketleri güncellemez. Compose projelerinde docker compose pull ve ardından docker compose up -d ile imajları yenileyin.
  • Konteynerleri gereksiz yetkiyle çalıştırmayın. --privileged parametresi ve Docker soketinin (/var/run/docker.sock) konteynere bağlanması, konteynere ana makine üzerinde geniş yetki verir; yalnızca gerçekten gerekiyorsa kullanın.

Disk ve Günlük Yönetimi

Docker zamanla kullanılmayan imajlar, durmuş konteynerler ve büyüyen günlük dosyalarıyla diski doldurabilir. Konteyner günlüklerini sınırlamak için /etc/docker/daemon.json dosyasını oluşturun:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}
sudo systemctl restart docker

Bu ayar yalnızca yeni oluşturulan konteynerlere uygulanır; mevcut konteynerleri yeniden oluşturmanız gerekir. Disk kullanımını görmek ve temizlik yapmak için:

sudo docker system df
sudo docker image prune
sudo docker system prune

docker system prune durmuş tüm konteynerleri ve kullanılmayan ağları siler. --volumes parametresini eklerseniz kullanılmayan birimler ve içindeki veriler de silinir; bu parametreyi yedek almadan kullanmayın.

Sık Kullanılan Docker Komutları

KomutAçıklama
docker ps -aÇalışan ve durmuş tüm konteynerleri listeler
docker imagesYerel imajları listeler
docker exec -it web shÇalışan konteynerin içinde kabuk açar
docker stop web / docker start webKonteyneri durdurur veya başlatır
docker rm webDurmuş konteyneri siler
docker statsKonteynerlerin anlık CPU ve bellek kullanımını gösterir
docker compose pull && docker compose up -dİmajları günceller ve konteynerleri yeniler

Sık Sorulan Sorular

Docker için kaç GB RAM gerekir?

Docker Engine'in kendisi az kaynak kullanır; ihtiyacı konteynerlerde çalışan uygulamalar belirler. Birkaç hafif servis için 2 GB yeterli olabilir, veritabanı ve birden fazla uygulama çalıştıracaksanız 4 GB ve üzeri daha rahattır. Ayrıntılar için VDS RAM seçimi yazımıza bakabilirsiniz.

Docker ile Podman arasındaki fark nedir?

Podman, arka planda sürekli çalışan bir servise ihtiyaç duymayan ve varsayılan olarak rootless çalışabilen bir konteyner aracıdır. Komutları büyük ölçüde Docker ile uyumludur. Docker Compose ve Docker ekosistemine bağımlı projeler için Docker daha sorunsuzdur.

Konteyner silinince verilerim kaybolur mu?

Konteynerin kendi dosya sistemine yazılan veriler kaybolur. Kalıcı olması gereken veriyi mutlaka bir volume veya ana makinedeki bir dizine bağlayarak saklayın ve bu verileri düzenli olarak yedekleyin.

Docker'ı nasıl güncellerim?

Resmi depoyu kullandığınız için Ubuntu'da sudo apt-get upgrade, AlmaLinux'ta sudo dnf upgrade ile Docker diğer paketlerle birlikte güncellenir.

Sunucu yeniden başladığında konteynerler otomatik açılır mı?

Docker servisi açılışta etkinse ve konteyner --restart unless-stopped veya always politikasıyla oluşturulduysa evet. Compose dosyalarında aynı ayar her servis için restart: unless-stopped satırıyla verilir. Politikası olmayan konteynerler yeniden başlatmadan sonra durmuş halde kalır.

Docker kurulumu tamamlandıktan sonra bir VDS, onlarca farklı servisi düzenli ve izole şekilde çalıştırabilen esnek bir platforma dönüşür. Neler yapabileceğinize dair fikirler için VDS kullanım alanları yazımıza göz atın. Konteyner iş yükleri için NVMe diskli sanal sunucu kiralama seçeneklerimizi, yoğun derleme ve çok konteynerli projeler için ise Ryzen 9 9950X3D işlemcili VDS paketlerini inceleyebilirsiniz.

VDS Sanal Sunucu
TÜRKİYE / ANKARA
₺139 /ay'dan başlayan
Paketleri İncele
  •  NVMe SSD Disk
  •  DDoS Koruması Dahil
  •  Limitsiz Trafik
  •  0–15 Dakikada Kurulum
  •  Windows - Linux
  •  7/24 Destek
Top
Destek Hattı0850 840 90 28

DNS Adresleri

ns1.datahost.net.tr
ns2.datahost.net.tr
DataHost Destek Çevrimiçi

Satış öncesi tüm sorularınız için WhatsApp hattımıza yazın; size hızlıca yardımcı olalım.

WhatsApp'tan Yaz