Docker Nedir?
Docker, yazdığınız kodun her ortamda aynı şekilde çalışmasını isteyen geliştiriciler için ideal bir araçtır. Bu platform, yazılım projelerinizi bağımlılıklarıyla birlikte paketleyip izole bir şekilde çalıştırmanızı sağlar. Böylece geliştirme, test, dağıtım ve üretim süreçlerini hızlandırır, standart hale getirir ve kolaylaştırır.
Docker container’ları, klasik sanal makinelerden daha hafif, daha hızlıdır ve daha az kaynak kullanır.
Neden Docker Kullanmalıyız?
1. Her Makinede Kodunuzu Çalıştrabilirsiniz Uyumluluk Problemi Ortadan Kalkar
Docker, uygulamanızı kendi ortamıyla paketlediği için, kodunuz geliştiricinin bilgisayarında, test ortamında ve üretim sunucusunda aynı şekilde çalışır. Böylece uyumluluk sorunları ortadan kalkar.
2. Hafif ve Hızlıdır
Docker konteynerleri, klasik sanal makinelerden çok daha az kaynak tüketir ve saniyeler içinde başlar.
Her container, host işletim sisteminin çekirdeğini paylaşır; bu sayede hafiftir.
3. Taşınabilirlik Sağlar
Docker ile oluşturduğunuz image’ler Linux, MacOS, Windows ve bulut platformlarında (AWS, Azure gibi) sorunsuz çalışır.
4. Sürekli Entegrasyon (CI) / Sürekli Dağıtım (CD) İçin Mükemmeldir
Docker, CI/CD boru hatlarında hızlıca build/test/deploy yapılmasını sağlar.
Jenkins, GitLab CI, GitHub Actions gibi araçlarla kolayca entegre olur.
5. Uygulamaları İzole Eder
Her container kendi ortamında çalışır, bu sayede projeler birbirini etkilemez. Bir proje Java 17 kullanırken, diğeri Java 8 ile çalışabilir.
6. Mikroservis Mimarilerine Uygundur
Her mikroservisi ayrı container’da çalıştırmak, sistemi daha kolay yönetmenizi ve ölçeklendirmenizi sağlar.
7. Docker Hub ile Paylaşım ve Topluluk Desteği
Docker Hub sayesinde, hazır image’leri kolayca indirir (örneğin: postgres, nginx, mongo, node, openjdk) veya kendi oluşturduğun image’leri paylaşabilirsin.
8. Yedekleme ve Taşıma Kolaylığı
Docker container veya image’lerini başka bir makineye taşıyabilir, cloud’a deploy edebilir ya da yedek alabilirsin.
Nasıl Çalışır?
Docker, yazılımı container içine koyarak her ortamda aynı şekilde çalışmasını sağlar. Peki, bunu nasıl başarır?
Öncelikle, Docker container’ları izole eder. Her container, uygulama kodunu, bağımlılıklarını, sistem kütüphanelerini ve yapılandırmalarını içerir. Bu sayede container’lar kendi dünyasında yaşar ve dış ortamın etkilerinden korunur.
Docker’da her uygulamayı önce bir image (görüntü veya şablon) haline getirirsiniz. Bu image, uygulama dosyalarını, işletim sistemi bileşenlerini (örneğin Ubuntu, Node, OpenJDK), gerekli kütüphaneleri ve başlangıç ayarlarını içerir. İhtiyaca göre image içeriğini genişletebilirsiniz.
Sonrasında, bu image’den çalışan her birim container olarak adlandırılır. Container, bu image’in çalıştırılabilir bir örneğidir ve izole ortamda bağımsız olarak çalışır.
Image Nasıl Oluşturulur?
Docker ile çalışmak için öncelikle bir image oluşturmanız gerekir. Genellikle bu işlem, bir Dockerfile kullanılarak yapılır.
Dockerfile, Docker’a uygulamanızı hangi ortamda ve hangi adımlarla çalıştıracağını anlatan bir tarif gibidir. İçinde baz alınacak işletim sistemi, gerekli bağımlılıklar, uygulama dosyaları ve çalıştırma komutları yer alır.
Örneğin, uygulamanız için temel bir Node.js ortamı kullanabilir ve ardından uygulamanızın dosyalarını image içine kopyalayabilirsiniz. Dockerfile hazırlandıktan sonra, docker build komutu ile image oluşturulur.
Sonrasında, docker run komutunu kullanarak bu image’den bir container başlatabilirsiniz. Bu komut ayrıca port yönlendirme gibi ayarları yapmanıza da olanak verir. Örneğin, -p parametresiyle container’ın içindeki bir portu host makinenizdeki bir porta bağlayabilirsiniz.
Özetle, Dockerfile ile image’i hazırlayıp, bu image’den container oluşturup çalıştırırsınız. Her container, kendi izole ortamında bağımsız bir şekilde işlev görür.
Örnek bir Dockerfile dosyası içeriği. Bu dosya, Docker’a uygulamanın nasıl bir ortamda ve hangi sırayla çalıştırılacağını tarif eder.
Image hazırlandıktan sonra, bu şablondan bir container oluşturulur.

docker build, Image’i oluşturur.
docker run, Bu image’i kullanarak izole bir container başlatır.
-p, portunu belirtir.
Not: Her container, kendi ortamında bağımsız çalışır.
Docker Engine Nedir?
Docker, arka planda Docker Engine adlı bir motor çalıştırır. Bu motor, Docker ile ilgili tüm işlemleri yönetir ve iki ana bölümden oluşur:
Docker Daemon (dockerd):
Bu, sistemde arka planda çalışan bir servis olarak container’ları oluşturur, yönetir ve kaynakları tahsis eder. Kısacası işletim sistemi seviyesindeki işleri yapar.
Docker CLI (docker):
Komut satırından kullandığınız docker komutları, Docker CLI tarafından alınır ve Docker Daemon’a iletilir. Örneğin, docker run komutunu siz verdiğinizde, CLI bu komutu Daemon’a gönderir ve Daemon container’ı başlatır.
Yani Docker Engine, sizin verdiğiniz komutları alır, işler ve container’ların oluşturulup yönetilmesini sağlar.
Docker Desktop Nedir?
Docker Desktop, Windows ve Mac kullanıcılarının Docker ortamını kolayca kurup yönetmesini sağlayan bir uygulamadır.
Bu uygulama, Docker Engine, Docker CLI, Docker Compose ve Kubernetes gibi araçları içinde barındırır. Böylece karmaşık ayarlarla uğraşmadan, birkaç dakika içinde Docker kullanmaya başlayabilirsiniz.
Docker Desktop sayesinde, konteynerli uygulamalar geliştirmek, test etmek ve çalıştırmak çok daha kolay hale gelir. Ayrıca, Kubernetes desteği sayesinde ileri seviye konteyner orkestrasyonu da yapabilirsinizır.
Docker Compose Nedir?
Docker Compose, birden fazla container’ı aynı anda kolayca yönetmenizi sağlayan bir araçtır. Yani bir Docker projesinde bulunan farklı servisleri tek bir komutla çalıştırabilmenizi sağlar.
Örneğin, bir web uygulamanız ve ona bağlı bir veritabanınız varsa, bunları ayrı ayrı başlatmak yerine, Docker Compose ile tek bir dosyada tanımlayıp tek komutla çalıştırabilirsiniz.
Docker Compose, docker-compose.yml adlı bir dosya kullanır. Bu dosyada, hangi container’ların çalışacağı, hangi portların açılacağı, ortam değişkenleri gibi bilgiler yazılı olur.

Bu dosya, web servisi için mevcut klasördeki Dockerfile ile bir image oluşturur ve 3000 portunu açar, db servisi için hazır bir postgres image’i kullanır ve şifre belirler.
Bazı Docker Compose Komutları
docker-compose up: Tüm servisleri başlatır.docker-compose down: Tüm servisleri durdurur ve ağları siler.docker-compose ps: Çalışan servisleri listeler.
Bu yazıda Docker’ın temel kavramlarını, çalışma prensibini ve kullanımını anlattım. Docker sayesinde uygulamalarınızı her ortamda aynı şekilde çalıştırabilir, geliştirme ve dağıtım süreçlerinizi hızlandırabilirsiniz.
Docker dünyası oldukça geniş ve derin; bu nedenle diğer yazılarımda Dockerfile optimizasyonu, veri yönetimi, güvenlik ve CI/CD entegrasyonu gibi ileri konuları adım adım ele alacağım.
Şimdilik Docker ile tanışmanız için bu kadar. Bir sonraki yazıda görüşmek üzere!