# Docker Nedir, Nasıl Kullanılır? Kurulum, İlk Container ve Dockerfile Örneği

- Kaynak: https://teknopiksel.com/docker-nedir-ilk-container-h100873.html
- Yazar: Mehmet Ali Demirci
- Yayın: 2026-11-03
- Bölüm: Kodlama
- Yayıncı: Teknopiksel

> Docker'ın ne işe yaradığını, kurulumunu, ilk container'ın çalıştırılmasını ve bir Python uygulaması için Dockerfile yazılmasını adım adım anlatır.

**Kısa cevap:** Docker, uygulamayı bağımlılıklarıyla birlikte bir paket (image) içine koyup her yerde aynı şekilde çalıştırır. Docker Desktop'ı kurun, docker run hello-world ile deneyin, docker run -p ile bir web sunucusu başlatın ve kendi uygulamanız için Dockerfile yazıp docker build ile imaj üretin.

"Benim bilgisayarımda çalışıyordu" cümlesinin ilacı Docker'dır. Uygulamanızı, ihtiyaç duyduğu dil sürümü ve kütüphanelerle birlikte **container** adı verilen izole bir pakete koyar; bu paket kendi bilgisayarınızda da sunucuda da aynı çalışır.

Sanal makineden farkı: container bütün işletim sistemini taşımaz, ana sistemin çekirdeğini paylaşır; bu yüzden saniyeler içinde açılır ve az kaynak harcar.

## Adımlar

### 1. Docker'ı kurun

Windows ve macOS için docker.com adresinden **Docker Desktop** indirilir. Windows'ta WSL 2 desteği gerekir; kurulum sihirbazı bunu önerir. Kişisel kullanım ve küçük işletmeler için ücretsizdir, büyük şirketlerde lisans şartı vardır. Linux'ta Docker Engine'i resmi dokümandaki komutlarla kurun. Kontrol:

```
docker --version
docker run hello-world
```

Hello-world mesajını görüyorsanız kurulum tamam.

### 2. Temel kavramlar

- **Image (imaj):** uygulamanın salt okunur şablonu.
- **Container:** bir imajın çalışan örneği.
- **Dockerfile:** imajı nasıl üreteceğinizi anlatan tarif dosyası.
- **Docker Hub:** hazır imajların bulunduğu depo.

### 3. Hazır bir web sunucusu çalıştırın

```
docker run -d --name web -p 8080:80 nginx
```

`-d` arka planda çalıştırır, `--name` isim verir, `-p 8080:80` bilgisayarınızın 8080 numaralı portunu container içindeki 80'e bağlar. Tarayıcıda `http://localhost:8080` adresinde nginx karşılama sayfasını görürsünüz.

```
docker ps          # çalışanları listele
docker logs web    # günlükleri oku
docker stop web    # durdur
docker rm web      # sil
```

### 4. Kendi uygulamanız için Dockerfile yazın

Basit bir Python programı olan `app.py` ve bağımlılık listesi `requirements.txt` için `Dockerfile`:

```
FROM python:3.14-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]
```

Sırası önemlidir: bağımlılıkları kaynak koddan önce kopyalarsanız, kod değiştiğinde Docker bağımlılık katmanını önbellekten kullanır ve derleme hızlanır.

### 5. İmajı derleyin ve çalıştırın

```
docker build -t uygulamam .
docker run --rm uygulamam
```

`-t` imaja ad verir, sondaki nokta Dockerfile'ın bulunduğu klasörü gösterir. `--rm` container bitince onu otomatik siler.

### 6. Veriyi kalıcı yapın: volume

```
docker run -d -v veri:/var/lib/data uygulamam
```

Container silindiğinde içindeki dosyalar da gider. Veritabanı gibi saklanması gereken veriyi **volume** ile container dışında tutun.

### 7. Birden çok servis: Docker Compose

```
services:
  web:
    build: .
    ports:
      - "8000:8000"
  db:
    image: postgres:17
    environment:
      POSTGRES_PASSWORD: gizli-parola
    volumes:
      - pgveri:/var/lib/postgresql/data
volumes:
  pgveri:
```

Bu dosyayı `compose.yaml` adıyla kaydedin ve `docker compose up -d` yazın. Uygulama ve veritabanı birlikte kalkar. Gerçek ortamda parolayı dosyaya değil `.env` dosyasına ya da gizli değer yönetimine koyun.

## Sık sorulan sorular

### Docker ücretsiz mi?

Docker Engine ve komut satırı araçları ücretsizdir. Docker Desktop kişisel kullanım, eğitim ve küçük işletmeler için ücretsizdir; büyük şirketler ücretli abonelik gerektirir.

### Docker ile sanal makine arasındaki fark nedir?

Sanal makine tam bir işletim sistemi çalıştırır. Container ana sistemin çekirdeğini paylaşır; daha hafif ve hızlıdır, ama izolasyonu daha zayıftır.

### Docker öğrenmek için Linux bilmek şart mı?

Şart değil ama temel komut satırı bilgisi (cd, ls, dosya düzenleme) çok işinize yarar.

### Docker ile Kubernetes aynı şey mi?

Hayır. Docker container üretir ve çalıştırır. Kubernetes, çok sayıda container'ı birden çok sunucuda yönetir. Önce Docker'ı öğrenin.
