İletişim

Docker (Container) Nedir?

Kısa tanım

Docker, uygulamaları bağımlılıklarıyla birlikte container (konteyner) adı verilen yalıtılmış ve taşınabilir birimler hâlinde paketleyip çalıştırmayı sağlayan bir platformdur. Uygulama, Dockerfile'daki talimatlarla bir imaja (image) dönüştürülür; container ise bu imajın çalışan bir örneğidir. Container'lar sanal makinelerden farklı olarak ana makinenin işletim sistemi çekirdeğini paylaştığı için çok daha hafiftir.

Diğer adları: Container, Konteyner, Docker container, Docker imajı

Uygulama kodu, bağımlılıklar ve temel imaj katmanlarından oluşan Docker imajının paylaşılan işletim sistemi üzerinde container olarak çalışması

Container kavramı Docker'dan büyüktür

Container, bir uygulamayı çalışması için gereken her şeyle (çalışma ortamı, kütüphaneler, yapılandırma) birlikte paketleyen ve onu sistemin geri kalanından yalıtan bir çalışma birimidir. Bu yalıtım Linux çekirdeğinin iki özelliğine dayanır: süreçlerin, ağın ve dosya sisteminin ayrı bir görünümünü sağlayan namespace'ler ve CPU ile bellek kullanımını sınırlayan cgroups. Docker bu yetenekleri herkesin kullanabileceği basit bir araç setine dönüştürerek container'ları yaygınlaştırdı. Bugün imaj biçimi ve çalışma zamanı OCI (Open Container Initiative) standartlarıyla tanımlanır; Docker ile oluşturulan bir imaj Podman, containerd ya da Kubernetes üzerinde de çalışır.

Pratikteki kazanım şudur: "Benim bilgisayarımda çalışıyordu" sorunu büyük ölçüde ortadan kalkar. Geliştiricinin dizüstü bilgisayarında, test ortamında ve canlı sunucuda aynı imaj çalışır.

İmaj ve container farkı

İmaj (image)Container
Nedir?Uygulamanın ve bağımlılıklarının salt okunur, katmanlı paketiİmajın çalışan bir örneği
Değişir mi?Hayır; değişiklik yeni bir imaj sürümü demektirÜstünde geçici, yazılabilir bir katman vardır
Nerede durur?Bir imaj kayıt deposunda (registry)Bir sunucuda çalışır, durdurulur, silinir

Yazılımcılara tanıdık bir benzetmeyle: imaj bir sınıfa, container o sınıftan oluşturulmuş bir nesneye benzer. Aynı imajdan aynı anda onlarca container çalıştırılabilir.

Örnek bir Dockerfile

Aşağıdaki Dockerfile, bir Node.js API'sini paketler:

FROM node:24-alpine
WORKDIR /app

# Önce bağımlılık tanımları: kod değişse de bu katman önbellekten gelir
COPY package*.json ./
RUN npm ci --omit=dev

COPY . .
ENV NODE_ENV=production
USER node
EXPOSE 3000
CMD ["node", "server.js"]
docker build -t siparis-api:1.4.0 .
docker run -d -p 3000:3000 --name siparis-api siparis-api:1.4.0

Her talimat bir katman üretir ve Docker değişmeyen katmanları önbellekten kullanır. Bu yüzden önce yalnızca package.json kopyalanır: uygulama kodu değiştiğinde bağımlılıklar yeniden kurulmaz. Talimatların ayrıntıları resmî Dockerfile referansında yer alır.

Container mı, sanal makine mi?

ContainerSanal makine (VM)
Ne sanallaştırılır?İşletim sistemi düzeyi; ana makinenin çekirdeği paylaşılırDonanım; her VM kendi işletim sistemini çalıştırır
Başlama süresiGenellikle saniyeler, hatta daha azGenellikle daha uzun; bir işletim sistemi açılır
BoyutÇoğunlukla megabaytlarÇoğunlukla gigabaytlar
YalıtımHafif; çekirdek ortakDaha güçlü bir güvenlik sınırı

İkisi rakip değil, çoğu zaman tamamlayıcıdır: bulutta container'lar genellikle sanal makinelerin içinde çalışır. macOS ve Windows'ta Docker Desktop da Linux container'larını arka planda hafif bir sanal makine üzerinde çalıştırır.

Sık yapılan hatalar

  • Kalıcı veriyi container içinde tutmak: Container silindiğinde yazılabilir katmanı da gider. Veritabanı dosyaları ve yüklenen içerikler için volume kullanılmalıdır.
  • Sırları imaja gömmek: .env dosyasını kopyalamak ya da parolayı ENV ile yazmak, sırrı imaj katmanlarına kalıcı olarak işler. Sırlar çalışma anında verilmelidir.
  • Her şeyi latest etiketiyle yayımlamak: Hangi sürümün çalıştığını izlemeyi ve geri dönmeyi zorlaştırır; sürüm numarası ya da commit kimliği kullanın.
  • Root kullanıcıyla çalıştırmak ve şişkin imajlar: USER talimatı, .dockerignore dosyası ve çok aşamalı (multi-stage) derlemeler hem güvenliği hem boyutu iyileştirir.

Birden fazla container'ı birlikte tanımlamak için Docker Compose, çok sayıda sunucuda yönetmek için Kubernetes gibi orkestrasyon araçları kullanılır. Bu yüzden Docker, mikroservis mimarilerinin ve CI/CD hatlarının en yaygın yapı taşlarından biridir.

İlgili terimler

← Sözlüğe dön