FibaCloud
İçeriğe geç
Soru sor

Kapatmak için ESC tuşuna basın

Ubuntu Üzerinde Docker Kurulumu ve Uygulama Dağıtımı

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.

İmaj, konteyner ve kalıcı veri
İmaj, konteyner ve kalıcı veri İmaj uygulamanın çalıştırılabilir paketidir. Aynı imajdan birden fazla konteyner oluşturulabilir. Kalıcı veri konteynerin yazılabilir katmanından ayrı bir volume içinde tutulur.
Görselin adım adım açıklaması
  1. Derle: Kaynak ve Dockerfile ile imaj üret.
  2. Dağıt: Sürümlenmiş imajı registry’ye gönder.
  3. Çalıştır: Aynı imajdan konteynerler oluştur.
  4. 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

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

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir