Docker Nedir ve Neden Kullanılır?
Docker, 2013 yılında Solomon Hykes tarafından geliştirilen ve Linux çekirdeğinin konteyner teknolojisini kullanıcı dostu bir API ile erişilebilir kılan açık kaynaklı bir konteynerizasyon platformudur. Temel amacı "bende çalışıyor ama sende çalışmıyor" sorununu ortadan kaldırmaktır: Uygulama kodu, çalışma zamanı, kütüphaneler ve tüm sistem bağımlılıkları bir araya getirilerek "image" adı verilen taşınabilir bir paket oluşturulur. Bu paketten çalıştırılan "container", bulut sunucusundan yerel makineye kadar her ortamda aynı davranışı sergiler — yazılım dağıtımında tutarlılık ve öngörülebilirlik sağlar.
Docker vs Sanal Makine
Sanal makinelerden (VM) farkı kritik öneme sahiptir. VM'ler tam bir işletim sistemi çalıştırırken Docker container'ları ana sistemin çekirdeğini paylaşır. Bu sayede container'lar saniyeler içinde başlar, megabayt mertebesinde yer kaplar ve çok daha az RAM tüketir. Container'lar sanallaştırma yerine işletim sistemi düzeyinde izolasyon sunar; bu mimari hem hız hem de kaynak verimliliği açısından VM'lere belirgin avantaj sağlar. Tipik bir uygulama container'ı 50-200 MB yer kaplarken eşdeğer bir VM birkaç GB gerektirebilir.
AI/ML Ekosistemindeki Kullanım Alanları
- check_circle Deney Yeniden Üretilebilirliği: Farklı Python sürümleri, CUDA versiyonları veya kütüphane kombinasyonları gerektiren deneyleri Dockerfile ile kesin olarak tanımlayarak herhangi bir ortamda birebir yeniden oluşturabilirsiniz.
- check_circle Model Deployment: Eğitilmiş modeller API sunucularıyla birlikte konteynerize edilerek Kubernetes gibi orkestrasyon araçlarıyla büyük ölçekte üretim ortamına dağıtılabilir.
- check_circle MLOps Araç Entegrasyonu: MLflow, Kubeflow, Airflow ve Prefect gibi MLOps araçlarının büyük çoğunluğu Docker altyapısı üzerine kuruludur; pipeline'lar konteyner olarak tanımlanır ve yönetilir.
- check_circle GPU Çalışma Zamanı: NVIDIA Container Toolkit ile GPU'lar container'lara aktarılır; farklı CUDA sürümleri gerektiren modeller aynı fiziksel makinede yan yana çalıştırılabilir.
Temel Docker Kavramları ve Komutları
Temel bileşenler şunlardır: Dockerfile (image'ı tanımlayan yapılandırma dosyası), image (çalıştırılabilir paket), container (çalışan image örneği), registry (Docker Hub gibi image deposu) ve docker-compose (çoklu container uygulamalarını yönetme aracı). Katmanlı image mimarisi sayesinde değişen katmanlar yeniden oluşturulur; değişmeyen katmanlar önbellekten kullanılır — bu yapı hem build süresini hem de depolama alanını optimize eder. docker pull, docker run ve docker build komutları günlük kullanımın temelini oluştururken docker-compose up çoklu servis mimarilerini tek komutla ayağa kaldırır.
Docker ile AI/ML Ortamı Kurulumu
NVIDIA Container Toolkit
docker run --gpus all ile GPU erişimi; CUDA ve cuDNN kütüphanelerini host'ta kurmak gerekmez, her model için ayrı CUDA versiyonu kullanılabilir.
Multi-Stage Build
Geliştirme ve üretim görüntülerini ayırma; bağımlılık kurulu büyük geliştirici görüntüsünden sadece çalışma zamanı içeren küçük üretim görüntüsü üretilir.
Docker Compose
Model sunucu + veritabanı + API katmanı gibi çok konteyner uygulamaları tek YAML dosyasıyla tanımlama; yerel geliştirme ortamı standardı.
Hugging Face Docker Spaces
Gradio/Streamlit tabanlı ML demo'larını Docker ile barındırma; Hugging Face altyapısında model + arayüz birlikte dağıtım imkânı.
Sıkça Sorulan Sorular
- check_circle Docker ve Kubernetes arasındaki fark nedir? Docker tekil container'ları oluşturur ve çalıştırırken Kubernetes, çok sayıda container'ı büyük ölçekte orkestre eder (zamanlama, ölçekleme, sağlık denetimi). İkisi birbirini tamamlayan araçlardır; Kubernetes genellikle Docker ile üretilen image'ları kullanır.
- check_circle Docker olmadan AI modeli deploy edilebilir mi? Evet, doğrudan sanal makine, serverless fonksiyon veya PaaS servisi üzerinde deploy edilebilir. Ancak Docker, bağımlılık yönetimi ve ortam tutarlılığı nedeniyle üretim AI dağıtımlarında tercih edilen standarttır.
- check_circle GPU'lar Docker ile nasıl kullanılır? NVIDIA Container Toolkit kurulumu ve --gpus all bayrağıyla docker run komutu GPU erişimini etkinleştirir. Pytorch ve TensorFlow'un resmi CUDA destekli Docker image'ları NGC ve Docker Hub üzerinden hazır olarak sunulmaktadır.
- check_circle Docker image boyutunu nasıl küçültebilirim? Multi-stage build, Alpine veya slim tabanlı base image seçimi, gereksiz paket ve build artifact'larının temizlenmesi ve .dockerignore dosyası kullanımı image boyutunu önemli ölçüde azaltır.