Docker Compose ve Veri Hacimleri
Docker Compose, birden fazla konteyneri tek bir yapılandırma dosyası ile tanımlayıp yönetmeye olanak tanıyan bir araçtır. Çeşitli uygulama bileşenlerini içeren mikro hizmet mimarileri için kullanılır ve konteynerlerin yapılandırmasının merkezi bir yerden yönetilmesini sağlar. Docker Compose dosyaları genellikle `docker-compose.yml` uzantısı ile adlandırılır. Bu dosyada, hizmetler, ağlar ve veri hacimleri tanımlanır. Veri hacimleri, veri kalıcılığı sağlamak için kullanılır ve bu sayede uygulamanın yeniden başlatılması veya yeniden oluşturulması durumunda veriler kaybolmaz.
Veri Hacimleri Nedir?
Docker’da veri hacimleri, konteynerlerin veri depolama gereksinimlerini karşılamak için kullanılan özel dizinlerdir. Konteynerler silindiğinde veya yeniden oluşturulduğunda, veri hacimleri bu verilerin kaybolmasını önlemek için ayrı bir yerde saklanır. Docker volumeleri; veri paylaşımına, verilerin yönetilmesine ve konteynerler arasında veri bütünlüğünün korunmasına yardımcı olur. Ayrıca performans açısından, yerel dosya sistemine göre daha verimli bir yapı sunar.
Docker Compose’da Veri Hacimlerinin Tanımlanması
Docker Compose dosyasında veri hacimleri tanımlamak için, `volumes` anahtar kelimesi kullanılır. Veri hacimleri genellikle her bir hizmet altında tanımlanır. Örneğin, bir web uygulaması için veri hacmi tanımlanabilir ve bu hacim, uygulamanın veritabanı gibi bileşenleri arasında veri paylaşmak için kullanılabilir.
Aşağıda basit bir `docker-compose.yml` dosyası örneği verilmiştir:
“`yaml
version: ‘3.8’
services:
web:
image: nginx
volumes:
– web_data:/usr/share/nginx/html
db:
image: postgres
volumes:
– db_data:/var/lib/postgresql/data
volumes:
web_data:
db_data:
“`
Bu örnekte, iki ayrı hizmet tanımlanmıştır: `web` ve `db`. Her bir hizmetin altında, ilgili veri hacimleri tanımlanmış ve her biri belirli bir yola bağlanmıştır. `volumes` bölümünde hacimler adıyla belirtilmiş olup, hangi hizmetlerin bu hacimleri kullanacağı gösterilmiştir.
Volume Şeması ve Yöntemleri
Docker, birkaç farklı veri hacmi oluşturma yöntemi sunmaktadır. Bunlar arasında, bağlama hacimleri, named volumes (isimlendirilmiş hacimler) ve `tmpfs` hacimleri yer almaktadır.
1. Bağlama Hacimleri: Bu yöntemde, yerel bir dizin belirtilerek, konteyner içindeki bir yol ile eşlenir. Bu, verilerin dışarıda depolanmasına olanak tanır. Örneğin:
“`yaml
volumes:
– ./local_data:/data
“`
2. İsimlendirilmiş Hacimler: Docker tarafından yönetilen özel hacimlerdir ve daha fazla taşınabilirlik sunarlar. Belirli bir isim verilir ve bu isim ile erişim sağlanır. Örneğin:
“`yaml
volumes:
– db_data:/var/lib/postgresql/data
“`
3. `tmpfs` Hacimleri: Bu hacimler, yerel dosya sisteminin bellek üzerinde kurulu olan bir parçasıdır ve geçici veri depolama için kullanılır. Örneğin:
“`yaml
volumes:
– type: tmpfs
target: /temp
“`
Docker Compose ile Hacimlerin Yönetimi
Docker Compose ile hacimleri yönetmek oldukça basittir. Belirtilen tüm hacimler, konteyner durdurulduğunda veya silindiğinde korunur. Hacimlerin listelendiği ve detaylarının görüldüğü komutlar mevcut olup, bunlar üzerinden hacimler kolaylıkla yönetilebilir.
Hacimlerin listelenmesi için:
“`
docker volume ls
“`
Bir hacmin detayları için:
“`
docker volume inspect [volume_name]
“`
Hacimlerin silinmesi ancak docker-compose ile tanımlı hizmetler silinmeden yapılmaz. Hacim silme işlemi ise bağlantılı olan hizmetlerin durdurulması ile başlatılabilir.
Performans ve Güvenlik
Docker volumeleri, konteynerler arası veri paylaşımının yanı sıra, veri güvenliğinin de sağlanmasına yardımcı olur. Verilerin depolandığı yerler, yeni bir konteyner oluşturulduğunda ya da mevcut bir konteyner silindiğinde veri kaybını engeller. Performans olarak, veri hacimleri, uygulamaların daha hızlı çalışmasını sağlamakta ve veri erişim sürelerini azaltmaktadır.
Uygulama Senaryoları
Veri hacimleri, birçok senaryoda kullanılabilir. Örneğin, bir veritabanı konteyneri için veri hacminin kullanılması, veri kaybı riskini azaltır. Benzer şekilde, bir web sunucusunun statik içeriklerini sunmak üzere kullanması, güncellenen içeriklerin kaybolmamasını sağlar. Ayrıca, geliştiriciler için çalışma ortamlarının sürekli olarak güncellenmesine olanak tanır.
Uygulamaların çalışma iş süreçlerinde veri hacimlerinin entegrasyonu, yazılım geliştirme, test etme ve dağıtım aşamalarında büyük fayda sağlar. Bu sayede, uygulamanın genel sürekli entegrasyon ve dağıtım süreçleri daha sağlam ve güvenilir hale gelir.