Docker ile Konteynerleştirme: Adım Adım Başlangıç Rehberi

Modern yazılım geliştirme dünyasında "Benim makinemde çalışıyordu" cümlesi artık geçmişte kaldı. Uygulamaların her ortamda aynı şekilde çalışmasını sağlamak, hızla ölçeklenmek ve dağıtım süreçlerini otomatikleştirmek isteyen herkesin yolu bir noktada Docker’dan geçiyor. Bu yazılım dünyasının vazgeçilmez aracı, uygulamalarınızı bağımlılıklarıyla birlikte hafif, taşınabilir konteynerler içinde paketlemenize olanak tanır. Eğer siz de Docker’a sıfırdan başlamak istiyorsanız, bu docker ile konteynerleştirme rehberi tam size göre. Adım adım ilerleyerek temel kavramları, kurulumu, kritik komutları, kendi imajınızı oluşturmayı ve çoklu konteyner yönetimini uygulamalı olarak öğreneceksiniz.

Docker Nedir ve Neden Kullanılır?

Docker, 2013 yılında piyasaya sürülen açık kaynaklı bir konteynerleştirme platformudur. Geliştiricilere, bir uygulamayı tüm kütüphaneleri, araçları ve bağımlılıklarıyla birlikte standart bir birim (konteyner) içinde paketleme imkânı sunar. Bu sayede uygulama, geliştirme ortamından test ve üretim ortamına kadar her yerde tutarlı biçimde çalışır.

Konteynerler çoğu zaman sanal makinelerle (VM) karşılaştırılır; ancak aralarında temel farklar vardır. Bir sanal makine, konuk işletim sistemini de barındırdığı için gigabyte seviyesinde yer kaplar ve dakikalar sürebilen bir başlatma süresine sahiptir. Buna karşılık Docker konteynerleri, ana işletim sisteminin çekirdeğini paylaşır, yalnızca uygulama ve bağımlılıklarını taşır. Sonuç olarak imaj boyutları megabyte seviyesinde kalır ve konteynerler saniyeler içinde ayağa kalkar. Bu hafiflik, kaynak kullanımında ciddi tasarruf sağlarken aynı uygulamayı aynı sunucuda defalarca çalıştırmanıza imkân verir.

Docker, yalnızca bir izolasyon aracı değil, aynı zamanda CI/CD süreçlerinin standart bir parçası haline gelmiştir. GitHub Actions gibi platformlarda, her commit sonrası aynı konteyner ortamında testlerin çalıştırılmasını, derleme yapılmasını ve hatta dağıtımın tetiklenmesini sağlar. Signalique’in GitHub Actions ile CI/CD Pipeline Kurulumu yazısında da ele aldığımız gibi, Docker bu boru hatlarında tekrarlanabilir, güvenilir bir altyapı sunar.

Docker Kurulumu

İster bir sunucuda uygulama dağıtacak olun ister yerel geliştirme yapın, Docker’ı sisteminize kurmak ilk adımdır. İşletim sisteminize uygun yöntemi seçerek hızla başlayabilirsiniz.

Linux (Ubuntu / Debian)

Çoğu üretim ortamında Docker Engine, sunucuya doğrudan kurulur. Ubuntu 20.04 veya daha yeni bir sürüm kullandığınızı varsayarak temel kurulum adımları şöyledir:

  1. Paket listesini güncelleyin ve gerekli bağımlılıkları yükleyin:
    bash sudo apt update sudo apt install ca-certificates curl
  2. Docker’ın resmi GPG anahtarını ekleyin ve deposunu sisteminize tanıtın:
    bash sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  3. Paket listesini tekrar güncelleyip Docker Engine’i kurun:
    bash sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  4. Kullanıcınızı docker grubuna ekleyerek sudo kullanmadan komut çalıştırabilirsiniz:
    bash sudo usermod -aG docker $USER newgrp docker

Kurulumu doğrulamak için docker run hello-world komutunu çalıştırabilirsiniz; konteyner başarıyla çalışıyorsa Docker hazır demektir.

Windows / macOS

Geliştirme makinelerinde en hızlı başlangıç Docker Desktop uygulamasıdır. Resmi Docker kurulum sayfasından uygun yükleyiciyi indirin ve kurulum sihirbazını takip edin. Kurulum sonrası sisteminizde bir Docker simgesi belirecek ve terminal ya da komut satırı üzerinden docker komutlarına erişebileceksiniz. Docker Desktop; GUI tabanlı bir kontrol paneli, gömülü bir Kubernetes kümesi ve volume/container yönetimi gibi ek avantajlar sunar.

Temel Docker Komutları

Konteynerlerle çalışmaya başlamak için birkaç hayati komutu bilmek yeterlidir. Aşağıdaki komutlar, resmi dokümantasyon ve topluluğun standartlaşmış kullanımına dayanır.

  • Bir konteyner çalıştırma:
    docker run -d --name web -p 8080:80 nginx:alpine
    Bu komut, nginx web sunucusunu arka planda (-d) başlatır, ana makinenin 8080 portunu konteynerin 80 portuna yönlendirir.

  • Çalışan konteynerleri listeleme:
    docker ps
    (Tüm konteynerleri görmek için docker ps -a)

  • Bir konteyneri durdurma / silme:
    docker stop web
    docker rm web

  • İndirilen imajları listeleme:
    docker images

  • Hazır bir imaj çekme:
    docker pull postgres:15-alpine

Bu komutların yanı sıra docker logs, docker exec -it gibi etkileşimli araçlarla konteyner içine girebilir, logları takip edebilirsiniz. Pratik yapmak için resmi başlangıç rehberine göz atmayı unutmayın.

Dockerfile ile Kendi İmajınızı Oluşturma

Hazır imajlar birçok senaryoyu kapsasa da, kendi uygulamanızı bir imaj haline getirmek için Dockerfile yazmanız gerekir. Docker imajları katmanlı bir yapıya sahiptir; her komut (RUN, COPY, ADD) yeni bir katman oluşturur. Bu sayede yalnızca değişen katmanlar yeniden oluşturulur ve build süreleri ciddi oranda kısalır.

Basit bir Python web uygulamasını konteynerleştiren örnek bir Dockerfile şöyle olabilir:

# Temel imaj
FROM python:3.11-slim

# Çalışma dizini
WORKDIR /app

# Bağımlılıkları kopyala ve yükle
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# Uygulama kodunu kopyala
COPY . .

# Uygulamanın dinleyeceği portu bildir
EXPOSE 5000

# Konteyner başlatıldığında çalışacak komut
CMD ["python", "app.py"]

Bu dosyayı projenizin kök dizinine kaydedip docker build -t benim-app:1.0 . komutuyla imajınızı oluşturabilirsiniz. FROM katmanı temel imajı, RUN bağımlılık kurulumunu, COPY kod aktarımını yönetir. CMD ise konteyner başladığında çalışacak varsayılan komutu tanımlar. (ENTRYPOINT ile birlikte kullanım daha esnek yapılandırmalar sağlar.)

Docker Compose ile Çoklu Konteyner Yönetimi

Gerçek dünya uygulamaları nadiren tek başına çalışır; bir web sunucusu, bir veritabanı, belki bir önbellek katmanı gerekir. İşte bu noktada docker-compose devreye girer. YAML tabanlı bir yapılandırma dosyası ile birden fazla konteyneri tek bir servis kümesi olarak tanımlar, ayağa kaldırır ve yönetir.

Aşağıda basit bir web uygulaması ile PostgreSQL veritabanını aynı ağda buluşturan bir docker-compose.yml örneği görüyorsunuz:

version: "3.9"
services:
  web:
    build: .
    ports:

      - "5000:5000"
    environment:
      - DATABASE_URL=postgresql://appuser:apppass@db:5432/appdb
    depends_on:
      - db
  db:
    image: postgres:15-alpine
    environment:
      POSTGRES_USER: appuser
      POSTGRES_PASSWORD: apppass
      POSTGRES_DB: appdb
    volumes:
      - db_data:/var/lib/postgresql/data

volumes:
  db_data:

Bu yapılandırmada web servisi, aynı dizindeki Dockerfile’dan build edilir; db servisi hazır PostgreSQL imajını kullanır. depends_on ile başlangıç sırası belirtilir, volume ile veri kalıcılığı sağlanır. Terminalde docker compose up -d komutunu çalıştırdığınızda her iki konteyner de arka planda başlatılır. Resmi Docker Compose başlangıç rehberi bu yapıyı daha derinlemesine inceler.

Çoklu konteyner yönetimi, özellikle mikroservis mimarisine geçişin ilk adımlarından biridir. Her servisi bağımsız bir konteynerde çalıştırmak, Mikroservis Mimarisi Nedir? yazımızda detaylandırdığımız prensiplerin pratiğe dökülmesini sağlar. Docker Compose sayesinde tüm bu servisleri yerel makinenizde tek komutla simüle edebilir, geliştirme hızınızı katlayabilirsiniz.

Sonuç

Docker’a sıfırdan başlamak göz korkutucu görünse de, temel yapı taşlarını kavradıktan sonra yazılım yaşam döngünüzün her aşamasında size büyük avantajlar sunar. Bu adım adım rehber boyunca konteynerlerin sanal makineye göre üstünlüklerini, kurulum adımlarını, vazgeçilmez komutları, kendi imajınızı yazmayı ve çoklu konteyner düzenlemeyi öğrendiniz. Artık kendi projelerinizde Docker’ı devreye alabilir, CI/CD pipeline’larınıza entegre edebilir ve mikroservis yolculuğunuzda sağlam bir temel oluşturabilirsiniz.

Docker Hub üzerindeki binlerce hazır imajı keşfetmek için Docker Hub adresini ziyaret edebilir, öğrendiklerinizi Signalique’in diğer rehberleriyle birleştirmeye hemen başlayabilirsiniz.

Kaynaklar