Docker
Docker, uygulamaları container'lara paketleyen ve çalıştıran en yaygın container platformudur. 2013'te çıktı, DevOps devrimini başlattı. Dockerfile ile image build, docker-compose ile multi-container, Docker Hub ile global registry sunar. Linux, Windows, macOS'ta çalışır.
Docker Nedir?
Docker, 2013'te Solomon Hykes tarafından başlatılan, uygulamaları taşınabilir container'lara paketleyen ve yöneten açık kaynak platformdur. Container teknolojisini kitleye ulaştıran yazılım olarak bilinir. "Build once, run anywhere" prensibi ile geliştirme ve üretim arasındaki "çalışır bende" sorununu çözer.
Docker Bileşenleri
- Docker Engine: Container runtime ve API
- Docker CLI: Komut satırı arayüzü
- Docker Desktop: Windows/Mac için GUI
- Dockerfile: Image build talimat dosyası
- Docker Compose: Multi-container orchestration (dev)
- Docker Swarm: Cluster orchestration
- Docker Hub: Public registry
- containerd: Düşük seviye runtime
Dockerfile Örneği
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
Temel Komutlar
docker build -t myapp:v1 .— image oluşturdocker run -d -p 3000:3000 myapp:v1— çalıştırdocker ps— çalışan container'lardocker logs container_id— loglardocker exec -it container_id sh— içeri girdocker stop container_id— durdurdocker rm container_id— sildocker images— image listesidocker pull nginx— image indirdocker push username/myapp— registry'ye yükle
Docker Compose
Multi-container uygulamaları YAML ile tanımla:
version: '3'
services:
web:
image: nginx
ports:
- "80:80"
db:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: secret
docker compose up -d ile tümü başlar.
Docker Networking
- bridge: Varsayılan, izole subnet
- host: Container host ağını paylaşır
- none: Ağsız
- overlay: Multi-host (Swarm/K8s)
- macvlan: Container kendi MAC ile
Docker Volumes
Container silindiğinde veri kaybolur. Kalıcı veri için volume:
- Named volumes: Docker yönetir
- Bind mounts: Host dizini container'a mount
- tmpfs: RAM'de
Multi-Stage Build
Image boyutunu küçültmek için:
FROM node:20 AS builder
WORKDIR /app
COPY . .
RUN npm ci && npm run build
FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
CMD ["node", "dist/server.js"]
Docker Hub
Public image registry. Her popüler yazılımın resmi image'i var: nginx, mysql, redis, postgres, python, node. Özel hesapta image push edebilirsin.
Docker Alternatifleri
- Podman: Rootless, daemon'suz
- containerd: Lower-level, Kubernetes için
- LXC/LXD: System container
- Buildah: Image build için
Docker Güvenlik
- Root olmayan kullanıcı ile çalıştır
- Trusted image kullan
- Image scanning (Trivy, Snyk)
- Secrets için .env kullanma, secrets manager
- Docker socket'i güvende tut
- Read-only filesystem
- Resource limitleri
Docker vs Kubernetes
- Docker: Tek sunucuda container oluştur/çalıştır
- Kubernetes: Binlerce container'ı cluster'larda orkestre et
- Docker Kubernetes'in "underlying runtime"ı olabilir
MeoHost ve Docker
MeoHost VDS paketlerinde Docker yerleşik kurulabilir. CI/CD pipeline'ları için Docker registry ve automated deployment altyapısı yapılandırılabilir. Kubernetes cluster'ları enterprise VDS paketlerinde sunulur.