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ştur
  • docker run -d -p 3000:3000 myapp:v1 — çalıştır
  • docker ps — çalışan container'lar
  • docker logs container_id — loglar
  • docker exec -it container_id sh — içeri gir
  • docker stop container_id — durdur
  • docker rm container_id — sil
  • docker images — image listesi
  • docker pull nginx — image indir
  • docker 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.

İlgili Terimler