
Docker’a Yeni Başlayanlar için NestJS ile Pratik Rehber
Docker’a Yeni Başlayanlar için NestJS ile Pratik Rehber
Docker ve Docker Compose’un temellerini NestJS projesiyle adım adım öğrenin. Ortam değişkenleri, Dockerfile oluşturma ve çoklu servis yönetimini bu rehberde keşfedin.
Docker ve NestJS Rehberi - Türkçe Çeviri
Docker Nedir?
Docker, geliştiricilerin uygulamaları hafif, taşınabilir konteynerler içinde otomatik olarak deploy etmelerini sağlayan açık kaynaklı bir platformdur. Bu konteynerler, uygulamanızı tüm bağımlılıkları, kütüphaneleri ve yapılandırma dosyalarıyla birlikte paketleyerek Docker'ı destekleyen herhangi bir sistemde çalıştırmayı kolaylaştırır.
Neden Docker?
- Ortamlar arası tutarlılık: Aynı kodu geliştirme, test ve production ortamında çalıştırma
- Basitleştirilmiş kurulum: Node.js, veritabanları veya diğer araçları manuel olarak kurma gereği yok
- İzolasyon: Uygulamanızın bağımlılıklarını host makineden izole tutar
- Taşınabilirlik: Uygulamanızı Docker kurulu herhangi bir makinede çalıştırma
Docker Kurulumu
Başlamak için Docker'ı docker.com'dan kurun.
Kurulum tamamlandıktan sonra çalıştığını doğrulayın:
docker --version
NestJS Uygulaması Oluşturma (Zaten yoksa)
npm i -g @nestjs/cli nest new my-nest-app cd my-nest-app
NestJS Uygulamasını Dockerize Etme
1. .dockerignore Dosyası Oluşturma
node_modules dist Dockerfile docker-compose.yml .env
Neden? .dockerignore dosyası .gitignore gibi çalışır, Docker'a image oluştururken hangi dosya/klasörleri hariç tutacağını söyler. Bu, build süresini azaltır ve final image'ınızı yerel bağımlılıklar, derlenmiş çıktılar ve hassas yapılandırma dosyaları gibi gereksiz dosyalardan temiz tutar.
2. Dockerfile Oluşturma
# Aşama 1: Build FROM node:18-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build # Aşama 2: Çalıştırma FROM node:18-alpine WORKDIR /app COPY --from=builder /app/dist ./dist COPY --from=builder /app/node_modules ./node_modules COPY .env . CMD [ "node", "dist/main.js" ]
Dockerfile Nedir? Dockerfile, Docker image'ının nasıl oluşturulacağına dair talimatlar scriptidir. Bunu uygulamanızı bir konteynerde hazırlamak için bir tarif olarak düşünün. Docker'a hangi base image'ı kullanacağını, bağımlılıkları nasıl kuracağını, uygulamayı nasıl build edeceğini ve nasıl çalıştıracağını söyler.
Ana Komutların Açıklaması:
- FROM: Base image'ı belirler. Küçük ve güvenli Node.js ortamı için node:18-alpine kullanırız
- WORKDIR: Konteyner içindeki çalışma dizinini tanımlar
- COPY: Projenizdeki dosyaları konteynere kopyalar
- RUN: Bağımlılık kurma veya proje build etme gibi shell komutlarını çalıştırır
- CMD: Konteyner başladığında çalıştırılacak varsayılan komut (NestJS uygulamamız)
💡 Bu Dockerfile, final image'ı küçük tutmak için build ve run fazlarını ayıran multi-stage build kullanır.
3. Environment Değişkenlerini Yönetme
NestJS uygulamanızın @nestjs/config kullandığından emin olun:
npm install @nestjs/config
main.ts veya modülünüzde:
import { ConfigModule } from '@nestjs/config'; @Module({ imports: [ ConfigModule.forRoot({ isGlobal: true, }), ], })
.env dosyası ekleyin:
PORT=3000
Kodunuzda okuyun:
const port = process.env.PORT || 3000;
🔒 .env dosyasını asla Git'e commit etmeyin. Özel kalmalı ve versiyon kontrolü dışında tutulmalıdır.
Docker Compose: Multi-Container Kurulumlarını Basitleştirme
Docker Compose, multi-container Docker uygulamalarını tanımlamanızı ve çalıştırmanızı sağlar. NestJS uygulamanız + veritabanı gibi servisleri birleştirmek için mükemmeldir.
Örnek: docker-compose.yml
version: '3.8' services: app: build: . ports: - "3000:3000" env_file: - .env depends_on: - db db: image: postgres:15 restart: always environment: POSTGRES_USER: user POSTGRES_PASSWORD: password POSTGRES_DB: myapp volumes: - pgdata:/var/lib/postgresql/data volumes: pgdata:
Neden Docker Compose Kullanmalı? Backend sunucunuzu, bir PostgreSQL veritabanını ve belki bir Redis instance'ını başlatmanız gerektiğini düşünün - hepsi birbirleriyle konuşacak şekilde yapılandırılmış. Docker Compose tüm bunları tek bir dosyada tanımlamanızı ve tek komutla başlatmanızı sağlar, yerel geliştirme ve production orkestrasyon işlemlerini çok daha basit hale getirir.
Sonra çalıştırın:
docker-compose up --build
NestJS uygulamanız 3000 portunda başlayacak ve PostgreSQL veritabanı konteynerine bağlanacaktır.
Faydalı Docker Komutları
- Image build etme:
docker build -t my-nest-app .
- Konteyner çalıştırma:
docker run -p 3000:3000 my-nest-app
- Konteynerleri listeleme:
docker ps
- Konteynerleri durdurma:
docker-compose down
Görsel Genel Bakış
NestJS → Derlenmiş → Docker Konteyneri → Port 3000 açık → Veritabanına bağlı (Postgres)
Sonuç
Docker geliştirmeyi basitleştirir, tutarlılığı artırır ve modern uygulama deployment'ı için temeldir. NestJS uygulamanızı konteynerize ederek ve Docker Compose kullanarak kurulum süresini azaltır, "benim makinemde çalışıyor" sorunlarından kaçınır ve uygulamanızı production ölçeklenebilirliği için hazırlarsınız.
Backend geliştirmeye yeni başlıyorsanız veya iş akışınızı modernize etmek istiyorsanız, Docker öğrenmek hızla karşılığını veren bir yatırımdır.
Projeniz için Docker kurulumu konusunda yardıma mı ihtiyacınız var? Çekinmeden ulaşın veya LinkedIn'de benimle bağlantı kurun.