Bloga Dön
Özel Yazılım

Docker Nedir, Ne İşe Yarar? İşletmeler İçin Rehber

Docker nedir, konteyner ile sanal makine farkı ne, bir işletmenin yazılım projesine ne kazandırır? Dockerfile örneği, ne zaman gerekli olduğu ve teslimde nelerin istenmesi gerektiği.

DockerKonteynerDevOpsÖzel Yazılım

Docker, bir uygulamayı çalışması için gereken her şeyle (kod, çalışma ortamı, kütüphaneler, ayarlar) birlikte "konteyner" adı verilen taşınabilir bir pakete koyan araçtır. Böylece uygulama geliştiricinin bilgisayarında, test sunucusunda ve canlı ortamda aynı şekilde çalışır. İşletme açısından karşılığı basittir: "bende çalışıyordu" sorunları azalır, sunucu değiştirmek ve yeni bir ortam kurmak günler değil dakikalar sürer.

Docker nedir ve nasıl çalışır?

Docker üç kavram üzerine kuruludur. İmaj, uygulamanın salt okunur bir fotoğrafıdır: hangi işletim sistemi katmanı, hangi Node.js ya da .NET sürümü, hangi dosyalar. Konteyner, bu imajın çalışan bir kopyasıdır. Dockerfile ise imajın nasıl üretileceğini adım adım anlatan metin dosyasıdır ve kodla birlikte depoda durur.

  • İmaj: sürüm etiketiyle saklanan, değişmeyen paket (ör. api:1.4.2).
  • Konteyner: imajdan başlatılan, izole çalışan süreç; silinip saniyeler içinde yeniden açılabilir.
  • Dockerfile: imajın tarifi; kurulum adımlarının belgesi de odur.
  • Registry: imajların saklandığı depo (Docker Hub, GitHub Container Registry veya şirket içi bir depo).
  • Docker Compose: uygulama, veritabanı ve önbellek gibi birden çok konteyneri tek dosyayla birlikte ayağa kaldırır.

Konteyner ile sanal makine arasındaki fark

Sanal makine, donanımı taklit eder ve içinde tam bir işletim sistemi çalıştırır; bu yüzden gigabaytlarca yer kaplar ve dakikalar içinde açılır. Konteyner ise sunucunun çekirdeğini paylaşır, yalnızca uygulamanın ihtiyaç duyduğu katmanları taşır. Sonuç: aynı sunucuda çok daha fazla servis çalışır ve açılış saniyeler sürer. Karşılığında izolasyon sanal makine kadar güçlü değildir; güvenlik gerektiren durumlarda konteynerler çoğu zaman sanal makinelerin içinde çalıştırılır.

Docker bir hızlandırma aracı değil, tekrarlanabilirlik aracıdır: aynı imaj her ortamda aynı şekilde çalışır. Kazancın büyük kısmı kurulum, yayın ve geri almada ortaya çıkar.

Docker bir işletmeye ne kazandırır?

  • Tutarlı ortamlar: geliştirme, test ve canlı aynı imajı kullanır; sürüm farkından doğan hatalar azalır.
  • Hızlı kurulum: yeni bir geliştirici veya yeni bir sunucu, belgelerle günler harcamadan tek komutla hazır olur.
  • Güvenli geri alma: her yayın etiketli bir imajdır; sorun çıkarsa önceki etikete dönmek dakikalar sürer.
  • Tedarikçi bağımsızlığı: imaj bir bulut sağlayıcısına bağlı değildir; sunucu veya firma değiştirmek kolaylaşır.
  • Otomasyon: Docker, CI/CD hattının doğal paketleme biçimidir; test edilen imaj canlıya çıkan imajın ta kendisidir.

Basit bir Dockerfile örneği

Aşağıdaki örnek bir Node.js uygulamasını iki aşamada paketler: ilk aşama bağımlılıkları kurup derler, ikinci aşama yalnızca çalışması gereken dosyaları alır. Bu yöntem imajı küçültür ve derleme araçlarını canlı ortamın dışında bırakır.

# 1. aşama: derleme
FROM node:20-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# 2. aşama: çalışma
FROM node:20-alpine
WORKDIR /app
ENV NODE_ENV=production
COPY --from=build /app/package*.json ./
RUN npm ci --omit=dev
COPY --from=build /app/dist ./dist
USER node
EXPOSE 3000
CMD ["node", "dist/server.js"]

İmaj "docker build -t api:1.4.2 ." ile üretilir, "docker run -p 3000:3000 api:1.4.2" ile çalıştırılır. Parola ve API anahtarları imajın içine yazılmaz; çalışma anında ortam değişkeni veya gizli bilgi yöneticisiyle verilir, çünkü imaja giren her şey imajı alan herkes tarafından okunabilir.

Docker ne zaman gerekli, ne zaman değil?

Birden fazla servis (API, arka plan işleri, veritabanı, önbellek) içeren, birden çok ortamda çalışan veya ekip değişikliği beklenen projelerde Docker neredeyse standarttır. Tek sayfalık bir tanıtım sitesi ya da Vercel gibi yönetilen bir platformda çalışan bir Next.js projesi için ise çoğu zaman gerekmez; platform paketlemeyi zaten üstlenir. Docker kullanmak mikroservis mimarisine geçmek anlamına da gelmez: bir modüler monolit de tek bir konteyner olarak gayet iyi çalışır.

Kubernetes ise ayrı bir karardır. Onlarca konteyneri birden çok sunucuya dağıtmak, otomatik ölçeklemek ve kendini onaran bir altyapı kurmak için kullanılır. Çoğu KOBİ ve kurumsal iç uygulama için tek sunucuda Docker Compose veya yönetilen bir konteyner servisi yeterlidir; Kubernetes gerçek bir ölçek ihtiyacı doğduğunda gündeme gelmelidir.

Yazılım firmasından teslimde ne istemelisiniz?

  • Depoda duran Dockerfile ve docker-compose dosyaları; kurulumun tek belgesi bunlar olmalı.
  • Sürüm etiketli imajlar ve imajların saklandığı registry erişimi.
  • Gizli bilgilerin imaja değil ortam değişkenlerine konduğunun teyidi.
  • Veritabanı verisinin konteyner dışında (kalıcı volume veya yönetilen veritabanı) tutulduğu ve yedeklendiği bilgisi.
  • Temel imajların güncellenme planı; eski bir imaj bilinen güvenlik açıklarını taşımaya devam eder.

Bu maddeler yazılım geliştirme sözleşmesine teslim kalemi olarak yazılırsa, proje başka bir ekibe devredildiğinde ortamı yeniden keşfetmek zorunda kalmazsınız.

Sonuç

Docker, uygulamayı ortamıyla birlikte paketleyerek kurulumu, yayını ve geri almayı tekrarlanabilir hâle getirir. Asıl değeri teknik değil operasyoneldir: projenin belirli bir kişiye veya sunucuya bağımlılığını azaltır. Özel yazılım ve web geliştirme projelerimizde konteyner yapısını, yayın hattını ve teslim belgelerini baştan kuruyoruz. Projeniz için uygun altyapıyı konuşmak isterseniz teklif alın.

Projenizi Hayata Geçirelim

Web sitesi, mobil uygulama veya kurumsal yazılım projeniz için ücretsiz danışmanlık alın.

Ücretsiz Teklif AlÖzel Yazılım hizmetimizi inceleyin