Konuyu Açan
#1
SQL Docker ile Veritabanı Kurulumu
Giriş
Docker ile veritabanı kurmak, geliştirme ve üretim süreçlerinde çevresel tutarlılık sağlar. Büyük çoğunlukla kullanılan iki ana yaklaşım vardır: resmi imajlar üzerinden hızlı kurulum ve özel konfigürasyonlar için Dockerfile/compose ile adım adım yapılandırma. Bu yazıda, en yaygın veritabanı türlerinden biri olan PostgreSQL üzerinden örneklerle ilerleyeceğim; gerektiğinde MySQL/MariaDB için de temel farkları not edeceğim.
Adım adım kurulumun temel akışı
Uygulamalı ipuçları ve sık karşılaşılan durumlar
Kapanış
Docker üzerinde SQL veritabanı kurulumu, tekrarlanabilir ve izole bir ortam sağlar; doğru konfigürasyon ile geliştirme, test ve üretim arasındaki farkı azaltır. Kendi proje ihtiyaçlarınız için hangi veritabanını, hangi güvenlik tedbirleriyle ve hangi yedekleme stratejisiyle kullanacağınıza dair deneyimlerinizi paylaşır mısınız?
Bu yazı, Docker kullanarak SQL tabanlı veritabanlarını baştan kurmayı, temel konfigürasyonları ve yaygın hataları adım adım ele alır. Amacım, bağımlı sistemleri izole eden, tekrarlanabilir bir ortam içinde güvenilir bir veritabanı oluşturmayı pratik ve uygulanabilir biçimde anlatmaktır.
Giriş
Docker ile veritabanı kurmak, geliştirme ve üretim süreçlerinde çevresel tutarlılık sağlar. Büyük çoğunlukla kullanılan iki ana yaklaşım vardır: resmi imajlar üzerinden hızlı kurulum ve özel konfigürasyonlar için Dockerfile/compose ile adım adım yapılandırma. Bu yazıda, en yaygın veritabanı türlerinden biri olan PostgreSQL üzerinden örneklerle ilerleyeceğim; gerektiğinde MySQL/MariaDB için de temel farkları not edeceğim.
Adım adım kurulumun temel akışı
- Docker kurulu bir ana makineye ihtiyacınız var. Linux, macOS veya Windows üzerinde Docker Desktop ile başlatabilirsiniz. Bağımlılıkları minimal tutmak için sadece ihtiyaç duyduğunuz portları, volumeleri ve çevresel değişkenleri kullanın.
- Veritabanını konfigüre etmek için docker-compose kullanımı en temiz yoldur. Örnek temel bir yapı şu şekilde:
KOD1234567891011121314151617181920
version: '3.8' services: postgres: image: postgres:15 environment: POSTGRES_USER: myuser POSTGRES_PASSWORD: mypassword POSTGRES_DB: mydb volumes: [list] [*]pgdata:/var/lib/postgresql/data [/list] ports: [list] [*]"5432:5432" [/list] volumes: pgdata:
Bu yapı, bir kullanıcı, bir veritabanı ve kalıcı veri için bir volume oluşturur. Çevresel değişkenler güvenlik açısından production’da güvenli bir şekilde yönetilmelidir. - Güvenlik ve yedekleme konuları: varsayılan ağ ayarlarını kapatıp sadece gerekli portları açın. Veritabanı dosyalarını tutmak için docker volume kullanımı üstündür; gerektiğinde dump alarak günlük yedeklemeler planlayın. Örneğin PostgreSQL için pg_dump ile yedek almak veya Continuous Backup süreçleri kurmak yaygındır.
- Kullanıcı ve yetkilendirme yönetimi: DATABASE_URL benzeri bağlantı stringlerini uygulamalarınıza güvenli biçimde iletmek için gizli yöneticiler ( secrets ) veya çevresel değişkenleri güvenli bir şekilde yönetin. Geliştirme sırasında basit kullanıcılar ile çalışın, üretimde ise least privilege prensibini uygulayın.
- Bağlantı ve sürüm uyumu: Uygulamanızın bağlanacağı sürüm ile imaj sürümünün uyumlu olduğundan emin olun. Özellikle veritabanı sürümü yükseltmeleri sırasında başlık bilgilerini kontrol edin ve schema migrasyonlarını planlayın.
- Güncellemeler ve bakımlar: Docker imajlarını düzenli olarak güncelleyin. Eski sürümlerdeki güvenlik açıklarını kapamak için image taglerini sabitleyin ve minimum değişiklikle yükseltme stratejisi geliştirin.
Uygulamalı ipuçları ve sık karşılaşılan durumlar
- Veriyi kalıcılı kılmak için volume kullanmak güvenlidir; ancak konteynerin öldüğünde verinin kaybolmaması için volume doğrulayın. Lokal geliştirme için bind mount da işe yarar.
- PostgreSQL için pgpass veya .pgpass dosyası ile otomatik bağlanmayı kolaylaştırabilirsiniz; ancak güvenlik nedeniyle bu dosyayı erişilemez kılın.
- Bağlantı sorunlarında network isolasyonu kontrol edin: aynı docker-compose içinde servisler arası iletişim için servis adlarını kullanın ve 5432 gibi standart portları dışa açmadan test edin.
- Performans amacıyla yerel geliştirmede HBA konfigürasyonlarını inceleyin; PostgreSQL için pg_hba.conf üzerinden bağlantı türlerini gerektiğinde daraltın.
Kapanış
Docker üzerinde SQL veritabanı kurulumu, tekrarlanabilir ve izole bir ortam sağlar; doğru konfigürasyon ile geliştirme, test ve üretim arasındaki farkı azaltır. Kendi proje ihtiyaçlarınız için hangi veritabanını, hangi güvenlik tedbirleriyle ve hangi yedekleme stratejisiyle kullanacağınıza dair deneyimlerinizi paylaşır mısınız?
