Tüm yazılar
Matematik20 Aralık 2024

Docker ve Konteynerler: Yazılımın "Taşıma Kabı" Çağı

Gemi konteynerleri uluslararası ticareti standartlaştırdı. Docker da aynısını yazılımla yaptı: "Bende çalışıyor" sorunu tarihe karıştı.

Matematik Karavanı 6 dk okuma 5 soru
Konteyner gemisi — Docker metaforu

"Bende çalışıyor" sorunu

Yazılım dünyasının ezeli problemi:

  • Geliştirici: "Benim makinemde çalışıyor."
  • Production: "Bizim sunucuda çalışmıyor."

Sebep: işletim sistemi, kütüphane versiyonları, ortam değişkenleri farklı.

Çözüm fikri: uygulamayı tüm bağımlılıklarıyla birlikte paketle. Bir yere kopyalayınca aynı şekilde çalışsın.

Bu konteyner fikridir. Docker 2013'te bunu pratik hale getirdi.

Sanal makine ile fark

Sanal makine (VM)

  • Tam işletim sistemi: kernel + user space.
  • Hypervisor (VMware, VirtualBox, Hyper-V).
  • Ağır: gigabaytlar, dakikalar.
  • İzole: tam farklı OS.

Konteyner

  • Sadece user space + uygulama.
  • Host kernel paylaşır.
  • Hafif: megabaytlar, milisaniye.
  • İzolasyon: kernel cgroups + namespaces.

Konteyner VM'den 10-100x hafif.

Linux cgroups + namespaces

Konteyner sihri Linux kernel'inden gelir:

Namespaces

İzole görünüm:

  • PID: kendi süreç listesi.
  • Network: kendi ağ arayüzü.
  • Mount: kendi dosya sistemi.
  • User: kendi kullanıcı.

Cgroups (Control Groups)

Kaynak sınırlaması:

  • CPU.
  • Bellek.
  • I/O.

Google 2007'de Linux'a katkı yaptı.

Docker (2013)

Solomon Hykes (Fransız) ve dotCloud ekibi. Linux konteynerlerine kullanıcı dostu API.

docker run nginx
docker build -t my-app .
docker push my-app

3 komut → tüm dünya konteynerleri kullanmaya başladı.

Dockerfile

Konteyner reçetesi:

FROM python:3.11
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
CMD ["python", "main.py"]

Tek dosya = uygulamanın tam ortamı.

Image vs Container

  • Image: durağan tarif. Sınıf gibi.
  • Container: çalışan örnek. Nesne gibi.

Bir image'dan binlerce konteyner üretilebilir.

Layered file system

Docker image'lar katmanlı:

  • Base image (örn. Ubuntu).
    • Python.
    • Bağımlılıklar.
    • Uygulama kodu.

Her katman paylaşılır — disk tasarrufu.

Docker Hub

Public registry: docker.io.

  • Nginx, Python, Postgres — herkesin kullandığı resmi image'lar.
  • Pull ile indirme: docker pull nginx.

Açık kaynak + paylaşım kültürü.

Kubernetes (k8s)

Google 2014: Docker konteynerlerini dağıtık yöneten sistem.

  • Pod: 1+ konteyner.
  • Service: pod'lara giriş.
  • Deployment: pod sayısı, güncelleme.
  • Ingress: dışarıya açma.

Modern bulutun standartı. AWS EKS, Google GKE, Azure AKS.

Cloud Native ekosistem

CNCF (Cloud Native Computing Foundation):

  • Kubernetes.
  • Prometheus: monitoring.
  • Envoy, Istio: service mesh.
  • Helm: paket yöneticisi.
  • Containerd, CRI-O: konteyner runtime.

Docker vs Podman

Son yıllarda alternatifler:

  • Podman: daemonsuz Docker.
  • Containerd: Docker'in alt katmanı, ayrı.
  • OCI standartı: image format standartı.

ML için Docker

Modern ML projesi standart:

FROM pytorch/pytorch:2.0-cuda12.1
RUN pip install transformers
COPY . /app
CMD ["python", "train.py"]

GPU desteği: NVIDIA Container Toolkit ile konteynerden GPU'ya erişim.

Avantajlar:

  • Reproducibility.
  • Hızlı dağıtım.
  • Bulut taşıma.

Türk endüstri örnekleri

  • Trendyol: tüm uygulamalar Docker + Kubernetes.
  • Garanti BBVA: OpenShift (kurumsal Kubernetes).
  • Türk Telekom: kendi konteyner platformu.
  • TÜBİTAK BİLGEM: Kubernetes araştırma.

Sınırlamalar

  • Güvenlik: kernel paylaşımı → escape açığı.
  • Windows desteği: hâlâ zayıf (Linux önce, Windows sonra).
  • Persistence: konteyner geçici, veri ayrı yönetilir.
  • Complexity: Kubernetes öğrenme eğrisi dik.

Solomon Hykes

Docker mucidi, 2017'de Docker Inc.'den ayrıldı. Sebepleri:

  • Docker şirketi mali zorlukta.
  • Hykes araştırmaya dönmek istedi.
  • Sonraki proje: Dagger (CI/CD).

Docker Inc. bölündü: enterprise → Mirantis, OSS → CNCF.

Felsefe

Docker temel mesajı: "Yazılım taşınabilir paketler halinde olmalı".

Konteynerler modern mikroservis mimarisinin vazgeçilmez taşı.

Kapanış

Docker, modern bulut çağının temel taşı. Konteyner fikri uzun yıllar vardı, ama Docker kullanıcı deneyimi ile devrim yarattı.

Bir yazılım mühendisinin olgunluk işareti: Dockerfile ile uygulamayı paketleyebilmek.

Yazılım dünyasının standart kabı = konteyner.

Etiketler

DockerkonteynerKubernetescgroupssanallaştırma

Kendinizi Test Edin

Cevaplarınız profilinizde istatistik olarak saklanır.

1. Konteyner ile VM farkı?

2. Docker'ın temel Linux teknolojileri?

3. Kubernetes kim çıkardı?

4. Image vs Container?

5. Docker mucidi?