29 Mayıs 2023 • 25 dakikalık okuma
Docker Compose; birbiriyle ilişkili birden fazla konteynırın konfigüre edip çalıştırılmasını sağlar. Böylece uygulamanın kullandığı her konteynır için el ile ayrı ayrı konfigürasyon yapılması ve çalıştırılması gerekmez. Docker compose komutu ile uygulama çalıştırmak için docker-compose.yaml dosyası kullanılır.
Docker Compose yüklü olup olmadığını kontrol için terminal ekranında;
docker compose version
Docker Compose version cevabı alınıyor ise Docker Compose yüklüdür.
Docker Compose yüklü değil ise docker-compose-plugin yüklenir. Detaylı kurulum adımları için tıklayınız...
Docker Compose dosyası, Docker uygulamasınındaki konteynır, volume ve ağ tanımlamaları ve ayarlarını barındıran .yaml uzantılı dosyadır. Uygulamanın çalışması için gerekli olan tüm tanımları barındırır. Dosyadaki tanımlara göre konteynırlar çalıştırılır ve uygulama ayağa kaldırılır.
Örnek bir Docker Compose dosyası; docker-compose.yaml
Docker Compose dosyasındaki version tanımlaması, Docker Compose dosyasının sürümünü belirtir;
version: '3.9'
services tanımlaması, çalışacak konteynırları ve konteynır ayarlarını belirtir; image tanımlaması kullanılacak imaj adını belirtir. container_name ile konteynır ismi tanımlanır. port ile konteynıra erişim için kullanılan portları tanımlanır. Konteynır env parametreleri environment tanımı altına yazılabilir. Host volume tanımlamak için volumes tanımlaması altına ilgili dizinler yazılır. expose tanımı ile konteynırlar tarafından erişilebilen port tanımlanır, expose ile tanımlanan portlara host bilgisayardan erişilemez sadece aynı ağda üzerindeki konteynırlar erişebilir.
services:
db:
image: mysql:8.0.27
container_name: wordpress-mysqldb
volumes:
- /opt/mysql/:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=somewordpress
- MYSQL_DATABASE=wordpress
- MYSQL_USER=wordpress
- MYSQL_PASSWORD=wordpress
expose:
- 3306
- 33060
Named Volume tanımlamak için en üst düzeyde volumes tanımlaması altına volume ismi yazılır sonrasında tanımlanan volume ismi konteynır altındaki volumes tanımı altına yazılır;
services:
db:
image: mysql:8.0.27
container_name: wordpress-mysqldb
volumes:
- wordpressdb_data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=somewordpress
- MYSQL_DATABASE=wordpress
- MYSQL_USER=wordpress
- MYSQL_PASSWORD=wordpress
expose:
- 3306
- 33060
volumes:
wordpressdb_data:
İkinci bir konteynır tanımlamak için en üst düzeyde services tanımlaması altına ilgili ismi yazılır;
services:
db:
image: mysql:8.0.27
container_name: wordpress-mysqldb
volumes:
- wordpress_db_data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=somewordpress
- MYSQL_DATABASE=wordpress
- MYSQL_USER=wordpress
- MYSQL_PASSWORD=wordpress
expose:
- 3306
- 33060
wordpress:
image: wordpress:latest
container_name: wordpress
volumes:
- wordpress_data:/var/www/html
ports:
- 8084:80
environment:
- WORDPRESS_DB_HOST=db
- WORDPRESS_DB_USER=wordpress
- WORDPRESS_DB_PASSWORD=wordpress
- WORDPRESS_DB_NAME=wordpress
volumes:
wordpress_db_data:
wordpress_data:
docker-compose.yaml dosyasında belirtilen şekilde konteynırları başlatır;
docker compose up -d
docker-compose.yaml dosyasıyla oluşturulan konteynırları ve ağları siler;
docker compose down
docker-compose.yaml dosyasıyla oluşturulan konteynırları, volume ve ağları siler;
docker compose down --volumes
docker-compose.yaml dosyasıyla oluşturulan tüm konteynırları durdurur;
docker compose stop
docker-compose.yaml dosyasıyla oluşturulan tüm süreçleri gösterir;
docker compose ps
docker-compose.yaml dosyasıyla oluşturulan tüm loglarını gösterir;
docker compose logs
docker-compose.yaml dosyasıyla oluşturulan tüm kaynak kullanımını gösterir;
docker compose top