Mikroservis Nedir ve Neden Kullanmalıyız?
Her şeyden önce, mikroservis nedir? Mikroservis, bir uygulamanın küçük, bağımsız birimlere bölünmesi anlamına gelir. Bu birimler, genellikle farklı teknolojiler kullanarak kendi başlarına çalışabilir ve birbirleriyle iletişim kurarlar. Örneğin, bir e-ticaret sitesinin ödeme işlemleri, kullanıcı yönetimi, ürün bilgileri gibi farklı hizmetler birbirinden bağımsız olarak çalışabilir. Bu sayede her bir hizmet kendi başına güncellenebilir, ölçeklendirilebilir ve bakımı daha kolay hale gelir.
Ancak mikroservislerin sunduğu avantajlar, aynı zamanda beraberinde bazı zorlukları da getirir. Birçok küçük servisin yönetimi, birbirinden bağımsız çalışmaları, ağ üzerinde iletişim kurmaları gibi unsurlar, klasik monolitik yapıya kıyasla daha karmaşık olabilir. İşte Docker, bu karmaşıklığı basitleştiriyor. Docker, her mikroservisi izole edilmiş bir ortamda çalıştırarak, bağımsızlıklarını korur ve yönetimini kolaylaştırır.
Docker ve Mikroservislerin İlişkisi
Docker, mikroservisler için mükemmel bir çözüm sunar. Docker, uygulamalarınızı konteyner adı verilen izole edilmiş alanlarda çalıştırmanıza olanak tanır. Konteynerler, tıpkı sanal makineler gibi, uygulamanızı çalıştıracak bir ortam yaratır ancak çok daha hafiftir. Docker ile mikroservislerinizi her bir konteynerde çalıştırarak, her mikroservisin ihtiyaç duyduğu ortamı bağımsız olarak yönetebilirsiniz.
Docker’ın avantajlarından biri de her mikroservisin kendi bağımlılıklarını ve yapılandırmalarını taşıyabilmesidir. Böylece, her servisi ayrı ayrı test edebilir, güncelleyebilir ve gerektiğinde yeniden başlatabilirsiniz. Docker sayesinde, mikroservislerinizi birbirinden bağımsız bir şekilde izleyebilir ve ölçeklendirebilirsiniz.
Docker ile Mikroservis Kurulumu
Şimdi, Docker ile mikroservis mimarisini kurmaya başlayalım. Öncelikle, Docker’ın bilgisayarınıza yüklü olduğundan emin olun. Docker’ı indirdikten sonra, aşağıdaki adımları takip ederek ilk mikroservisinizi oluşturabilirsiniz.
# Dockerfile oluşturma
FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8080
CMD ["npm", "start"]
Yukarıdaki Dockerfile, basit bir Node.js uygulaması için gerekli adımları içeriyor. Burada, Node.js’in 14 sürümünü kullandık, uygulamamızın çalışacağı dizini belirledik, gerekli bağımlılıkları yükledik ve uygulamanın portunu açtık. Dockerfile, mikroservisinizin nasıl çalışacağını tanımlar.
Şimdi, Docker görüntüsünü oluşturma ve çalıştırma adımlarına geçelim:
# Docker görüntüsü oluşturma
docker build -t my-microservice .
# Docker konteynerini çalıştırma
docker run -d -p 8080:8080 my-microservice
Bu komutlarla, mikroservisinizin Docker konteyneri içinde çalışmasını sağlıyoruz. Artık mikroservisiniz bağımsız bir konteynerde çalışıyor ve izole edilmiş bir ortamda diğer mikroservislerle etkileşime girebilir.
Yaygın Karşılaşılan Hatalar ve Çözümleri
Docker ile mikroservis kurulumunda karşılaşabileceğiniz bazı yaygın hatalar ve bunların çözümleri şunlar olabilir:
1. Hata: "Port zaten kullanılıyor" – Çözüm: Docker konteynerini çalıştırırken, belirttiğiniz port numarası zaten başka bir uygulama tarafından kullanılıyor olabilir. Bu durumda, farklı bir port numarası belirleyerek hatayı çözebilirsiniz.
2. Hata: "Konteyner çalışmıyor" – Çözüm: Konteynerin düzgün çalışıp çalışmadığını kontrol etmek için `docker logs
Veritabanı ve Diğer Servislerin Docker ile Yönetimi
Mikroservislerinizi çalıştırırken, genellikle veritabanları ve diğer dış servislerle iletişim kurmanız gerekebilir. Docker, bu entegrasyonu kolaylaştırmak için harika araçlar sunar. Örneğin, veritabanı olarak PostgreSQL veya MySQL kullanıyorsanız, ilgili veritabanı konteynerlerini Docker Compose ile bir arada yönetebilirsiniz.
İşte örnek bir Docker Compose dosyası:
version: '3'
services:
app:
build: .
ports:
- "8080:8080"
db:
image: postgres:13
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: mydatabase
Bu dosya, bir uygulama servisi ve PostgreSQL veritabanı servisi ile mikroservis mimarisini yönetmenize olanak tanır. Docker Compose ile birden fazla servisi kolayca bir arada çalıştırabilirsiniz.