# 🐳 Docker Nedir ve Neden Kullanmalısınız?

**URL:** <https://forum.nucoralinux.com.tr/t/docker-nedir-ve-neden-kullanmalisiniz/125>\
**Category:** Genel\
**Tags:** localhost\
**Created:** [Ağustos 15, 2026, 8:09ös UTC](https://forum.nucoralinux.com.tr/t/docker-nedir-ve-neden-kullanmalisiniz/125 "2026-08-15T20:09:02Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Futuregnulinux](https://forum.nucoralinux.com.tr/user_avatar/forum.nucoralinux.com.tr/futuregnulinux/32/273_2.png) [@Futuregnulinux](https://forum.nucoralinux.com.tr/u/Futuregnulinux)\
**Post date:** [Ağustos 15, 2026, 8:09ös UTC](https://forum.nucoralinux.com.tr/t/docker-nedir-ve-neden-kullanmalisiniz/125/1 "2026-08-15T20:09:02Z")

</div>

# 🐳 Docker Nedir ve Neden Kullanmalısınız?

Docker, uygulamaları ve ihtiyaç duyduğu bileşenleri **container (konteyner)** adı verilen izole ortamlarda çalıştırmaya yarayan bir platformdur.

İlk bakışta Docker biraz karmaşık görünebilir. Ancak temel amacı oldukça basittir:

> **Bir uygulamanın çalışması için gereken ortamı, uygulamanın kendisiyle birlikte paketlemek ve farklı sistemlerde mümkün olduğunca aynı şekilde çalıştırabilmek.**

Bu rehberde Docker’ın nasıl kurulacağından çok, **neden kullanıldığı, hangi sorunları çözdüğü ve hangi durumlarda mantıklı olduğu** anlatılacaktır.

* * *

## 1. Docker Neden Ortaya Çıktı?

Bir programı normal şekilde kurduğunuzu düşünelim.

Örneğin bir web uygulaması çalıştıracaksınız.

Uygulamanın çalışması için şunlar gerekebilir:

- Belirli bir Python sürümü

- Belirli Python paketleri

- Bir veritabanı

- Bir web sunucusu

- Özel sistem ayarları

- Belirli ortam değişkenleri

Bilgisayarınızda Python’ın daha yeni bir sürümü varsa uygulama çalışmayabilir.

Bir başka sunucuda farklı bir kütüphane sürümü varsa yine sorun çıkabilir.

Sonuç olarak:

> **“Benim bilgisayarımda çalışıyor ama sunucuda çalışmıyor.”**

gibi problemler ortaya çıkabilir.

Docker’ın çözmeye çalıştığı problemlerden biri tam olarak budur.

* * *

# 2. Docker’ın Temel Mantığı

Docker ile uygulamanın ihtiyaç duyduğu çalışma ortamını bir **container image (container imajı)** içerisinde tanımlayabilirsiniz.

Daha sonra bu image kullanılarak bir veya daha fazla container oluşturulabilir.

Basitçe:

```auto
Dockerfile
    ↓
Docker Image
    ↓
Docker Container
    ↓
Uygulama

```

Burada her parçanın farklı bir görevi vardır.

* * *

# 3. Container Nedir?

Container, uygulamanın çalıştığı izole bir ortamdır.

Örneğin aynı bilgisayarda:

```auto
Container 1 → Web sitesi
Container 2 → Veritabanı
Container 3 → API
Container 4 → Redis

```

çalışabilir.

Bu uygulamalar birbirinden belirli ölçülerde izole edilebilir.

Ancak container’lar **sanal makine ile aynı şey değildir.**

* * *

# 4. Container ile Sanal Makine Arasındaki Fark

Sanal makinede genellikle ayrı bir işletim sistemi çalıştırılır.

Örneğin:

```auto
Bilgisayar
 ├── Windows
 │
 └── Virtual Machine
      └── Ubuntu
           └── Uygulama

```

Docker container’larında ise aynı Linux kernel’i paylaşan izole çalışma ortamları kullanılır.

Basitleştirilmiş olarak:

```auto
Sunucu
 └── Linux Kernel
      ├── Container
      │ └── Uygulama
      │
      ├── Container
      │ └── Uygulama
      │
      └── Container
           └── Uygulama

```

Bu nedenle container’lar birçok kullanım senaryosunda sanal makinelere göre daha hafif olabilir.

> Ancak container’lar tamamen risksiz veya tamamen izole bir sanal bilgisayar değildir. Güvenlik ve izolasyon ihtiyaçlarına göre ayrıca değerlendirme yapılmalıdır.

* * *

# 5. Docker Image Nedir?

Image, container oluşturmak için kullanılan bir şablondur.

Örneğin bir image içerisinde:

```auto
Ubuntu tabanı
Python
Python paketleri
Uygulama
Çalıştırma komutu

```

tanımlanmış olabilir.

Bu image’dan container oluşturabilirsiniz.

```auto
Image
  ├── Container 1
  ├── Container 2
  └── Container 3

```

Yani image’ı bir **şablon** , container’ı ise bu şablondan oluşturulmuş **çalışan örnek** gibi düşünebilirsiniz.

* * *

# 6. “Bağımlılık Sorunu” Nedir?

Bir uygulama başka yazılımlara ihtiyaç duyuyorsa bunlara **dependency (bağımlılık)** denir.

Örneğin:

```auto
Uygulama
 ├── Python 3.11
 ├── Flask 3.x
 ├── PostgreSQL
 └── Diğer paketler

```

Sisteminize farklı sürümler kurulduğunda uygulama bozulabilir.

Docker kullanıldığında uygulamanın ihtiyaç duyduğu ortamın tanımı image’a dahil edilebilir.

Böylece:

```auto
Benim bilgisayarım
       ↓
Docker Container

Sunucu
       ↓
Docker Container

```

şeklinde daha tutarlı bir çalışma ortamı oluşturabilirsiniz.

* * *

# 7. “Benim Bilgisayarımda Çalışıyor” Sorunu

Docker’ın en önemli kullanım amaçlarından biri budur.

Örneğin geliştirici bilgisayarında:

```auto
Ubuntu
Python 3.11
Node.js
PostgreSQL

```

kullanıyor.

Sunucuda ise:

```auto
Debian
Python 3.12
Farklı PostgreSQL sürümü

```

bulunuyor.

Uygulamanın doğrudan sunucuda çalıştırılması sırasında uyumsuzluk çıkabilir.

Docker yaklaşımında ise çalışma ortamı daha kontrollü biçimde tanımlanabilir.

Bu da özellikle:

- Geliştirme

- Test

- Sunucuya dağıtım (deployment)

aşamalarında avantaj sağlayabilir.

* * *

# 8. Docker Neden Sunucularda Bu Kadar Kullanılıyor?

Docker özellikle sunucu tarafında oldukça kullanışlıdır.

Örneğin bir sunucuda şu servislerin çalıştığını düşünün:

```auto
Nginx
PostgreSQL
Redis
Web uygulaması
API
Monitoring

```

Bunların tamamını doğrudan işletim sistemine kurmak yerine ayrı container’lar halinde yönetebilirsiniz.

Örneğin:

```auto
Sunucu
│
├── nginx
├── postgres
├── redis
├── app
└── monitoring

```

Her servisin kendi container’ı olabilir.

Bu yapı sayesinde servisleri birbirinden daha kolay ayırabilirsiniz.

* * *

# 9. Servisleri Birbirinden Ayırmak

Docker’ın önemli avantajlarından biri de **izolasyon** mantığıdır.

Örneğin bir sunucuda iki farklı uygulama bulunuyor:

```auto
Uygulama A → Python 3.10
Uygulama B → Python 3.12

```

Normal kurulumda sürüm çakışmaları yaşanabilir.

Container yaklaşımında:

```auto
Container A
 └── Python 3.10

Container B
 └── Python 3.12

```

şeklinde ayrı çalışma ortamları oluşturulabilir.

Bu, özellikle çok sayıda uygulamanın bulunduğu sistemlerde oldukça kullanışlıdır.

* * *

# 10. Taşınabilirlik

Docker’ın diğer önemli avantajlarından biri \*\*portability (taşınabilirlik)\*\*tir.

Bir uygulamanın Docker yapılandırmasını hazırladıktan sonra aynı yapıyı farklı sunucularda çalıştırabilirsiniz.

Örneğin:

```auto
Bilgisayar
   ↓
Test Sunucusu
   ↓
VDS
   ↓
Dedicated Server

```

Her ortamda Docker bulunuyorsa aynı image kullanılabilir.

Elbette işletim sistemi, CPU mimarisi, donanım, ağ ve diğer çevresel farklılıklar yine dikkate alınmalıdır.

* * *

# 11. Kurulumları Tekrarlamak Daha Kolaydır

Normal bir sunucu kurulumunda şu işlemler yapılabilir:

```auto
Paketleri kur
Konfigürasyonu yap
Klasör oluştur
Servisi ayarla
Bağımlılıkları kur
Environment değişkenlerini ayarla

```

Bunları her sunucuda tekrar yapmak zaman alabilir.

Docker’da ise ortamın nasıl oluşturulacağı kod ve yapılandırma dosyalarıyla tanımlanabilir.

Bu yaklaşım özellikle tekrar tekrar sunucu kuran kişiler için büyük kolaylık sağlar.

* * *

# 12. Dockerfile Nedir?

Dockerfile, bir Docker image’ın nasıl oluşturulacağını tarif eden dosyadır.

Örneğin basit bir Dockerfile şu mantığa sahip olabilir:

```auto
FROM python:3.12

WORKDIR /app

COPY . .

RUN pip install -r requirements.txt

CMD ["python", "app.py"]

```

Burada genel olarak:

```auto
FROM

```

hangi temel image’ın kullanılacağını,

```auto
WORKDIR

```

çalışma klasörünü,

```auto
COPY

```

dosyaların container’a kopyalanmasını,

```auto
RUN

```

image oluşturulurken çalıştırılacak komutları,

```auto
CMD

```

container başlatıldığında çalışacak komutu belirtir.

Bu sayede uygulamanın çalışma ortamı yazılı olarak tanımlanabilir.

* * *

# 13. Docker Compose Nedir?

Birden fazla container kullanmaya başladığınızda Docker Compose oldukça kullanışlı hale gelir.

Örneğin bir web uygulamanız var:

```auto
Web uygulaması
      +
PostgreSQL
      +
Redis

```

Bunların her birini ayrı ayrı yönetmek yerine Compose ile birlikte tanımlayabilirsiniz.

Örneğin:

```auto
services:
  app:
    image: my-app

  database:
    image: postgres

  redis:
    image: redis

```

Buradaki fikir:

> **Birden fazla servisin birlikte nasıl çalışacağını tek bir yapılandırmada tanımlamak.**

Docker Compose özellikle küçük ve orta ölçekli projelerde oldukça kullanışlıdır.

* * *

# 14. Güncelleme ve Geri Dönüş

Docker image’ları sürümlendirilebilir.

Örneğin:

```auto
my-app:1.0
my-app:1.1
my-app:2.0

```

gibi farklı sürümler bulunabilir.

Yeni sürümde problem çıkarsa eski image’ın kullanılması mümkün olabilir.

Bu da deployment süreçlerini daha kontrollü hale getirebilir.

Ancak yalnızca image’ı eski sürüme döndürmek her zaman yeterli değildir.

Özellikle:

- Veritabanı değişiklikleri

- Kalıcı veriler

- Configuration değişiklikleri

ayrıca planlanmalıdır.

* * *

# 15. Docker Verileri Nerede Tutar?

Container’lar geçici çalışma ortamları olarak düşünülebilir.

Bu yüzden önemli veriler doğrudan yalnızca container’ın kendi dosya sistemi içinde tutulmamalıdır.

Örneğin:

```auto
PostgreSQL
   ↓
Volume
   ↓
Kalıcı veriler

```

Docker’da bunun için **volume** ve bind mount gibi yöntemler kullanılabilir.

Örneğin veritabanı container’ını silseniz bile doğru şekilde yapılandırılmış bir volume kullanılıyorsa veriler korunabilir.

> Docker kullanırken “container’ı silersem ne olur?” sorusunu mutlaka düşünün.

* * *

# 16. Docker’ın Avantajları

Docker özellikle şu durumlarda güçlüdür:

### ✅ Taşınabilirlik

Uygulamanın çalışma ortamını daha kolay başka sistemlere taşıyabilirsiniz.

### ✅ İzolasyon

Servisleri birbirinden ayırabilirsiniz.

### ✅ Tekrarlanabilirlik

Aynı ortamı tekrar oluşturmak kolaylaşır.

### ✅ Deployment

Uygulamaları sunuculara dağıtmak daha düzenli hale gelebilir.

### ✅ Bağımlılık yönetimi

Farklı uygulamaların farklı sürümlere ihtiyaç duyması daha kolay yönetilebilir.

### ✅ Test

Bir uygulamayı ayrı bir container içerisinde deneyebilirsiniz.

* * *

# 17. Docker’ın Dezavantajları

Docker her durumda mükemmel çözüm değildir.

### ❌ Ekstra karmaşıklık

Küçük bir uygulamayı Docker’a almak bazen gereksiz olabilir.

### ❌ Öğrenme süreci

Başlangıçta şu kavramların öğrenilmesi gerekir:

```auto
Image
Container
Volume
Network
Dockerfile
Compose
Registry

```

### ❌ Depolama kullanımı

Çok sayıda image ve container zamanla ciddi miktarda disk alanı kaplayabilir.

### ❌ Yanlış yapılandırma

Volume, network veya izinlerin yanlış yapılandırılması sorunlara yol açabilir.

### ❌ Güvenlik

Docker kullanmak uygulamayı otomatik olarak güvenli hale getirmez.

Image’ların kaynağı, güncelliği, container izinleri, secrets yönetimi ve host güvenliği ayrıca değerlendirilmelidir.

* * *

# 18. Docker Herkes İçin Gerekli mi?

Hayır.

Örneğin yalnızca bilgisayarınızda:

```auto
Firefox
LibreOffice
Discord
VLC

```

kullanıyorsanız Docker kullanmanız gerekmeyebilir.

Docker’ın asıl faydası daha çok:

- Sunucu yönetenler

- Yazılım geliştiriciler

- Web uygulaması çalıştıranlar

- Self-hosting yapanlar

- Birden fazla servis kullananlar

- Test ortamları oluşturanlar

için ortaya çıkar.

* * *

# 19. Docker Ne Zaman Kullanılmalı?

Şu durumlardan biri varsa Docker mantıklı olabilir:

```auto
Birden fazla servis çalıştırıyorum.

```

```auto
Uygulamamın bağımlılıkları fazla.

```

```auto
Aynı uygulamayı farklı sunucularda çalıştıracağım.

```

```auto
Sunucuyu yeniden kurduğumda ortamı tekrar oluşturmak istiyorum.

```

```auto
Self-hosted uygulamalar çalıştırıyorum.

```

```auto
Test ortamı oluşturmak istiyorum.

```

* * *

# 20. Docker Ne Zaman Gereksiz Olabilir?

Şöyle bir durum düşünün:

```auto
Tek bir küçük Python scripti

```

veya:

```auto
Tek bir basit web sitesi

```

çalıştırıyorsunuz.

Böyle bir durumda Docker kullanmak bazen uygulamanın kendisinden daha fazla yönetim gerektirebilir.

Bu yüzden:

> **Docker kullanmak amaç değil, bir araçtır.**

İhtiyaç varsa kullanmak gerekir.

* * *

# 21. Gerçek Hayattan Basit Bir Örnek

Bir Linux sunucunuz olduğunu düşünelim.

Sunucuda:

```auto
Ubuntu/Debian

```

üzerinde şu servisleri çalıştırmak istiyorsunuz:

```auto
Web sitesi
PostgreSQL
Redis

```

Docker kullanmadan bunları doğrudan işletim sistemine kurabilirsiniz.

Docker kullanarak ise:

```auto
Sunucu
│
├── Web Container
├── PostgreSQL Container
└── Redis Container

```

şeklinde bir yapı oluşturabilirsiniz.

Bunun avantajı, servislerin çalışma ortamlarını birbirinden ayırabilmeniz ve tüm yapıyı daha sistematik biçimde yönetebilmenizdir.

* * *

# 22. Docker ile Ne Tür Şeyler Çalıştırılabilir?

Docker yalnızca web sitesi çalıştırmak için kullanılmaz.

Örneğin:

- Web sunucuları

- Veritabanları

- API’ler

- Geliştirme ortamları

- CI/CD araçları

- Monitoring sistemleri

- Self-hosted uygulamalar

- Test ortamları

- Proxy servisleri

- Medya servisleri

- Çeşitli sunucu uygulamaları

çalıştırılabilir.

Ancak her uygulamanın Docker için uygun olup olmadığı ayrıca değerlendirilmelidir.

* * *

# 23. Docker Öğrenmeye Nereden Başlamalı?

Docker’ı öğrenmeye başlarken önce şu kavramları öğrenmek yeterlidir:

```auto
1. Image
2. Container
3. Dockerfile
4. Port
5. Volume
6. Network
7. Docker Compose

```

Bunların mantığını anladıktan sonra komutları öğrenmek çok daha kolay hale gelir.

Örneğin daha sonra şu temel komutlarla karşılaşacaksınız:

```auto
docker pull
docker images
docker run
docker ps
docker stop
docker start
docker rm
docker exec
docker logs
docker build

```

Bu komutların her birinin farklı bir görevi vardır.

* * *

# 24. Sonuç

Docker’ın amacı:

> **“Her şeyi Docker’a taşımak” değildir.**

Asıl amaç, uygulamaların çalıştırılmasını ve yönetilmesini daha **tekrarlanabilir, taşınabilir ve düzenli** hale getirmektir.

Özellikle sunucu, geliştirme ve self-hosting dünyasında Docker’ın avantajları daha belirgin hale gelir.

Ancak küçük ve basit işler için Docker kullanmak gereksiz bir karmaşıklık da oluşturabilir.

Bu yüzden Docker kullanmadan önce kendinize şu soruyu sorun:

> **“Docker burada gerçekten bir problemimi çözüyor mu?”**

Cevap evetse Docker çok güçlü bir araç olabilir.

* * *

## 📌 Kısaca

```auto
Docker
↓
Uygulama + Gereken ortam
↓
Container
↓
Daha taşınabilir ve tekrarlanabilir çalışma ortamı

```

Docker’ın temel mantığını anladıktan sonraki doğal adım, **Docker kurulumu ve temel komutlarını öğrenmektir.**

* * *

**İlgili rehber:**  
[🐳 Docker Kurulumu ve Temel Komutlar Rehberi](https://forum.nucoralinux.com.tr/t/docker-kurulumu-ve-temel-komutlar-rehberi/124)

---

<div class="post-metadata">

**Author:** ![nucorafoundation](https://forum.nucoralinux.com.tr/user_avatar/forum.nucoralinux.com.tr/nucorafoundation/32/90_2.png) [@nucorafoundation](https://forum.nucoralinux.com.tr/u/nucorafoundation)\
**Post date:** [Ağustos 15, 2026, 8:27ös UTC](https://forum.nucoralinux.com.tr/t/docker-nedir-ve-neden-kullanmalisiniz/125/2 "2026-08-15T20:27:09Z")

</div>

güzel anlatım olmuş
