Orta İşin Mutfağı

Docker & Containerization: Hızlı Giriş

Bu rehber, Docker ekosistemini profesyonel bir bakış açısıyla (özellikle backend odaklı) ele alan, terminal dostu bir başvuru kaynağıdır.

Docker & Containerization: Hızlı Giriş

🐳 Docker & Containerization: Hızlı Giriş

Bu rehber, Docker ekosistemini profesyonel bir bakış açısıyla (özellikle backend odaklı) ele alan, terminal dostu bir başvuru kaynağıdır. Geliştirme ortamından prodüksiyon hattına kadar ihtiyaç duyacağın tüm temel taşları içerir.


🏗️ Docker Mimarisi: Kısa ve Öz

Docker, işletim sistemi seviyesinde sanallaştırma yaparak uygulamaları izole eder. Sanal makinelerin (VM) aksine, ana işletim sisteminin çekirdeğini (kernel) paylaşır, bu da onu çok daha hafif ve hızlı yapar.

  • Docker Engine: Konteynerleri çalıştıran çekirdek yapı.
  • Images: Uygulamanın çalışması için gereken her şeyin (binary, config, libs) dondurulmuş halidir.
  • Containers: İmajların yaşayan, nefes alan halidir.
  • Volumes: Konteynerler geçicidir (ephemeral), veriler kalıcıdır. Veriyi saklamak için kullanılırlar.

⌨️ Olmazsa Olmaz CLI Komutları

Konteyner Operasyonları

Komut Açıklama
docker run -it --rm <image> İnteraktif terminal açar, çıkışta konteyneri siler.
docker run -d -p 5000:8080 <image> Arka planda çalıştırır (Host:5000 -> Container:8080).
docker logs -f <container_id> Logları canlı olarak takip etmeni sağlar.
docker stats Çalışan konteynerlerin RAM/CPU kullanımını gösterir.

İmaj ve Temizlik

Komut Açıklama
docker image prune Kullanılmayan "dangling" imajları temizler.
docker system prune -a --volumes Tüm durmuş konteynerleri, ağları ve imajları siler.
docker inspect <id> Konteyner veya imajın tüm detaylarını (JSON) döner.

📜 Dockerfile: Profesyonel Yapılandırma

İyi bir Dockerfile, Multi-Stage Build kullanmalıdır. Bu, final imajının boyutunu küçültür ve güvenliği artırır. İşte bir .NET 9/10 uygulaması için örnek:

# 1. Build Stage
FROM mcr.microsoft.com/dotnet/sdk:9.0-alpine AS build
WORKDIR /src
COPY ["MyApi.csproj", "./"]
RUN dotnet restore
COPY . .
RUN dotnet publish -c Release -o /app/publish

🧩 Docker Compose: Çoklu Servis Yönetimi

Mikroservis mimarilerinde veya bağımlı servislerde (DB, Redis) hayat kurtarır.

version: '3.8'

services:
  api:
    build: .
    ports:
      - "5000:80"
    environment:
      - ConnectionStrings__DefaultConnection=Host=db;Database=mydb;Username=admin;Password=secret
    depends_on:
      - db

  db:
    image: postgres:16-alpine
    volumes:
      - pgdata:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: secret

volumes:
  pgdata:

🌐 Networking: Konteynerler Arası İletişim

Docker'da konteynerler isimleriyle birbirlerine ulaşabilirler.

  • Bridge (Varsayılan): Konteynerler arası özel bir ağ oluşturur.
  • Host: Konteynerin ağ izolasyonunu kaldırır, doğrudan ana makinenin portlarını kullanır.
  • None: Ağ bağlantısını tamamen kapatır.

İpucu: Docker Compose kullanırken tüm servisler otomatik olarak aynı ağa dahil edilir, bu yüzden api servisi db servisine doğrudan http://db:5432 üzerinden erişebilir.


💾 Veri Kalıcılığı (Volumes vs Binds)

  1. Volumes: Docker tarafından yönetilir. /var/lib/docker/volumes altında tutulur. En güvenli yoldur.
  2. Bind Mounts: Host makinedeki belirli bir klasörü (C:/proje/logs) konteynere bağlar. Geliştirme aşamasında kodları canlı görmek için idealdir.
# Bind Mount örneği
docker run -v $(pwd):/app -w /app my-image dotnet watch run

🛡️ Güvenlik ve Performans İpuçları

  • Root Kullanmayın: USER komutu ile yetkisiz bir kullanıcı oluşturup uygulamayı onunla çalıştırın.
  • Alpine Image Seçin: Daha küçük saldırı yüzeyi ve daha hızlı yükleme süresi için alpine tabanlı imajları tercih edin.
  • .dockerignore Kullanın: node_modules, bin/, obj/ gibi gereksiz dosyaların imajın içine girmesini engelleyin.
  • Healthcheck Ekleyin: Konteynerin sadece "çalışıyor" olması değil, "sağlıklı" olması da önemlidir.

Not: Docker öğrenmek bir maratondur. Her hata mesajı, Linux çekirdeği ve ağ yapılandırması hakkında yeni bir ders öğretir. Logları okumaktan korkma!


Etiketler: Docker Virtualization Dockerhub Shell
ETÜ BMT
Moderatör
ETÜ BMT 2018 yılında kurulan, Erzurum Teknik Üniversitesi bünyesinde faaliyet gösteren öğrenci kulübüdür.