Anasayfa / Blog / Docker’a Yeni Başlayanlar için NestJS ile Pratik Rehber
Docker’a Yeni Başlayanlar için NestJS ile Pratik Rehber

Docker’a Yeni Başlayanlar için NestJS ile Pratik Rehber

Öne Çıkan

Docker’a Yeni Başlayanlar için NestJS ile Pratik Rehber

a

admin

Yazar

20 dakika okuma
48 Görüntülenme
21 Haziran 2025

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

Eğer projenizi farklı makinelerde kurma ve çalıştırma konusunda zorlandıysanız, ya da uygulamanızı sunucuya deploy etmek her zaman tekerleği yeniden icat etmek gibi geliyorsa, doğru yerdesiniz. Bu blog yazısında Docker'ın temellerini, geliştiriciler için neden bu kadar güçlü bir araç olduğunu ve gerçek bir NestJS projesinde nasıl kullanılacağını ele alacağız. Ayrıca environment değişkenlerinin nasıl yönetileceğini keşfedecek ve geliştirme iş akışınızı basitleştirmek için Docker Compose'u tanıtacağız.

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.

bu yazıyı paylaş

Bağlantı Kopyalandı