Docker Compose, Docker konteyner uygulamalarınızı yönetmek ve birden çok konteyneri bir araya getirmek için kullanılan bir araçtır. Docker Compose, bir YAML dosyasında tanımlanan birden çok servisi ve bu servislerin konfigürasyonlarını içerir. Bu dosya, bir uygulamanın gereksinim duyduğu tüm konteynerleri ve bu konteynerlerin nasıl bir arada çalışacaklarına dair bilgileri içerir.
Dockerfile ise, Docker konteynerlerini oluşturmak için kullanılan bir dosya formatıdır. Dockerfile, bir imaj oluşturmak için adım adım talimatlar içerir. İmaj, bir konteynerin çalıştığı ortamı ve uygulama kodunu içeren bir pakettir.
Docker Compose kullanarak PHP, Apache, MySQL ve phpMyAdmin içeren bir uygulama ortamı oluşturmak için aşağıda örnek bir docker-compose.yml dosyasını bulabilirsin. Bu dosya, bir PHP uygulamasını barındıran Apache sunucusunu, bir MySQL veritabanını ve phpMyAdmin arayüzünü içerir.
version: '3.8'
services:
# Apache ve PHP servisi
web:
image: php:8-apache
container_name: php-apache-container
ports:
- "8080:80"
volumes:
- .:/var/www/html
# MySQL servisi
mysql:
image: mysql:8.0
networks:
- my-network
container_name: mysql-container
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root_password
MYSQL_DATABASE: your_database
MYSQL_USER: your_user
MYSQL_PASSWORD: your_password
volumes:
- ./mysql-data:/var/lib/mysql
# phpMyAdmin servisi
phpmyadmin:
image: phpmyadmin/phpmyadmin
networks:
- my-network
container_name: phpmyadmin-container
ports:
- "8081:80"
environment:
PMA_HOST: mysql
MYSQL_ROOT_PASSWORD: root_password
depends_on:
- mysql
# Define networks
networks:
my-network:
Bu dosya, üç servisi (web, mysql, ve phpmyadmin) tanımlar. Servisler arasında bağlantılar için depends_on kullanılarak, MySQL servisinin başlamasının ardından phpMyAdmin servisinin başlamasını sağlar.
Ayrıca, volumes kullanılarak host makinanın dosya sistemine bağlı iki adet volume eklenmiştir. Bu volume’ler, Apache’nin PHP kodunu barındıracağı klasörü (./) ve MySQL’in veritabanı dosyalarını saklayacağı klasörü (./mysql-data) temsil eder. Bu şekilde, container’lar durduğunda bile verileriniz kaybolmaz.
Docker Compose’un networks bölümü, uygulamanın içindeki konteynerler arasında iletişim kurmalarını sağlayan ağları tanımlar. Bu ağlar, konteynerlerin birbirleriyle iletişim kurmalarına ve belirli servislerin belirli ağlarda çalışmalarına olanak tanır. Bu, özellikle güvenlik veya performans gereksinimlerini karşılamak için farklı ağ segmentlerinde çalışan servisleri izole etmek istediğiniz durumlarda kullanışlıdır.
Aşağıdaki komutla, konfigürasyonlarını tamamladığımız servisleri ayağa kaldırabilirsiniz.
docker-compose up -d
Artık tarayıcınızı açabilir ve http://localhost:8080 adresine giderek PHP uygulamanızı görebilirsiniz. phpMyAdmin arayüzüne http://localhost:8081/ adresinden erişebilirsiniz.
