
Docker, uygulamayı bağımlılıklarıyla birlikte bir imaj olarak paketleyip konteynerde çalıştırır. Konteyner izolasyonu yararlıdır; ancak varsayılan olarak CPU ve bellek tüketimini sınırlamaz, yedekleme veya yüksek erişilebilirlik sağlamaz. Bu rehber yeni bir Ubuntu 24.04 LTS sunucusunda Docker Engine ve tek bir statik web uygulaması için hazırlanmıştır.

Görselin adım adım açıklaması
- Derle: Kaynak ve Dockerfile ile imaj üret.
- Dağıt: Sürümlenmiş imajı registry’ye gönder.
- Çalıştır: Aynı imajdan konteynerler oluştur.
- Kalıcı tut: Veriyi ayrı bir volume’da sakla.
Başlamadan önce
Sudo kullanıcısı, yeterli disk alanı ve resmî Docker deposuna ağ erişimi gerekir. Mevcut Docker, Podman, Kubernetes veya bir kontrol paneli kurulumu varsa paketleri kaldırarak başlamayın; Docker’ın çakışan paketler ve yükseltme belgesini inceleyin. Bu örnek üretim kümesi, rootless Docker veya çok sunuculu orkestrasyon kurulumu değildir.
cat /etc/os-release
dpkg --print-architecture
df -h /var/lib
sudo ss -ltnp '( sport = :8080 )' Docker komutlarını burada sudo ile kullanıyoruz. Kullanıcıyı docker grubuna eklemek root düzeyinde yetki verebilir; sıradan bir erişim kolaylığı gibi değerlendirmeyin. Aşağıdaki kurulum, ağ ve konteyner çalışma kabulünü kendi ayrı test sunucunuzda tamamlayın.
1. Resmî depodan Docker Engine kurun
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
sudo tee /etc/apt/sources.list.d/docker.sources > /dev/null <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
sudo apt update
apt-cache policy docker-ce
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker.sources dosyası zaten yönetiliyorsa üzerine yazmadan mevcut kaydı inceleyin. Paket kökeninin resmî Docker deposu olduğunu ve kurulan sürümü kaydedin. Bu akış Ubuntu içindir; RPM tabanlı dağıtımlarda aynen uygulanmaz.
sudo systemctl status docker --no-pager
sudo docker version
sudo docker run --rm hello-world hello-world imaj çekme ve temel konteyner çalıştırmayı kontrol eder; uygulamanızın erişim, kalıcı veri veya geri dönüş kabulünü yapmaz.
2. Basit bir uygulama ve imaj kaydı hazırlayın
Yeni bir çalışma dizininde statik sayfa oluşturun:
mkdir -p fc-docker-demo/site
cd fc-docker-demo
printf '%s\n' '<!doctype html><html lang="tr"><title>Docker test</title><h1>Container OK</h1></html>' > site/index.html
sudo docker pull nginx:stable-alpine
FC_IMAGE="$(sudo docker image inspect nginx:stable-alpine --format '{{index .RepoDigests 0}}')"
printf '%s\n' "$FC_IMAGE" > image-digest.txt stable-alpine değişebilen bir etikettir. Bu nedenle çalıştırmada çektiğiniz imajın digest değerini kullanıp sürüm kaydını saklıyoruz. Üretim güncellemesinde yeni digest’i önce test edin; güncelleme eski kaydı sessizce değiştirmemelidir. İmaj içine parola, API anahtarı veya özel anahtar gömmeyin.
3. Yerel port ve kaynak sınırlarıyla çalıştırın
sudo docker run -d --name fc-web-demo \
--restart unless-stopped \
--memory 128m --cpus 0.50 --pids-limit 128 \
--security-opt no-new-privileges:true \
--read-only \
--tmpfs /var/cache/nginx:rw,noexec,nosuid,size=32m \
--tmpfs /var/run:rw,noexec,nosuid,size=1m \
--tmpfs /tmp:rw,noexec,nosuid,size=8m \
-p 127.0.0.1:8080:80 \
-v "$PWD/site:/usr/share/nginx/html:ro" \
"$FC_IMAGE" Ad aynı sunucuda zaten kullanılıyorsa mevcut konteyneri silmeyin; farklı bir test adı veya mevcut dağıtımın güncelleme planını kullanın. Bu örnekte web dosyaları salt okunur bağlanır, Nginx’in çalışma dosyaları sınırlı geçici alanlarda tutulur. Bunlar her uygulamaya aynen uygun varsayılanlar değildir; bellek ve yazma gereksinimlerini ölçerek belirleyin.
127.0.0.1:8080:80 yalnız sunucunun loopback arayüzünde yayın yapar. -p 80:80 ise varsayılan olarak tüm host arayüzlerine açılabilir ve mevcut web sunucusuyla çakışabilir. Docker’ın NAT/firewall kuralları UFW beklentilerinden farklı olabilir; yalnız “UFW kapalı port gösteriyor” kontrolüne güvenmeyin. Eski Docker sürümlerindeki localhost yayınlama sınırlamalarını da resmî belge üzerinden kontrol edin.
4. Yanıtı, günlükleri ve erişim sınırını doğrulayın
sudo docker ps --filter name=fc-web-demo
sudo docker logs --tail 50 fc-web-demo
curl --fail http://127.0.0.1:8080/
sudo docker inspect fc-web-demo --format '{{.HostConfig.Memory}} {{.HostConfig.NanoCpus}}'
sudo docker stats --no-stream fc-web-demo Sayfa Container OK içermeli. Bellek ve CPU ayarları boş/sınırsız olmamalı. Ayrı bir makineden sunucunun genel IP adresindeki 8080 portuna doğrudan erişim başarılı olmamalıdır. Uygulamayı uzaktan incelemek için kendi bilgisayarınızda SSH tüneli açabilirsiniz:
ssh -N -L 8080:127.0.0.1:8080 kullanici@sunucu-adresi Kamuya açılacak uygulamada önüne HTTPS sunan bir reverse proxy veya yük dengeleyici koyun. Alan adı, sertifika yenileme, doğru proxy başlıkları ve sağlık kontrolünü ayrıca doğrulayın; Docker kurulumu bunları otomatik tamamlamaz.
5. Güncelleme, kalıcı veri ve geri dönüş
Bu statik örneğin içeriği hosttaki site dizinindedir. Veritabanını veya yüklenen dosyaları konteynerin geçici yazılabilir katmanında bırakmayın. Volume kullanmak tek başına yedek değildir; uygulamaya tutarlı yedek ve ayrı ortama geri yükleme testi gerekir.
Yeni imajı farklı bir konteyner adı ve 127.0.0.1:8081:80 gibi ayrı bir portla çalıştırın. İçerik, sağlık ve kaynak kontrolleri geçtikten sonra reverse proxy hedefini değiştirin. Eski imaj digest’i ve uyumlu veri yedeği geri dönüş için korunmalıdır; şema değişmişse sadece eski imajı başlatmak yeterli olmayabilir.
Testi temizlemek için yalnız bu örneği durdurup kaldırın:
sudo docker stop fc-web-demo
sudo docker rm fc-web-demo docker system prune --volumes gibi bütün sunucuyu etkileyen temizleme komutlarını rutin geri dönüş adımı yapmayın.
Sık karşılaşılan sorunlar
Port dolu: ss ile dinleyiciyi bulun veya örneğin yerel portunu değiştirin. Permission denied: dosya ve grup izinlerini inceleyin; Docker socket’ini herkese açmayın. Konteyner kapanıyor: docker logs ve çıkış kodunu kontrol edin; bellek sınırında OOM olup olmadığını inceleyin. İmaj çekilemiyor: DNS, TLS ve depo erişimini kontrol edin; doğrulanmayan bir aynaya rastgele geçmeyin.
Resmî kaynaklar
- Ubuntu için Docker Engine kurulumu
- Port yayınlama ve localhost kapsamı
- Konteyner CPU ve bellek sınırları
- Docker paket filtreleme ve güvenlik duvarları
Teknik içerik ve kaynaklar 4 Ekim 2026 tarihinde gözden geçirildi. Sürüm veya sağlayıcı değişikliğinde ilgili resmî belgeyi yeniden kontrol edin.
Bir yanıt yazın