“Bende calisiyor” problemini herkes duymustur. Docker tam olarak bunu coziyor. Gelistirici ortamini container icine aliyorsun, her yerde ayni sekilde calisiyor. Ben Docker’i ogrenmeden once yeni bir projeye baslamak bagimlilik kurmakla geciyordu. Simdi bir komutla her sey hazir.
Docker Nedir?
Docker, uygulamalari ve bagimliliklerini izole ortamlarda (container) calistirmanui saglayan bir platform. Sanal makineden farki: VM tam bir isletim sistemi simüle ederken container sadece uygulamayi ve bagimliliklerini paketliyor. Bu yüzden cok daha hafif ve hizli.
Kurulum
Windows icin Docker Desktop indir. Mac icin de Docker Desktop var. Linux icin Docker Engine direkt paket yoneticisiyle kurulabilir. Windows’ta WSL 2 gerekiyor — Docker Desktop kurulum sirasinda bunu soyleeyip yardim ediyor. Kurulum sonrasi test:
docker run hello-world
“Hello from Docker!” mesaji geldiyse calisiyor.
Temel Kavramlar
- Image: Uygulamanin paketi — talimatlar, dosyalar, bagimliliklar. Bir sablon gibi dusun.
- Container: Image’in calisan ornegi. Bir image’dan birden fazla container baslatabilirsin.
- Dockerfile: Image olusturmak icin talimatlar dosyasi.
- Docker Hub: Hazir image’larin bulundugu merkez. MySQL, Nginx, Python image’lari burada.
Ilk Container’i Calistir
Bir Nginx web sunucusunu tek komutla baslat:
docker run -d -p 8080:80 nginx
Tarayicida localhost:8080 ac — Nginx karsilama sayfasi geldi. Bu komut ne yapti: -d arka planda calistir, -p 8080:80 yerel 8080 portunu container’in 80 portuna bagla.
Temel Komutlar
# Calisan container'lari listele
docker ps
# Tum container'lari listele (durdurulmus dahil)
docker ps -a
# Container durdur
docker stop [container-id]
# Container sil
docker rm [container-id]
# Image'lari listele
docker images
# Container icine gir
docker exec -it [container-id] bash
# Container loglarini gor
docker logs [container-id]
Dockerfile Yazma
Kendi uygulamani image’a donusturmek icin Dockerfile yaziyorsun. Basit bir Python uygulamasi icin:
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]
Image olustur:
docker build -t benim-uygulama:1.0 .
Calistir:
docker run -p 5000:5000 benim-uygulama:1.0
Docker Compose: Birden Fazla Container
Uygulama + veritabani gibi birden fazla servisi birlikte yonetmek icin Docker Compose kullaniyorsun. docker-compose.yml dosyasi:
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
depends_on:
- db
db:
image: postgres:15
environment:
POSTGRES_PASSWORD: sifre123
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
Baslatmak icin: docker compose up -d
Durdurmak icin: docker compose down
Volume: Veriyi Kalici Tut
Container silinince icindeki veri gidiyor. Veriyi kalici tutmak icin volume kullaniyorsun:
docker run -v /yerel/klasor:/container/yolu nginx
Gercek Hayat Kullanimi
Ben Docker’i su isler icin kullaniyorum: Yerel gelistirme ortami — MySQL, PostgreSQL, Redis kurmadan container ile calistirma. Farkli Python surumlerini test etme. Ev sunucusunda Jellyfin, Pi-hole, Nextcloud calistirma. CI/CD pipeline’larinda tutarli build ortami.
Sonuc
Docker ogrenmeye basladigimda “bu kadar mi ise yariyor?” diye sasirdim. Simdi olmadan calismak garip geliyor. Yeni bir projeye baslarken ilk is docker-compose.yml yaziyorum. Ogrenme egrisi birkacc gun ama getirisi cok uzun vadeli.