Docker ve Kubernetes Başlangıç Rehberi 2025
zafer ak
Yazar
Container teknolojisi, modern yazılım geliştirme ve dağıtımının temel taşı haline gelmiştir. Bu rehberde Docker ve Kubernetes'in temellerini öğreneceksiniz.
Container Nedir?
Container, bir uygulamayı ve tüm bağımlılıklarını (kütüphaneler, yapılandırmalar) bir paket içinde izole eden hafif bir sanallaştırma yöntemidir. Sanal makinelerden farklı olarak, container'lar işletim sistemi çekirdeğini paylaşır.
Container vs Sanal Makine
| Özellik | Container | Sanal Makine |
|---|---|---|
| Başlangıç süresi | Saniyeler | Dakikalar |
| Boyut | MB | GB |
| İ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 en popüler platformdur. 2013 yılında piyasaya sürülmüş ve container devrimini başlatmıştır.
Docker Kurulumu
Ubuntu/Debian:
# Eski versiyonları kaldır
sudo apt-get remove docker docker-engine docker.io containerd runc
# Repository kurulumu
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
# Docker GPG key ekle
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# Repository ekle
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list
# Docker kur
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# Kullanıcıyı docker grubuna ekle
sudo usermod -aG docker $USER
Windows ve macOS:
Docker Desktop indirin ve kurun.
Temel Docker Komutları
# Container çalıştır
docker run hello-world
# Nginx container başlat
docker run -d -p 80:80 nginx
# Çalışan container'ları listele
docker ps
# Tüm container'ları listele
docker ps -a
# Container durdur
docker stop <container_id>
# Container sil
docker rm <container_id>
# Image listele
docker images
# Image indir
docker pull ubuntu:22.04
Dockerfile Yazımı
Kendi Docker image'ınızı oluşturmak için Dockerfile kullanılır:
# Base image
FROM node:18-alpine
# Çalışma dizini
WORKDIR /app
# Dependency dosyalarını kopyala
COPY package*.json ./
# Dependency'leri yükle
RUN npm install
# Uygulama kodunu kopyala
COPY . .
# Port aç
EXPOSE 3000
# Uygulamayı başlat
CMD ["npm", "start"]
# Image oluştur
docker build -t my-app:1.0 .
# Container çalıştır
docker run -d -p 3000:3000 my-app:1.0
Docker Compose
Birden fazla container'ı tanımlamak ve yönetmek için Docker Compose kullanılır:
# docker-compose.yml
version: '3.8'
services:
web:
build: .
ports:
- "3000:3000"
depends_on:
- db
environment:
- DATABASE_URL=postgres://user:pass@db:5432/mydb
db:
image: postgres:15
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=pass
- POSTGRES_DB=mydb
volumes:
postgres_data:
# Compose ile başlat
docker compose up -d
# Logları görüntüle
docker compose logs -f
# Durdur ve kaldır
docker compose down
Kubernetes Nedir?
Kubernetes (K8s), Google tarafından geliştirilen açık kaynaklı bir container orkestrasyon platformudur. Container'ları otomatik olarak dağıtır, ölçeklendirir ve yönetir.
Kubernetes Mimarisi
- Control Plane: Cluster'ı yöneten bileşenler (API Server, etcd, Scheduler)
- Node: Container'ların çalıştığı worker makineler
- Pod: En küçük dağıtım birimi (bir veya daha fazla container)
- Service: Pod'lara erişim sağlayan ağ soyutlaması
- Deployment: Pod'ların istenen durumunu tanımlar
Minikube ile Lokal Kubernetes
# Minikube kurulumu (macOS)
brew install minikube
# Cluster başlat
minikube start
# kubectl yükle
brew install kubectl
# Cluster durumunu kontrol et
kubectl cluster-info
kubectl get nodes
Kubernetes Deployment Örneği
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- port: 80
targetPort: 80
type: LoadBalancer
# Deploy et
kubectl apply -f deployment.yaml
# Pod'ları listele
kubectl get pods
# Service'leri listele
kubectl get services
# Ölçeklendir
kubectl scale deployment nginx-deployment --replicas=5
Sonuç
Docker ve Kubernetes, modern DevOps pratiklerinin temelini oluşturur. Docker ile uygulamalarınızı container'lara paketleyebilir, Kubernetes ile bunları ölçekli bir şekilde yönetebilirsiniz.
Öğrenme yolu:
- Docker temellerini öğrenin
- Dockerfile yazmayı pratik edin
- Docker Compose ile çoklu container'ları yönetin
- Kubernetes kavramlarını anlayın
- Minikube ile lokal deneyim kazanın
- Managed Kubernetes (EKS, GKE, AKS) kullanın