Mikroservisler ve Orkestrasyon

Docker Compose ile uygulama konteynerizasyonu ve mikroservis mimarisi

Kubedo Academy’e hoş geldiniz! Bu laboratuvarda Docker Compose ile mikroservis mimarisi oluşturmayı öğreneceksiniz.


Zorluk seviyesi: Orta
Süre: Yaklaşık 60 dakika

Giriş

Bu laboratuvarda basit bir Python script’inden başlayarak çoklu servis mimarisine ulaşacağız:

Mikroservis Mimarisi
Link Extractor uygulaması mikroservis mimarisi

Mimari Bileşenler

ServisTeknolojiAçıklama
WebPHP/ApacheKullanıcı arayüzü
APIPython/FlaskLink çıkarma servisi
CacheRedisÖnbellek

Adım 0: Temel Script

Repository’yi klonlayın:

Terminal
$ git clone https://github.com/ibnesayeed/linkextractor.git
cd linkextractor
git checkout demo

Basit Python script’i:

#!/usr/bin/env python
import sys
import requests
from bs4 import BeautifulSoup

res = requests.get(sys.argv[-1])
soup = BeautifulSoup(res.text, "html.parser")
for link in soup.find_all("a"):
    print(link.get("href"))

[!WARNING] Bu script bağımlılıklar yüklü değilse çalışmaz. Docker bu sorunu çözer!


Adım 1: Containerize Edilmiş Script

Terminal
$ git checkout step1
cat Dockerfile
FROM       python:3
RUN        pip install beautifulsoup4
RUN        pip install requests
WORKDIR    /app
COPY       linkextractor.py /app/
RUN        chmod a+x linkextractor.py
ENTRYPOINT ["./linkextractor.py"]

İmaj oluşturma ve çalıştırma:

Terminal
$ docker image build -t linkextractor:step1 .
docker container run -it --rm linkextractor:step1 http://example.com/

Adım 2: Geliştirilmiş Script

Terminal
$ git checkout step2
docker image build -t linkextractor:step2 .
docker container run -it --rm linkextractor:step2 https://example.com/

Yenilikler:

  • Tam URL’ler
  • Anchor text çıkarma
  • Modül olarak kullanılabilir

Adım 3: API Servisi

Terminal
$ git checkout step3
docker image build -t linkextractor:step3 .
docker container run -d -p 5000:5000 --name=linkextractor linkextractor:step3

API’yi test edin:

Terminal
$ curl -i http://localhost:5000/api/http://example.com/

Adım 4: Docker Compose

Terminal
$ git checkout step4
cat docker-compose.yml
version: '3'

services:
  api:
    image: linkextractor-api:step4-python
    build: ./api
    ports:
      - "5000:5000"
  web:
    image: php:7-apache
    ports:
      - "80:80"
    environment:
      - API_ENDPOINT=http://api:5000/api/
    volumes:
      - ./www:/var/www/html

Servisleri başlatın:

Terminal
$ docker-compose up -d --build

Adım 5: Redis Cache

Terminal
$ git checkout step5
version: '3'

services:
  api:
    build: ./api
    ports:
      - "5000:5000"
    environment:
      - REDIS_URL=redis://redis:6379
  web:
    build: ./www
    ports:
      - "80:80"
    environment:
      - API_ENDPOINT=http://api:5000/api/
  redis:
    image: redis

Docker Compose Komutları

KomutAçıklama
docker-compose upServisleri başlatır
docker-compose up -dArka planda başlatır
docker-compose downServisleri durdurur
docker-compose logsLogları gösterir
docker-compose psÇalışan servisleri listeler

Sonuç

Bu laboratuvarda:

  • Basit script’ten mikroservis mimarisine geçiş
  • Docker Compose ile çoklu servis yönetimi
  • Redis cache entegrasyonu
  • Geliştirme ve üretim ortamı farklılıkları

öğrendiniz.