LIONFIN
VPS & Sunucu

Docker Kurulumu: Ubuntu Sunucuda Docker Engine ve Compose

6 dk okuma Güncelleme: 1 görüntülenme
Docker Kurulumu: Ubuntu Sunucuda Docker Engine ve Compose

Uygulamaları bağımlılıklarıyla birlikte yalıtılmış konteynerlerde çalıştırmanızı sağlayan Docker Engine’i (dockerd servisi, docker komut satırı aracı ve containerd çalışma zamanı) sunucuya yükleme işlemine Docker kurulumu denir. Bir veritabanını, bir web uygulamasını ya da bir izleme aracını tek bir compose.yaml dosyasıyla ayağa kaldırmak ve aynı ortamı başka bir sunucuda birebir tekrarlamak için kullanılır.

Docker, Linux çekirdeğinin namespace ve cgroup özelliklerine dayanır; bu yüzden kendi çekirdeği olan KVM tabanlı bir VPS sunucu Docker için uygun bir ortamdır, LIONFIN VPS’leri de KVM üzerinde çalışır. Komutlar Ubuntu 24.04 LTS içindir. Sunucunuzu henüz hazırlamadıysanız önce VPS ilk kurulum adımları rehberini uygulayın.

Kısa cevap

Docker kurulumu için Ubuntu’da önerilen yol, Docker’ın resmî apt deposunu ekleyip docker-ce, docker-ce-cli, containerd.io, docker-buildx-plugin ve docker-compose-plugin paketlerini kurmaktır; Ubuntu deposundaki docker.io paketi daha basit ama genellikle daha eski bir alternatiftir. Kurulum sudo docker run hello-world ile doğrulanır. Ardından log döndürme ayarlanmalı ve yayınlanan portların UFW kurallarını atladığı unutulmamalıdır.

Docker kurulumu için hangi yöntemi seçmelisiniz?

Ubuntu’da iki güvenilir yöntem vardır ve aynı sunucuda yalnızca birini kullanmalısınız; iki kaynağın paketleri birbiriyle çakışır.

ÖlçütDocker’ın resmî deposuUbuntu deposu (docker.io)
Paketlerdocker-ce, docker-ce-cli, containerd.io, docker-buildx-plugin, docker-compose-plugindocker.io, Compose için ayrıca docker-compose-v2
GüncellikDocker’ın yayın takvimini izlerUbuntu’nun güncelleme politikasına bağlıdır, çoğu zaman daha eskidir
Paketi hazırlayanDocker, Inc.Ubuntu paketleyicileri
Uygun olduğu durumGüncel özellikler ve resmî belgelerle birebir uyumTek komutla kurulum ve dağıtımın kendi paketi

Ubuntu deposundan kurmak için tek satır yeterlidir:

sudo apt install docker.io docker-compose-v2

Snap mağazasındaki docker paketi üçüncü bir yoldur, ancak dosya yolları ve izinleri farklı olduğundan bu rehberdeki adımlarla karıştırmayın. Daha önce başka bir yöntemle kurulum yaptıysanız resmî depoya geçmeden önce eski paketleri kaldırın:

sudo apt remove docker.io docker-compose docker-compose-v2 podman-docker containerd runc

Docker resmî deposundan nasıl kurulur?

Resmî depo, paketlerin Docker’ın GPG anahtarıyla doğrulanacağı şekilde eklenir:

  1. Gerekli araçları kurun ve anahtarı indirin:
    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
  2. Depoyu kaynak listesine ekleyin:
    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
  3. Paketleri kurun:
    sudo apt update
    sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Kurulumla birlikte docker servisi başlar ve açılışta otomatik başlayacak şekilde etkinleşir; systemctl is-enabled docker ile kontrol edebilirsiniz. Debian 12 ve 13’te adımlar aynıdır, yalnızca adreslerdeki ubuntu yerine debian yazılır. Sonraki Docker sürümleri olağan apt upgrade ile gelir.

Docker kurulumu nasıl doğrulanır?

Kurulumun çalıştığını görmenin en kısa yolu Docker’ın test imajıdır:

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

İlk komut imajı Docker Hub’dan çeker, bir konteyner başlatır, “Hello from Docker!” ile başlayan bir mesaj yazdırıp kapanır. Bu mesaj; istemcinin servise ulaştığını, imajın indirildiğini ve konteynerin çalıştığını aynı anda kanıtlar.

Compose’un güncel sürümü (v2) ayrı bir program değil, Docker komut satırının eklentisidir ve boşlukla yazılır: docker compose. Python tabanlı eski docker-compose (v1) artık geliştirilmiyor; eski örneklerdeki tireli komutu docker compose olarak okuyun. “permission denied … docker.sock” hatası, komutu sudo olmadan çalıştırdığınızı ve kullanıcınızın docker grubunda bulunmadığını gösterir; bu grubun riski aşağıda anlatılıyor.

Docker Compose ile ilk uygulama nasıl çalıştırılır?

Compose, birden fazla konteyneri, ağlarını ve disk bağlantılarını tek bir YAML dosyasında tanımlamanızı sağlar. Basit bir Nginx konteyneriyle başlayın:

mkdir -p ~/ornek-app/html
cd ~/ornek-app
echo "Merhaba Docker" > html/index.html
nano compose.yaml

compose.yaml içeriği:

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

Projeyi başlatın, durumunu ve loglarını izleyin, işiniz bitince kapatın:

sudo docker compose up -d
sudo docker compose ps
curl http://127.0.0.1:8080
sudo docker compose logs -f web
sudo docker compose down

restart: unless-stopped, konteynerin sunucu yeniden başladığında kendiliğinden açılmasını sağlar. Port satırındaki 127.0.0.1 öneki konteyneri yalnızca sunucunun içinden erişilebilir kılar; dışarıya sunmak için önüne Nginx gibi bir reverse proxy koyup HTTPS’i orada sonlandırırsınız (sertifika ve yönlendirme için HTTP → HTTPS yönlendirme rehberine bakın). Bir uygulamayı konteyner yerine doğrudan sunucuda çalıştırmak isterseniz Node.js uygulaması yayınlama rehberi PM2 ve Nginx ile alternatif yolu anlatır.

docker grubu neden root yetkisine eşdeğerdir?

Kullanıcınızı docker grubuna eklemek her komutta sudo yazma zorunluluğunu kaldırır ama o kullanıcıya fiilen root yetkisi verir. Docker servisi root olarak çalışır; grup üyesi bir kullanıcı, sunucunun kök dizinini bir konteynere bağlayarak (-v /:/host gibi) her dosyayı okuyup değiştirebilir.

sudo usermod -aG docker $USER
newgrp docker
docker run hello-world

Grup değişikliği yeni oturumlarda geçerli olur; newgrp yalnızca o terminal için etkinleştirir. Bu yetkiyi verirken şu kurallara uyun:

  • Gruba yalnızca sunucuda zaten sudo yetkisi olan, güvendiğiniz kullanıcıları ekleyin.
  • Docker soketini (/var/run/docker.sock) bir konteynere bağlamak, o konteynere sunucunun tam denetimini vermektir; yönetim araçlarında bu ayarı bilinçli kullanın.
  • Daha sıkı yalıtım gerekiyorsa Docker’ın rootless kipini değerlendirin; servis normal bir kullanıcının yetkileriyle çalışır.

Docker portları neden UFW’yi atlar, nasıl korunur?

Docker, konteyner portlarını yayınlarken iptables kurallarını doğrudan yazar ve bu kurallar UFW’nin denetlediği zincirlerden önce işlenir. Sonuç olarak -p 8080:80 ya da Compose’taki "8080:80" ile yayınlanan bir port, UFW’de kapalı görünse bile internetten erişilebilir olur; sudo ufw status çıktısı bu durumda yanıltıcıdır.

İki güvenli yaklaşım vardır:

  1. Yalnızca yerel adrese bağlayın: Portu 127.0.0.1:8080:80 biçiminde yayınlayın ve dış trafiği sunucudaki Nginx üzerinden, HTTPS ile konteynere iletin. Aynı Compose ağındaki konteynerler birbirine servis adıyla ulaştığından veritabanı gibi servislerde port yayınlamanız gerekmez.
  2. DOCKER-USER zincirini kullanın: Docker, kendi kurallarından önce işlenen bu zinciri kullanıcıya bırakır. Örneğin dış arayüzden (eth0; kendi arayüz adınızı ip a ile öğrenin) yalnızca tek bir IP’nin konteynerlere erişmesine izin vermek için:
    sudo iptables -I DOCKER-USER -i eth0 ! -s 203.0.113.50 -j DROP
    iptables ile eklenen kurallar yeniden başlatmada kaybolur; kalıcı olmaları için ayrıca kaydedilmeleri gerekir.

UFW’nin genel kullanımı için UFW firewall kurulumu rehberine bakın.

Dikkat: Veritabanı ya da önbellek portlarını (3306, 5432, 6379) 127.0.0.1 öneki olmadan yayınlamak, UFW etkin olsa bile bu servisleri internete açar.

Docker logları diski doldurur mu, log döndürme nasıl ayarlanır?

Evet, varsayılan ayarlarla doldurabilir: Docker’ın varsayılan json-file log sürücüsü, konteynerin her çıktı satırını /var/lib/docker/containers/ altında boyut sınırı olmadan biriktirir. Sınırı Docker servisinin ayar dosyasında, tüm konteynerler için tanımlayın:

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

Bu ayarla her konteyner için en fazla üç adet 10 MB’lık log dosyası tutulur. Ayar yalnızca yeni oluşturulan konteynerlere uygulanır; mevcut konteynerleri Compose projesinde sudo docker compose up -d --force-recreate ile yeniden oluşturun. Docker servisi yeniden başlarken konteynerler de durup yeniden başlar; işlemi trafiğin düşük olduğu bir saatte yapın.

Disk kullanımını sudo docker system df ile izleyin; etiketsiz (dangling) imajları sudo docker image prune temizler. Uzun vadeli kaynak takibi için Linux sunucu performans izleme rehberindeki araçlar işinize yarar; iş yükü büyüdükçe ayrılmış kaynaklı bir VDS sunucu daha öngörülebilir performans sunar.

Sık Sorulan Sorular

Docker ile Docker Compose arasındaki fark nedir?

Docker Engine tek tek konteynerleri çalıştıran servistir; docker run komutuyla her konteyneri ayrı ayrı başlatırsınız. Compose ise birden fazla konteyneri, aralarındaki ağı, kalıcı diskleri ve ortam değişkenlerini tek bir compose.yaml dosyasında tanımlayıp tek komutla yönetmenizi sağlayan eklentidir. Web uygulaması, veritabanı ve önbellek gibi birlikte çalışan servislerde Compose yönetimi büyük ölçüde sadeleştirir.

“docker-compose: command not found” hatası neden çıkar?

Güncel kurulumlarda Compose, Docker komut satırının eklentisi olarak gelir ve tire yerine boşlukla, docker compose biçiminde yazılır. Eski rehberlerdeki docker-compose komutu artık geliştirilmeyen Python tabanlı ilk sürüme aittir. Komutu docker compose olarak çalıştırın; eklenti kurulu değilse resmî depoda docker-compose-plugin, Ubuntu deposunda docker-compose-v2 paketini kurun.

Docker’ı sudo olmadan kullanmak güvenli mi?

Kullanıcıyı docker grubuna eklemek sudo yazmayı gereksiz kılar ama o kullanıcıya fiilen root yetkisi verir; grup üyeleri sunucunun tüm dosya sistemini bir konteynere bağlayabilir. Bu nedenle gruba yalnızca zaten sudo yetkisi olan güvenilir yöneticileri ekleyin. Birden fazla kişinin kullandığı sunucularda ya da daha sıkı yalıtım gerektiğinde Docker’ın rootless kipini değerlendirin.

Docker hangi sanal sunucu türlerinde çalışır?

Docker, Linux çekirdeğinin namespace ve cgroup özelliklerine doğrudan eriştiği için KVM gibi tam sanallaştırma kullanan sunucularda sorunsuz çalışır. Çekirdeği ana makineyle paylaşan OpenVZ ya da LXC tabanlı kapsayıcılarda bu özellikler sağlayıcının izin verdiği ölçüde kullanılabilir ve kurulum kısıtlı kalabilir. Bu yüzden sunucu seçerken sanallaştırma türünü önceden kontrol edin.

Docker ne kadar disk alanı kullanır, nasıl temizlenir?

Kullanım; indirdiğiniz imajlara, konteyner katmanlarına, kalıcı disk alanlarına (volume) ve log dosyalarına göre değişir; gerçek dağılımı sudo docker system df gösterir. Etiketsiz imajları docker image prune, durmuş konteynerleri docker container prune temizler. Daha kapsamlı olan docker system prune komutunu, özellikle volume temizliği içeren seçeneklerle, veritabanı verisini silmemek için listeyi okumadan onaylamayın.

Bu makale yardımcı oldu mu?

Geri bildiriminiz için teşekkürler!

kişi faydalı buldu

Paylaş

X LinkedIn WhatsApp

Sorunuz mu var? Destek ekibimize yazın.