Docker ile Kalıcı Veri Depolama ile MySQL/MariaDB Nasıl Dağıtılır?
Giriş
Bu eğitimde, kalıcı veri depolama ile Docker kullanarak bir MySQL veya MariaDB veritabanı konteyneri dağıtıyorsunuz. Konteynerlerde veritabanı çalıştırmak, dağıtımı, sürüm kontrolünü ve ortamlar arasında taşınabilirliği basitleştirir. Bu eğitimin sonunda, Docker'da konteynerin dışında güvenli bir şekilde depolanan verilerle çalışan üretime hazır bir MySQL veya MariaDB örneğine sahip olacaksınız.
Ön Koşullar
Hedef kitle: Orta düzey sistem yöneticileri
Tahmini tamamlama süresi: ~30–45 dakika
İşletim Sistemi
- Ubuntu 24.04 LTS (test edildi)
- Ayrıca uyumlu: Ubuntu 22.04 LTS, Debian 12 / 13
Yazılım Gereksinimleri
- Docker 24.0.6 veya daha yeni
- Docker Compose v2 (modern Docker kurulumlarıyla birlikte gelir)
Docker sürümünüzü kontrol edin:
docker --version
Beklenen çıktı: Docker version 24.0.6, build ed223bc
Docker Compose sürümünü kontrol edin:
docker compose version
Beklenen çıktı: Docker Compose version v5.1.0
Docker yüklü değilse, 1. Adımda yükleyeceksiniz.
Donanım Gereksinimleri
- Minimum 2 GB RAM
- En az 10 GB boş disk alanı
Ağ Gereksinimleri
- 3306 portu kullanılabilir (varsayılan MySQL/MariaDB portu)
- Yalnızca harici bağlantılar gerekiyorsa erişime izin verecek şekilde yapılandırılmış bir güvenlik duvarı
İzinler
sudoayrıcalıklarına sahip kök olmayan bir kullanıcı- Kullanıcı
dockergrubuna eklenmiş (önerilir)
Varsayılan Bilgi
- Temel Docker kavramları (imajlar, konteynerler, hacimler)
- Komut satırı işlemlerinde rahatlık
Adım 1: Docker'ı Yükleyin ve Doğrulayın
Docker yüklü değilse, yükleyin:
sudo apt update && sudo apt upgrade -y && sudo apt install curl
curl -sSL https://get.docker.com/ | CHANNEL=stable bash
sudo apt install docker-ce docker-compose-plugin -y
Docker'ı etkinleştirin ve başlatın:
sudo systemctl enable docker
sudo systemctl start docker
Docker'ın çalıştığını doğrulayın:
sudo systemctl status docker
Beklenen sonuç: Docker hizmet durumu aktif (çalışıyor) gösterir.
Docker kullanırken sudo kullanmaktan kaçınmak için kullanıcıyı docker grubuna ekleyin:
sudo usermod -aG docker <YOUR_USERNAME>
newgrp docker
Adım 2: Kalıcı Veri Dizini Oluşturun
Bir bağlama montajı, ana sistemden bir dizini doğrudan bir konteynere eşler ve bu dizini konteynerin dosya sisteminde erişilebilir hale getirir.
Veritabanı verileri için bir dizin oluşturun ve uygun izinleri ayarlayın:
mkdir -p ~/mysql-docker/data
chmod 750 ~/mysql-docker/data
Bu dizin, konteynerin dışındaki veritabanı dosyalarını depolayacaktır.
Kalıcı depolama olmadan, konteyner kaldırıldığında tüm veritabanı verileri kaybolur.
Adım 3: Docker Compose Yapılandırması Oluşturun
Proje dizininize gidin:
cd ~/mysql-docker
Bir docker-compose.yml dosyası oluşturun:
nano docker-compose.yml
Aşağıdaki yapılandırmayı ekleyin (MySQL örneği):
services: mysql: image: mysql:8.0.36 container_name: mysql-server restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: <YOUR_STRONG_ROOT_PASSWORD> MYSQL_DATABASE: appdb MYSQL_USER: appuser MYSQL_PASSWORD: <YOUR_STRONG_USER_PASSWORD> ports: - "3306:3306" volumes: - ./data:/var/lib/mysql
MariaDB alternatifi — MariaDB tercih ediyorsanız, kullanın:
services: mariadb: image: mariadb:11.3 container_name: mariadb-server restart: unless-stopped environment: MARIADB_ROOT_PASSWORD: <YOUR_STRONG_ROOT_PASSWORD> MARIADB_DATABASE: appdb MARIADB_USER: appuser MARIADB_PASSWORD: <YOUR_STRONG_USER_PASSWORD> ports: - "3306:3306" volumes: - ./data:/var/lib/mysql
Önemli: Gerçek şifreleri sürüm kontrolünde asla sabit kodlamayın. Üretimde ortam değişkenlerini veya bir .env dosyasını kullanın. <YOUR_STRONG_USER_PASSWORD> ve <YOUR_STRONG_ROOT_PASSWORD> ile güvenli şifrelerinizi değiştirin.
Adım 4: Veritabanı Konteynerini Başlatın
Çalıştırın:
docker compose up -d
Beklenen çıktı:
- Docker imajı çeker (eğer daha önce indirilmemişse)
- Konteyner ayrık modda başlar
Konteyner durumunu doğrulayın:
docker ps
Beklenen çıktı:
CONTAINER ID IMAGE STATUS PORTS abc123def456 mysql:8.0.36 Up 10 seconds 0.0.0.0:3306->3306/tcp
Adım 5: Veritabanı İşlevselliğini Doğrulayın
Konteynere Bağlanın
MySQL konteyneri için çalıştırın:
docker exec -it mysql-server mysql -u root -p
MariaDB konteyneri için çalıştırın:
docker exec -it mariadb-server mysql -u root -p
Kök şifrenizi girin.
Beklenen sonuç: MySQL kabuk istemi görünür: mysql>
Veritabanlarını Kontrol Edin
SHOW DATABASES;
Görmeniz gerekenler:
- appdb
- information_schema
- mysql
- performance_schema
- sys
EXIT;
Veri Kalıcılığını Test Edin
Bir test tablosu oluşturun
docker exec -it mysql-server mysql -u root -p
MySQL kabuğunda aşağıdaki komutları girin:
USE appdb;
CREATE TABLE test_table (id INT PRIMARY KEY);
EXIT;
Konteyneri durdurun ve kaldırın
docker compose down
Konteyneri yeniden başlatın
docker compose up -d
Tablonun hala mevcut olduğunu doğrulayın
docker exec -it mysql-server mysql -u root -p
MySQL kabuğunda aşağıdaki komutları girin:
USE appdb;
SHOW TABLES;
Beklenen sonuç: test_table görünür. Bu, kalıcı depolamanın çalıştığını doğrular.
Adım 6: Dağıtımı Güvenli Hale Getirin
Harici Erişimi Kısıtlayın
Veritabanı erişimi yalnızca dahili olarak gerekiyorsa, docker-compose.yml dosyasındaki portları değiştirin:
ports: - "127.0.0.1:3306:3306"
Yeniden başlatın:
docker compose down
docker compose up -d
Önemli: Port 3306'yı kesinlikle gerekli olmadıkça herkese açık hale getirmekten kaçının.
Bir .env Dosyası Kullanın
.env oluşturun:
nano .env
Örnek:
MYSQL_ROOT_PASSWORD=<YOUR_STRONG_ROOT_PASSWORD> MYSQL_PASSWORD=<YOUR_STRONG_USER_PASSWORD>
docker-compose.yml dosyasında referans verin:
environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_PASSWORD: ${MYSQL_PASSWORD}
Doğrulama
Her şeyin doğru çalıştığını şu şekilde doğrulayabilirsiniz:
docker psçalıştırarak — konteyner Çalışıyor- MySQL CLI ile bağlanarak — giriş başarılı
- Konteyneri yeniden başlatarak — veriler kalıcı
- Günlükleri kontrol ederek:
docker logs mysql-server
Beklenen günlük girdileri: "bağlantılar için hazır".
Değişiklikleri Geri Alma
Konteyneri durdurmak ve kaldırmak için:
docker compose down
Kalıcı verileri kaldırmak için:
Önemli: Bu, tüm veritabanı verilerini kalıcı olarak siler.
rm -rf ~/mysql-docker/data
Docker'ı kaldırmak için:
sudo apt remove docker-ce docker-compose-plugin -y
Sorun Giderme
Konteyner Başlatılamıyor
Günlükleri kontrol edin:
docker logs mysql-server
Yaygın nedenler:
- Zayıf şifre reddedildi
- Port 3306 zaten kullanılıyor
Port kullanımını kontrol edin:
sudo ss -tulnp | grep 3306
İzin Hataları
Eğer izin reddedildi hataları görüyorsanız:
sudo chown -R 999:999 ~/mysql-docker/data
999 genellikle MySQL konteyner kullanıcı kimliğidir.
Sonuç ve Sonraki Adımlar
MySQL veya MariaDB'yi Docker'da kalıcı depolama ile başarıyla dağıttınız. Veritabanı artık izole bir konteynerde çalışırken verileri ana sistemde güvenli bir şekilde depoluyor.
Sonraki adımlar:
- Otomatik yedeklemeleri yapılandırın
- Yüksek kullanılabilirlik için replikasyon uygulayın
- Uygulama konteynerleriyle entegre edin
- Prometheus ve Grafana ile izleme ekleyin