Basit mantık şu: Her bileşen bir “service”, kalıcı veriler “volume”, servislerin birbiriyle konuştuğu yapı ise “network” olarak tanımlanıyor. Güncel kullanımda komut `docker compose` şeklinde; eski `docker-compose` bağımsız aracı daha çok geriye dönük uyumluluk için görülüyor.
Örnek bir `compose.yaml`:
services:
app:
image: php:8.3-fpm
working_dir: /var/www/html
volumes:
- ./:/var/www/html
nginx:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- ./:/var/www/html
- ./docker/nginx.conf:/etc/nginx/conf.d/default.conf:ro
depends_on:
- app
db:
image: mysql:8.4
environment:
MYSQL_DATABASE: uygulama
MYSQL_USER: uygulama
MYSQL_PASSWORD: gelistirme-parolasi
MYSQL_ROOT_PASSWORD: root-parolasi
volumes:
- mysql_data:/var/lib/mysql
volumes:
mysql_data:Servisleri başlatmak için:
docker compose up -d
docker compose ps
docker compose logs -f`depends_on`, container başlatma sırasına yardımcı olur fakat veritabanının bağlantı kabul etmeye hazır olduğunu tek başına garanti etmez. Gerçek projede healthcheck eklemek ve uygulamanın bağlantı retry mekanizmasını kullanmak daha doğru.
Dikkat ettiğim birkaç nokta:
- Parolaları gerçek üretim değerleriyle repoya koymamak
- Veritabanı verisini named volume içinde tutmak
- Geliştirme ve üretim Compose ayarlarını ayırmak
- Image sürümlerini tamamen belirsiz bırakmamak
- Container loglarını düzenli kontrol etmek
- `docker compose down -v` komutunun volume’leri silebileceğini unutmamak
Compose yalnızca geliştirme için değil, test ve küçük dağıtımlar için de kullanılabilir. Ancak production ortamında yedekleme, secret yönetimi, gözlemleme ve kesintisiz deploy ayrıca planlanmalı.
Takım içinde aynı Compose dosyasını kullanmak “bende çalışıyor” sorununu azaltıyor, fakat host işletim sistemi ve CPU mimarisi yine fark yaratabilir. Apple Silicon ile Linux sunucu arasında bazı image’ların platform desteği değişebiliyor. README içine gereken Docker sürümünü, ilk kurulum komutlarını ve veritabanı hazırlama adımını yazmak yeni geliştiricinin projeyi daha hızlı ayağa kaldırmasını sağlar.
Docker Compose kullanırken en çok hangi serviste zorlandınız? PHP-FPM ve Nginx yapılandırması için kullandığınız daha temiz bir klasör düzeni varsa paylaşır mısınız?
Cevaplar
0 yanıt