Docker Temelleri Eğitimi: Yeni Başlayanlar İçin Adım Adım Kapsamlı Rehber
Bu wiki makalesi, BT profesyonelleri ve geliştiriciler için tasarlanmış, Docker teknolojisini sıfırdan öğrenmeye yönelik adım adım bir eğitim sunmaktadır. Konteynerleştirmenin temellerinden başlayarak, karmaşık uygulamaları yönetmek için Docker Compose, veri kalıcılığı için Volume'ler ve servis iletişimi için Ağlar konularını ele alacağız.
1. Konteynerleştirmenin Temelleri: Docker Nedir?
Docker, uygulamaları ve bağımlılıklarını izole edilmiş ortamlarda (konteynerler) paketlemeyi sağlayan açık kaynaklı bir platformdur. Bu, geliştirme, test ve üretim ortamları arasındaki tutarsızlık sorununu ortadan kaldırır.
Sorun: Ortam Tutarsızlığı
Geliştiricinin makinesinde çalışan bir uygulamanın, test veya canlı sunucuda farklı davranması.
Çözüm Adımları: Docker Kurulumu ve İlk Görüntü
- İşletim sisteminize uygun Docker sürümünü (Docker Desktop önerilir) kurun.
- Kurulumu doğrulayın.
- Temel bir imajı (örneğin Nginx) çekin ve çalıştırın.
# Docker kurulumunu kontrol etme
docker --version
# Nginx imajını çekme
docker pull nginx
# Nginx konteynerini çalıştırma (port 8080'i host'un 80 portuna eşleme)
docker run -d -p 80:80 --name web_server nginx
İpucu: '-d' bayrağı konteyneri arka planda (detached mode) çalıştırır. '-p' bayrağı port yönlendirmeyi sağlar.
2. Dockerfile ile Özel İmaj Oluşturma
Gerçek dünya senaryolarında, genellikle mevcut bir imajı kullanmak yerine kendi uygulamanızı paketlemeniz gerekir. Bu, bir Dockerfile aracılığıyla yapılır.
Sorun: Uygulama Bağımlılıklarını Paketleme
Node.js veya Python uygulamanızın tüm gereksinimlerini (kütüphaneler, çalışma zamanı) hızlıca dağıtmak.
Çözüm Adımları: Basit Bir Web Uygulaması İçin Dockerfile
- Proje kök dizininde
Dockerfileadında bir dosya oluşturun. - Temel imajı, çalışma dizinini ve gerekli komutları tanımlayın.
- İmajı oluşturun ve konteyneri başlatın.
# Örnek Dockerfile (Basit bir Node.js uygulaması için)
FROM node:18-alpine
WORKDIR /app
COPY package*.json .
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
# İmaj oluşturma (mevcut dizini kullanarak)
docker build -t my-nodejs-app .
# Konteyneri çalıştırma
docker run -d -p 4000:3000 my-nodejs-app
3. Docker Compose: Çoklu Konteyner Yönetimi
Modern uygulamalar genellikle veritabanı, ön uç ve arka uç gibi birden fazla servisten oluşur. Docker Compose, bu servisleri tek bir yapılandırma dosyası (docker-compose.yml) ile tanımlamanıza ve yönetmenize olanak tanır.
Sorun: Birden Fazla Servisin Koordinasyonu
Veritabanı ve uygulama konteynerlerinin aynı anda başlatılması ve birbirleriyle iletişim kurmasının sağlanması.
Çözüm Adımları: Compose Dosyası Oluşturma
- Proje kök dizininde
docker-compose.ymldosyasını oluşturun. - Servisleri, imajları ve ağ ayarlarını tanımlayın.
- Tek bir komutla tüm yığını başlatın.
# Örnek docker-compose.yml (Web ve PostgreSQL servisi)
version: '3.8'
services:
web:
build: .
ports:
- "80:3000"
depends_on:
- db
db:
image: postgres:14-alpine
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
volumes:
- db_data:/var/lib/postgresql/data
volumes:
db_data:
# Tüm servisleri başlatma
docker-compose up -d
# Tüm servisleri durdurma ve kaldırma
docker-compose down
Önemli Not: volumes kullanımı, konteynerler yeniden oluşturulsa bile verilerin kalıcı olmasını sağlar. Bu, veritabanları için kritik öneme sahiptir.
4. Ağlar ve Volume'ler (Veri Kalıcılığı)
Docker ağları, konteynerlerin birbirleriyle güvenli ve verimli bir şekilde iletişim kurmasını sağlar. Volume'ler ise konteyner yaşam döngüsünden bağımsız olarak veriyi saklar.
Volume Yönetimi
Veri kalıcılığı için Named Volumes (Adlandırılmış Hacimler) kullanmak en iyi uygulamadır. Docker Compose örneğimizde db_data adında bir hacim tanımladık.
# Mevcut hacimleri listeleme
docker volume ls
# Hacim oluşturma (manuel)
docker volume create my_app_logs
Ağ Yönetimi
Compose dosyası kullanıldığında, Docker otomatik olarak bir ağ oluşturur ve servislerin birbirlerini isimleriyle bulmalarını sağlar (örneğimizde 'web' servisi 'db' servisine isimle erişebilir).



