← Back to Blog
TEKNIK

Docker Nedir? Konteynerizasyon Başlangıç Rehberi

F. Çağrı BilgehanFebruary 18, 20269 min read
DockerkonteynerizasyonDevOpsdeploymentyazılım geliştirme

Docker Nedir? Konteynerizasyon Başlangıç Rehberi

"Benim bilgisayarımda çalışıyor!" — Geliştiricilerin en sık söylediği cümle. Bir uygulama geliştirme ortamında çalışır ama sunucuda hata verir. Bunun sebebi: farklı ortamlar, farklı bağımlılıklar, farklı konfigürasyonlar. Docker bu sorunu kökten çözer.

Docker Nedir?

Docker, uygulamaları konteyner adı verilen izole, taşınabilir paketlere yerleştirmenizi sağlayan bir platformdur. Konteyner, uygulamanız ve tüm bağımlılıklarını birlikte paketler — böylece her yerde aynı şekilde çalışır.

Konteyner vs Sanal Makine

| Kriter | Konteyner (Docker) | Sanal Makine (VM) | |--------|-------------------|-------------------| | Boyut | 10-100 MB | 1-10 GB | | Başlama süresi | Saniyeler | Dakikalar | | Kaynak kullanımı | Düşük | Yüksek | | İzolasyon | İşlem düzeyinde | İşletim sistemi düzeyinde | | Taşınabilirlik | Çok yüksek | Orta |

Neden Docker Kullanmalısınız?

1. Ortam Tutarlılığı

  • Geliştirme = Test = Üretim
  • "Benim bilgisayarımda çalışıyor" sorunu yok
  • Tüm bağımlılıklar paketlenmiş

2. Hızlı Dağıtım

  • Bir komutla deploy
  • Geri alma (rollback) kolay
  • CI/CD pipeline'larına uyumlu

3. İzolasyon

  • Her uygulama kendi ortamında
  • Bağımlılık çakışması yok
  • Güvenlik katmanı

4. Ölçeklenme

  • Yük arttığında yeni konteyner ekleyin
  • Kubernetes ile otomatik ölçekleme
  • Mikroservis mimarisine uygun

Temel Docker Kavramları

Image (İmaj)

Uygulamanızın şablonu — bir talimat seti.

Container (Konteyner)

Image'den oluşturulan çalışan örnek.

Dockerfile

Image oluşturmak için kullanılan talimat dosyası.

Docker Compose

Birden fazla konteyneri birlikte yönetmek için yapılandırma.

Docker Hub

Docker image'larının paylaşıldığı merkez depo.

Dockerfile Örneği (Next.js)

# Base image
FROM node:20-alpine

# Çalışma dizini
WORKDIR /app

# Bağımlılıkları kopyala
COPY package*.json ./

# Bağımlılıkları yükle
RUN npm ci

# Uygulama dosyalarını kopyala
COPY . .

# Uygulamayı derle
RUN npm run build

# Port aç
EXPOSE 3000

# Uygulamayı başlat
CMD ["npm", "start"]

Temel Docker Komutları

# Image oluştur
docker build -t my-app .

# Konteyner çalıştır
docker run -p 3000:3000 my-app

# Çalışan konteynerleri listele
docker ps

# Tüm konteynerleri listele
docker ps -a

# Konteyneri durdur
docker stop <container-id>

# Image'ları listele
docker images

# Image sil
docker rmi <image-id>

# Konteyner loglarını gör
docker logs <container-id>

Docker Compose Örneği

Web uygulaması + veritabanı + Redis:

version: '3.8'
services:
  web:
    build: .
    ports:
      - "3000:3000"
    environment:
      - DATABASE_URL=postgresql://user:pass@db:5432/mydb
    depends_on:
      - db
      - redis

  db:
    image: postgres:16
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
      POSTGRES_DB: mydb
    volumes:
      - pgdata:/var/lib/postgresql/data

  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"

volumes:
  pgdata:
# Tüm servisleri başlat
docker compose up -d

# Servisleri durdur
docker compose down

# Logları gör
docker compose logs -f

Docker Kullanım Senaryoları

| Senaryo | Açıklama | |---------|----------| | Geliştirme ortamı | Tüm ekip aynı ortamda çalışır | | CI/CD | Otomatik test ve deploy | | Mikroservisler | Her servis ayrı container | | Legacy uygulamalar | Eski uygulamaları izole etme | | Demo/prototip | Hızlı ortam kurma |

Docker Best Practices

  1. Küçük image kullanınalpine varyantları
  2. Multi-stage build — Üretim image'ını küçültün
  3. .dockerignore — Gereksiz dosyaları hariç tutun
  4. Non-root user — Güvenlik için root kullanmayın
  5. Layer caching — Sık değişen dosyaları sonra kopyalayın
  6. Health check — Konteyner sağlığını izleyin

Sonuç

Docker, modern yazılım geliştirme ve dağıtımının standartıdır. "Benim bilgisayarımda çalışıyor" günleri geride kaldı. Docker ile geliştirme, test ve üretim ortamlarınız birebir aynı olur.

Docker ve modern DevOps pratikleriyle proje geliştirmek isterseniz benimle iletişime geçin: info@cagribilgehan.com. Projelerime göz atın: cagribilgehan.com

Related Posts

Acik Kaynak Yazilim Rehberi: Nedir, Nasil Katki Yapilir?

Acik kaynak yazilim nedir ve nasil katkida bulunulur?

CI/CD Nedir? Surekli Entegrasyon ve Dagitim Rehberi

CI/CD nedir ve nasil kurulur?