Modern yazılım geliştirmenin vazgeçilmez araçları Docker ve Kubernetes'i öğrenmek istiyorsunuz ama nereden başlayacağınızı bilmiyor musunuz? Bu kapsamlı rehberde container teknolojilerinin temellerinden production ortamına kadar her şeyi adım adım öğreneceksiniz.

Container Teknolojisi Nedir?

Container, bir uygulamayı çalıştırmak için gereken tüm bileşenleri (kod, runtime, sistem araçları, kütüphaneler) tek bir pakette toplayan hafif ve taşınabilir bir sanallaştırma yöntemidir.

Container vs Virtual Machine

Özellik Container Virtual Machine
Başlangıç Süresi Saniyeler Dakikalar
Boyut MB düzeyinde GB düzeyinde
İşletim Sistemi Host OS kernel paylaşımı Tam OS gerektirir
İzolasyon Process seviyesi Tam izolasyon
Kaynak Kullanımı Düşük Yüksek

Docker Nedir?

Docker, container'ları oluşturmak, dağıtmak ve çalıştırmak için kullanılan açık kaynaklı bir platformdur. 2013'te piyasaya sürülmesinden bu yana yazılım geliştirme ve dağıtım süreçlerini köklü bir şekilde değiştirdi.

Docker'ın Temel Bileşenleri

  • Docker Engine: Container'ları çalıştıran ana motor
  • Docker Image: Container'ın şablonu, okunabilir katmanlar
  • Docker Container: Image'dan oluşturulan çalışan instance
  • Dockerfile: Image oluşturmak için talimatlar
  • Docker Hub: Image'ların depolandığı merkezi registry
  • Docker Compose: Çoklu container yönetimi

Docker Kurulumu

Windows:

# Docker Desktop'ı indirin
# https://www.docker.com/products/docker-desktop

# Kurulumdan sonra PowerShell'de doğrulayın:
docker --version
docker run hello-world

Linux (Ubuntu):

# Eski sürümleri kaldırın
sudo apt-get remove docker docker-engine docker.io

# Docker'ı kurun
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

# Kullanıcıyı docker grubuna ekleyin
sudo usermod -aG docker $USER

Temel Docker Komutları

# Image indirme
docker pull nginx

# Container çalıştırma
docker run -d -p 80:80 --name webserver nginx

# Çalışan container'ları listeleme
docker ps

# Tüm container'ları listeleme
docker ps -a

# Container durdurma
docker stop webserver

# Container silme
docker rm webserver

# Image listeleme
docker images

# Image silme
docker rmi nginx

Dockerfile Örneği

Node.js uygulaması için örnek Dockerfile:

# Base image
FROM node:18-alpine

# Çalışma dizini
WORKDIR /app

# Bağımlılıkları kopyala ve yükle
COPY package*.json ./
RUN npm install --production

# Uygulama kodunu kopyala
COPY . .

# Port tanımı
EXPOSE 3000

# Başlangıç komutu
CMD ["node", "server.js"]

Docker Compose Örneği

Çoklu servis yönetimi için docker-compose.yml:

version: '3.8'

services:
  web:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
      - DB_HOST=db
    depends_on:
      - db
      - redis

  db:
    image: postgres:15
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=secret
      - POSTGRES_DB=myapp

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

volumes:
  postgres_data:

Kubernetes Nedir?

Kubernetes (K8s), Google tarafından geliştirilen ve şu anda Cloud Native Computing Foundation (CNCF) tarafından yönetilen açık kaynaklı bir container orkestrasyon platformudur. Containerized uygulamaların dağıtımını, ölçeklenmesini ve yönetimini otomatikleştirir.

Neden Kubernetes?

  • Otomatik Ölçekleme: Yüke göre pod sayısını artırır/azaltır
  • Self-Healing: Hatalı container'ları otomatik yeniden başlatır
  • Load Balancing: Trafiği otomatik dağıtır
  • Rolling Updates: Kesintisiz güncelleme
  • Secret Management: Hassas verileri güvenli yönetim
  • Service Discovery: Servisler arası otomatik iletişim

Kubernetes Mimarisi

Control Plane (Master) Bileşenleri:

  • API Server: Kubernetes API'sini sunan merkezi bileşen
  • etcd: Cluster state'ini saklayan key-value store
  • Scheduler: Pod'ları uygun node'lara atar
  • Controller Manager: Cluster durumunu yönetir

Worker Node Bileşenleri:

  • Kubelet: Pod'ları yöneten agent
  • Kube-proxy: Network kurallarını yönetir
  • Container Runtime: Docker, containerd vb.

Kubernetes Temel Kavramları

  • Pod: En küçük deploy edilebilir birim, bir veya daha fazla container
  • Deployment: Pod'ların declarative yönetimi
  • Service: Pod'lara erişim sağlayan network abstraction
  • Namespace: Kaynakların mantıksal izolasyonu
  • ConfigMap: Konfigürasyon verilerini saklama
  • Secret: Hassas verileri saklama
  • Ingress: HTTP/HTTPS routing

Minikube ile Lokal Kubernetes

# Minikube kurulumu (Windows)
choco install minikube

# Minikube başlatma
minikube start

# Kubernetes dashboard
minikube dashboard

# kubectl ile cluster kontrolü
kubectl cluster-info
kubectl get nodes

Kubernetes YAML Örnekleri

Deployment:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
  labels:
    app: web
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: web
        image: nginx:latest
        ports:
        - containerPort: 80
        resources:
          limits:
            memory: "128Mi"
            cpu: "500m"

Service:

apiVersion: v1
kind: Service
metadata:
  name: web-service
spec:
  selector:
    app: web
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  type: LoadBalancer

Temel kubectl Komutları

# Pod'ları listele
kubectl get pods

# Deployment oluştur
kubectl apply -f deployment.yaml

# Servisleri listele
kubectl get services

# Pod loglarını görüntüle
kubectl logs pod-name

# Pod'a bağlan
kubectl exec -it pod-name -- /bin/bash

# Deployment ölçekle
kubectl scale deployment web-app --replicas=5

# Deployment güncelle
kubectl set image deployment/web-app web=nginx:1.25

Best Practices

Docker Best Practices

  • Küçük base image kullanın (Alpine)
  • Multi-stage build uygulayın
  • .dockerignore dosyası kullanın
  • Root olmayan kullanıcı kullanın
  • Image'ları tag'leyin ve versiyonlayın
  • Secrets'ları image'a dahil etmeyin

Kubernetes Best Practices

  • Resource limits tanımlayın
  • Liveness ve Readiness probe kullanın
  • Namespace ile izolasyon sağlayın
  • ConfigMap ve Secret kullanın
  • RBAC ile yetkilendirme yapın
  • Pod Security Standards uygulayın

Öğrenme Yol Haritası

  1. Hafta 1-2: Docker temelleri ve Dockerfile yazımı
  2. Hafta 3-4: Docker Compose ve multi-container uygulamalar
  3. Hafta 5-6: Kubernetes temelleri ve Minikube
  4. Hafta 7-8: Deployments, Services, ConfigMaps
  5. Hafta 9-10: Helm charts ve GitOps
  6. Hafta 11-12: Production cluster yönetimi

Turkuaz Ajans'ta: Projelerimizde Docker ve Kubernetes kullanarak ölçeklenebilir, güvenilir ve kolay yönetilebilir altyapılar oluşturuyoruz. CI/CD pipeline'larımız containerized ortamlarda çalışıyor.

DevOps Danışmanlığı ve Altyapı Desteği

Container mimarisine geçiş ve Kubernetes altyapısı için uzman desteği alın.

DevOps Teklifi Al