Docker Nedir? Temeller, Mimari ve Ana Kavramlar
🐳 Docker Nedir? Temeller, Mimari ve Ana Kavramlar#
Container teknolojisi, uygulamaları ve bağımlılıklarını tek bir paket olarak izole çalıştırmamızı sağlar. Docker, bu yaklaşımı geliştiriciler ve sistemciler için pratik hale getiren araç setidir. “Bir makinede çalışan şeyin başka bir makinede de aynı şekilde çalışması” hedefini gerçekçi kılar. Donanım ya da ağ (network) özellikleri farklı olan cihazlarda izole bir çalışma ortamı sağlayarak bu sorunu çözer. “localde çalışıyordu” türü sürprizlerin önüne geçer; localde Docker ile eşzamanlı geliştirme yapıp sunucularda da aynı davranışı hedeflersiniz. Tabii bazen işler ters gidebilir—tıpkı hayatta olduğu gibi. 😄
TL;DR#
- Image: Çalıştırılabilir uygulama kalıbı (salt-okunur katmanlar).
- Container: Image’in çalışan instance’ı (yazılabilir üst katman).
- Registry: Image’lerin tutulduğu yer (Docker Hub, GHCR, ECR…).
- Docker Engine: Docker client + daemon (dockerd) + containerd + runc.
- Avantaj: Taşınabilirlik, tutarlılık, hızlı dağıtım.
Neden Docker?#
- Taşınabilirlik: Uygulama bağımlılıkları image’e gömülüdür.
- Hız: Saniyeler içinde ayağa kalkan ortamlar.
- Kaynak verimliliği: VM’lere kıyasla daha hafif izolasyon.
- Standartlaştırma: CI/CD’de aynı image her ortamda aynı davranır.
Not: VM’ler donanımı sanallaştırır; konteynerler ise işletim sistemi (OS) seviyesinde izolasyon (namespaces/cgroups) sağlar. VM ≠ Container. Bir VM üzerinde birden çok konteyner çalıştırabilirsiniz; hepsi birbirinden izole olabilir.
Mimari: Docker Engine ve Arkası#
- Docker CLI (
docker): Komut satırı arayüzü. - dockerd: Docker daemon (API + yönetim).
- containerd: Konteyner yaşam döngüsü yöneticisi.
- runc: OCI runtime; konteyneri gerçekten başlatan katman.
- OverlayFS: Katmanlı dosya sistemi (çoğunlukla
overlay2).
OCI (Open Container Initiative) standartları sayesinde image ve runtime uyumludur; bu sayede ekosistem birlikte çalışır.
Temel Kavramlar#
- Image: Katmanlı, salt-okunur kalıp. Etiketlenir (örn.
nginx:1.27). - Container: Image’in çalışan kopyası.
- Layer: Her Dockerfile adımı ayrı katman üretir (cache/yeniden kullanım).
- Registry: Image’lerin push/pull edildiği depo.
- Dockerfile: Image’i tarif eden metin dosyası.
Kurulum (Özet)#
Ayrıntılı kurulum ve varyasyonlar Bölüm 2’de detaylı olacak. Burada hızlı başlangıç:
Ubuntu 22.04/24.04 (hızlı yol)#
sudo apt update
sudo apt install -y docker.io docker-compose-plugin
sudo systemctl enable --now docker
sudo usermod -aG docker "$USER" # sudo'suz kullanım için
# Oturumu kapatıp açın veya: newgrp docker
docker --version
docker compose version
AlmaLinux 9 / RHEL türevleri (resmi repo)#
sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf -y install docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo systemctl enable --now docker
sudo usermod -aG docker "$USER"
# Oturumu kapatıp açın veya: newgrp docker
docker --version
docker compose version
macOS / Windows (WSL2)#
- macOS: Docker Desktop veya Colima (+docker CLI).
- Windows: Docker Desktop (WSL2 ile).
Detaylar ve ipuçları Bölüm 2’de.
Kurulum için ayrıntılara resmi Docker dokümantasyonundan erişebilirsiniz.
İlk Konteyner: Hello, Docker!#
docker run --rm hello-world
Basit bir web servisi:
docker run -d --name web -p 8080:80 nginx:latest
curl -I http://127.0.0.1:8080
Dockerfile ile İlk Image#
Not: Aşağıdaki Dockerfile’ın bulunduğu dizinde
app.pydosyanız olmalıdır.
FROM python:3.12-slim
WORKDIR /app
COPY . .
EXPOSE 8000
CMD ["python", "app.py"]
docker build -t saydax/simple-http:1.0 .
docker run -d -p 8000:8000 saydax/simple-http:1.0
Sonuç#
Docker, modern yazılım geliştirme ve sistem yönetiminde taşınabilirlik, hız ve standartlaştırma için vazgeçilmez bir araçtır. İlerleyen makalelerde kurulum, Compose ve üretim ortamı senaryolarını adım adım ele alacağım.