Docker Compose Nedir?
Docker Compose, birden fazla container'ı tek bir YAML dosyası üzerinden tanımlamamızı ve yönetmemizi sağlayan Docker aracıdır.
Tek tek uzun docker run komutları yazmak yerine servisleri, portları, volume bağlantılarını ve network ayarlarını compose.yaml dosyasında düzenli şekilde tutabiliriz.
Biz kemaltokmak.com projesinde hem web sitesi container'ını hem de Nginx Proxy Manager gibi servisleri Docker Compose ile daha düzenli yönetiyoruz.
Neden Docker Compose Kullanılır?
Docker Compose özellikle birden fazla container'ın birlikte çalıştığı projelerde yönetimi kolaylaştırır.
- Container ayarları tek dosyada tutulur.
- Servisler tek komutla başlatılır.
- Network ve volume tanımları düzenli olur.
- Projeyi başka sunucuya taşımak kolaylaşır.
- Tekrar kurulabilir bir yapı oluşturur.
Proje Klasörü Hazırlama
Her Docker Compose projesi için ayrı bir klasör kullanmak düzenli bir yapı sağlar.
cd /opt/docker
mkdir -p compose-ornek
cd compose-ornek
Bu klasör içinde compose.yaml dosyamız ve gerekli proje dosyaları bulunacaktır.
compose.yaml Dosyası Oluşturma
Docker Compose dosyası genellikle compose.yaml veya docker-compose.yml adıyla oluşturulur.
nano compose.yaml
Basit bir Nginx container örneği:
services:
web:
image: nginx:alpine
container_name: compose-web
restart: unless-stopped
ports:
- "8080:80"
Servis Tanımlama
Compose dosyasında her container bir servis olarak tanımlanır. Örneğin web, database veya proxy gibi servisler oluşturabiliriz.
services:
web:
image: nginx:alpine
container_name: web-container
db:
image: mariadb:latest
container_name: db-container
environment:
MYSQL_ROOT_PASSWORD: guclu_sifre
Gerçek projelerde şifreleri doğrudan compose.yaml içine yazmak yerine .env dosyası kullanmak daha güvenlidir.
Container'ları Başlatma
compose.yaml dosyasının bulunduğu klasörde şu komut çalıştırılır:
docker compose up -d
-d parametresi container'ların arka planda çalışmasını sağlar.
Container Durumunu Kontrol Etme
Çalışan container'ları görmek için:
docker compose ps
Genel Docker container listesini görmek için:
docker ps
Container Loglarını Görme
Servislerde hata olup olmadığını anlamak için log kontrolü yapılır.
docker compose logs
Belirli bir servis için log görmek istersek:
docker compose logs web
Canlı log takibi için:
docker compose logs -f
Docker Compose ile Network Kullanımı
Servislerin aynı network üzerinde haberleşebilmesi için Compose içinde network tanımı yapılabilir.
services:
web:
image: nginx:alpine
networks:
- app-network
db:
image: mariadb:latest
networks:
- app-network
networks:
app-network:
driver: bridge
Aynı network içindeki container'lar birbirlerine servis isimleriyle erişebilir. Örneğin web container, db servisine db adıyla ulaşabilir.
Docker Compose ile Volume Kullanımı
Volume kullanarak container içindeki verileri kalıcı hale getirebiliriz.
services:
web:
image: nginx:alpine
volumes:
- ./html:/usr/share/nginx/html
db:
image: mariadb:latest
volumes:
- db-data:/var/lib/mysql
volumes:
db-data:
Site dosyaları gibi düzenli değişen içeriklerde bind mount, veritabanı gibi kalıcı verilerde named volume kullanmak daha uygundur.
Compose Projesini Güncelleme
Compose dosyasında değişiklik yaptıktan sonra container'ları yeniden oluşturmak gerekir.
docker compose up -d
İmajları güncellemek için:
docker compose pull
docker compose up -d
Compose Projesini Durdurma ve Temizleme
Container'ları durdurmak için:
docker compose stop
Container'ları kaldırmak için:
docker compose down
Volume'leri de kaldırmak için:
docker compose down -v
docker compose down -v komutu volume verilerini de silebilir. Veritabanı gibi önemli veriler varsa dikkatli kullanılmalıdır.
Bu Dokümanda Ne Öğrendik?
Bu dokümanda Docker Compose ile çoklu container yönetimini, compose.yaml yapısını, servis tanımlamayı, network ve volume kullanımını öğrendik.
- Docker Compose'un ne işe yaradığını öğrendik.
- compose.yaml dosyası oluşturduk.
- Servis, port, network ve volume tanımları yaptık.
- Container'ları tek komutla başlattık.
- Log ve durum kontrollerini öğrendik.
- Compose projesini durdurma ve temizleme komutlarını gördük.