Ana Sayfa/Blog/Docker Temelleri: Container Teknolojisine Giriş

Docker Temelleri: Container Teknolojisine Giriş

Docker, uygulamaları container'lar (kapsayıcılar) içinde paketleyip çalıştırmayı sağlayan açık kaynaklı bir platformdur. "Benim bilgisayarımda çalışıyor" sorununu ortadan kaldırır — çünkü container, uygulamanın ihtiyaç duyduğu her şeyi (kod, runtime, kütüphaneler, sistem araçları) içerir ve her ortamda aynı şekilde çalışır.

Container vs Sanal Makine (VM)

Container'lar ve sanal makineler farklı soyutlama seviyelerinde çalışır:

Container'lar daha hafif, hızlı ve kaynak açısından verimlidir. Ancak sanal makineler güçlü izolasyon gerektiren durumlarda hâlâ tercih edilir.

Temel Docker Kavramları

Dockerfile Anatomisi

Dockerfile, bir image'ın nasıl oluşturulacağını adım adım tanımlar:

# Temel image
FROM node:20-alpine

# Çalışma dizini
WORKDIR /app

# Bağımlılık dosyalarını kopyala
COPY package.json package-lock.json ./

# Bağımlılıkları yükle
RUN npm ci --only=production

# Uygulama kodunu kopyala
COPY . .

# Portu belirt
EXPOSE 3000

# Uygulamayı başlat
CMD ["node", "server.js"]

Önemli Dockerfile Talimatları

Temel Docker Komutları

# Image oluştur
docker build -t myapp:1.0 .

# Container başlat
docker run -d -p 3000:3000 --name myapp myapp:1.0

# Çalışan container'ları listele
docker ps

# Tüm container'ları listele (durmuş dahil)
docker ps -a

# Container loglarını gör
docker logs myapp

# Container'a bağlan
docker exec -it myapp sh

# Container'ı durdur ve sil
docker stop myapp
docker rm myapp

# Image'ları listele
docker images

# Image sil
docker rmi myapp:1.0

Docker Compose

Docker Compose, birden fazla container'ı tek bir YAML dosyasında tanımlayıp yönetmenizi sağlar. Çoklu servis mimarileri için idealdir:

# docker-compose.yml
version: '3.8'

services:
  web:
    build: .
    ports:
      - "3000:3000"
    environment:
      - DATABASE_URL=postgres://user:pass@db:5432/mydb
    depends_on:
      - db
    volumes:
      - ./src:/app/src

  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
      POSTGRES_DB: mydb
    volumes:
      - pgdata:/var/lib/postgresql/data
    ports:
      - "5432:5432"

volumes:
  pgdata:
# Tüm servisleri başlat
docker compose up -d

# Logları takip et
docker compose logs -f

# Servisleri durdur
docker compose down

# Servisleri durdur ve volume'ları sil
docker compose down -v

Volumes (Kalıcı Veri)

Container'lar silindiğinde içindeki veriler kaybolur. Kalıcı veri için volume kullanılır:

# Named volume (Docker yönetir)
docker run -v pgdata:/var/lib/postgresql/data postgres

# Bind mount (ana makine dizinini bağla)
docker run -v $(pwd)/src:/app/src myapp

# Sadece okunur bağlama
docker run -v $(pwd)/config:/app/config:ro myapp

Networking

Docker container'lar arası iletişim için ağ altyapısı sağlar:

Docker Compose'da tanımlanan servisler otomatik olarak aynı ağa eklenir ve birbirlerini servis adıyla (hostname olarak) bulabilir.

En İyi Uygulamalar

Docker Compose dosyanızı kolayca oluşturmak mı istiyorsunuz? SiteScripti'nin Docker Compose Oluşturucu aracıyla popüler servis yapılandırmalarını birkaç tıkla hazırlayabilirsiniz.

Bu konuyla ilgili araçlarımızı da deneyin: Docker Compose Oluşturucu, ENV Generator, cURL Builder

← Tüm Yazılar