📝 BLOG

Docker ve Containerization: Temel Kavramlar ve Kullanım

Docker, uygulamaları container'lar içinde paketleyerek tutarlı ve taşınabilir dağıtım sağlar. Bu rehberde Docker temellerini, Dockerfile yazımını ve container yönetimi anlatıyoruz.

Son güncelleme:

Hazırlayan: Gsetsoft

Docker ve Containerization: Temel Kavramlar ve Kullanım

Docker Nedir?

Docker, uygulamaları ve bağımlılıklarını container'lar içinde paketleyen bir platformdur. Container'lar, hafif ve izole edilmiş çalışma ortamlarıdır.

VM vs Container: Virtual Machine'ler tam bir işletim sistemi çalıştırır (GB'larca). Container'lar host OS kernel'ini paylaşır ve MB'larca yer kaplar.

Tutarlılık: 'Benim makinemde çalışıyor' sorununu çözer. Geliştirme, test ve production ortamları aynı container'ı kullanır.

Taşınabilirlik: Container'lar herhangi bir Docker destekleyen platformda (Linux, Windows, Mac, cloud) çalışır.

Docker Temel Kavramları

Image: Container'ın şablonu. Read-only katmanlar (layers) halinde saklanır. Dockerfile'dan build edilir.

Container: Image'in çalışan örneği (instance). Her container izole bir process olarak çalışır.

Dockerfile: Image'i nasıl build edeceğinizi tanımlayan metin dosyası. FROM, RUN, COPY, CMD gibi instruction'lar içerir.

Registry: Image'leri saklayan ve dağıtan repository. Docker Hub en popüler public registry'dir.

Volume: Container verilerini kalıcı olarak saklamak için kullanılan storage. Container silinse bile veri korunur.

Dockerfile Yazımı

FROM node:18-alpine: Temel image olarak Node.js 18 (Alpine Linux) kullanın. Alpine, küçük boyutlu base image'dir.

WORKDIR /app: Çalışma dizinini /app olarak ayarlayın. Tüm sonraki komutlar bu dizinde çalışır.

COPY package*.json ./: package.json ve package-lock.json'ı kopyalayın. RUN npm install ile bağımlılıkları yükleyin.

COPY . .: Tüm kaynak kodu kopyalayın. RUN npm run build ile production build oluşturun.

EXPOSE 3000: Container'ın 3000 portunu dinlediğini belirtin. CMD ["npm", "start"] ile container başladığında çalışacak komutu tanımlayın.

Temel Docker Komutları

docker build -t myapp:1.0 .: Dockerfile'dan image build edin. -t ile image'e tag (isim:versiyon) verin.

docker run -p 3000:3000 myapp:1.0: Container çalıştırın. -p ile host portunu container portuna map edin.

docker ps: Çalışan container'ları listele. docker ps -a: Tüm container'ları (durmuş olanlar dahil) listele.

docker stop <container_id>: Container'ı durdurun. docker rm <container_id>: Container'ı silin.

docker images: Lokal image'leri listele. docker rmi <image_id>: Image'i silin.

Docker Compose

Docker Compose, çoklu container uygulamalarını tanımlamak ve yönetmek için kullanılan bir araçtır. docker-compose.yml dosyası ile yapılandırılır.

Servisler: Her servis bir container'dır. web (frontend), api (backend), db (veritabanı) gibi servisler tanımlanır.

Volumes: Veri kalıcılığı için volume'lar tanımlanır. networks: Servisler arası iletişim için network'ler oluşturulur.

docker compose up: Tüm servisleri başlatın. docker compose down: Tüm servisleri durdurun ve kaldırın.

docker compose up -d: Arka planda (detached mode) çalıştırın. docker compose logs -f: Log'ları takip edin.

Best Practices

Küçük image'ler: Alpine veya distroless base image kullanın. Multi-stage build ile build bağımlılıklarını final image'dan çıkarın.

Layer caching: Sık değişmeyen katmanları (bağımlılıklar) önce, sık değişen katmanları (kod) sonra COPY edin. Bu, build cache'i optimize eder.

.dockerignore: Gereksiz dosyaları (node_modules, .git, logs) ignore edin. Bu, build context'i küçültür.

Security: Root user yerine non-root user kullanın. RUN adduser --disabled-password appuser ile kullanıcı oluşturun.

Health check: HEALTHCHECK instruction ile container sağlık kontrolü yapın. Docker, unhealthy container'ları otomatik olarak yeniden başlatır.

Gizlilik tercihiniz

Temel çerezler güvenli kullanım ve oturum yönetimi içindir. Temel ziyaret sayımı ayrıca yapılır; izin verirseniz ek kullanım analizlerini etkinleştiririz. Çerez Politikası