
Docker Nedir? Sıfırdan Temeller
2026-07-01 · 10 dk okuma
"Bende çalışıyor ama sunucuda çalışmıyor" cümlesini duymayan yazılımcı yoktur. Docker tam da bu sorunu çözmek için doğdu: uygulamanı, çalışması için gereken her şeyle (kütüphaneler, çalışma zamanı, sistem araçları) birlikte tek bir pakete koyar; o paket laptopunda da, sunucuda da, bulutta da birebir aynı çalışır.
Image ve container farkı
İki temel kavram var. Image, uygulamanın dondurulmuş bir şablonudur — değişmez bir kalıp. Container ise o image'dan çalışan canlı bir örnektir. Bir image'dan istediğin kadar container çalıştırabilirsin; tıpkı bir sınıftan (class) birden çok nesne (object) üretmek gibi.
Dockerfile: image'ı sen tarif edersin
Bir image'ı nasıl kuracağını Dockerfile adında bir metin dosyasında adım adım yazarsın. Örnek bir Node.js uygulaması için:
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]En sık kullanacağın komutlar
- docker build -t uygulamam . → Dockerfile'dan image üret
- docker run -p 3000:3000 uygulamam → container'ı başlat ve portu yayınla
- docker ps → çalışan container'ları listele
- docker logs <id> → bir container'ın loglarını gör
- docker exec -it <id> sh → çalışan container'ın içine gir
Neden bu kadar önemli?
Docker, modern DevOps'un temel yapı taşıdır: Kubernetes container'ları orkestre eder, CI/CD pipeline'ları image build eder, cloud servisleri container çalıştırır. Yani Docker'ı anlamadan Kubernetes veya CI/CD'yi tam kavrayamazsın.
Vaka: 900MB imajı 90MB'a indir
Yukarıdaki basit Dockerfile çalışır ama şişkin: build araçları, dev bağımlılıkları ve kaynak kodu imaja sızar. Prod imajı yalın olmalı. Multi-stage build tam olarak bunu çözer.
$ docker build -t web:naive .$ docker images web:naiveREPOSITORY TAG SIZEweb naive 912MB # build araçları + node_modules + kaynak, hepsi içeride$ docker history web:naive | head -3 # katmanlar nereye gitmiş?<missing> 380MB RUN npm install<missing> 280MB COPY . .
Multi-stage Dockerfile
# 1. aşama: derle
FROM node:20 AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
# 2. aşama: sadece çalışma zamanı
FROM node:20-alpine
WORKDIR /app
COPY --from=build /app/dist ./dist
COPY --from=build /app/node_modules ./node_modules
CMD ["node", "dist/server.js"]$ docker build -t web:slim .$ docker images web:slimREPOSITORY TAG SIZEweb slim 92MB # ✓ 912MB → 92MB (~%90 küçülme)
Dikkat
Yaygın hata: gizli bilgileri (env, .aws, .git) imaja kopyalamak. 'COPY . .' her şeyi alır. Bir .dockerignore ekle (node_modules, .git, .env) — hem imajı küçültür hem sır sızmasını önler.
Mini görev
Küçük bir Node/Go uygulamasını önce naif tek aşamalı Dockerfile ile build et, boyutu ölç. Sonra multi-stage'e çevir ve alpine tabanına geç. 'docker images' ile önce/sonra boyutu karşılaştır; hedef en az %70 küçülme. .dockerignore eklemeyi unutma.
Uygulamalı görev — tarayıcıda dene
En hızlı öğrenme yolu komutları gerçek bir terminalde denemek — Cloudpuz'un hands-on lab'ları tam da bunun için tasarlanıyor.
Resmi kaynaklar
Son doğrulama: 2026-07-17
Sıkça Sorulan Sorular
Docker nedir?
Docker, uygulamanı çalışması için gereken her şeyle (kütüphaneler, çalışma zamanı, sistem araçları) birlikte tek bir pakete koyan konteyner teknolojisidir. O paket laptopunda da, sunucuda da, bulutta da birebir aynı çalışır ve 'bende çalışıyor ama sunucuda çalışmıyor' sorununu ortadan kaldırır.
Docker image ile container arasındaki fark nedir?
Image, uygulamanın dondurulmuş, değişmez bir şablonudur. Container ise o image'dan çalışan canlı bir örnektir. Bir image'dan istediğin kadar container çalıştırabilirsin; tıpkı bir sınıftan birden çok nesne üretmek gibi.
Dockerfile nedir?
Dockerfile, bir image'ı nasıl kuracağını adım adım yazdığın bir metin dosyasıdır. İçinde FROM ile taban image, WORKDIR, COPY, RUN gibi komutlarla bağımlılık kurulumu ve CMD ile çalıştırılacak komut tanımlanır.
Docker imaj boyutu nasıl küçültülür?
Multi-stage build kullanmak imajı ciddi ölçüde küçültür: bir aşamada uygulama derlenir, ikinci aşamada yalnızca çalışma zamanı çıktısı alınır. Örnekte 912MB'lık naif bir imaj, multi-stage ve alpine tabanıyla 92MB'a (yaklaşık %90 küçülme) inmiştir.
Docker imajına gizli bilgilerin sızmasını nasıl önlerim?
'COPY . .' her şeyi imaja alır, bu yüzden env, .aws, .git gibi gizli dosyalar sızabilir. Bir .dockerignore dosyası ekleyerek (node_modules, .git, .env) hem imajı küçültür hem de sır sızmasını önlersin.
Okumak yetmez — dene.
Bu konuları tarayıcıda gerçek terminalde uygula.