Konu Başlıkları Gizle
Merhaba, bugünkü rehberimde Docker içinde nasıl PostgreSQL databaseleri oluşturulur onu anlatacağım.
Öncelikle neden böyle bir maceraya giririp, databaselerimizi (ya da programlarımızı) PostgreSQL içinde kullanmamızı daha sağlıklı olacağına değinmek istiyorum.
Docker'ın ortaya çıkışı ve her yere girmesi insanların sanal makinelerden sıkılmasıyla başladı, sanal makinelerden sıkılma sebebimiz ise sanal makinelerin ağır olmalarıydı.
Native sistemler üzerine genel olarak ya database kurulmaz ya da o sistem sadece o amaçla kullanılır çünkü sistemde yaşanabilecek herhangi bir arıza noktasının orayı da etkilemesi, sistemde çalışacak başka bir programın vereceği bir hatayla bütün sistemi uçurması gibi durumlar, sizin de takdir edeceğiniz gibi can sıkıcıdır ve bunun gibi sebeplerden ötürü insanlar sanallaştırmaya ilgi duymaya başladı.
İlk yapmaya başladığımız sanallaştırma çözümleri, bir program (ya da işletim sistemi) ile donanımımızı ve istediğimiz işletim sistemini sanallaştırmasını sağlayarak, o programın (bazı durumlarda işletim sisteminin) içindeki sistemimizin, iç sistemdeki bağımlılıklardan etkilenmeden çalışmasıydı. Takdir edersiniz ki güzel bir çözüm ve her yerde hala karşımıza çıkıyor.
Sorun şu ki işletim sistemleri ağırdır, büyüktür ve bir program için (ne kadar yalıtım o kadar iyi) koskocaman bir işletim sistemini çalıştırmaya gerek olmamalı.
Bunlara karşı ise bize gelen çözümün adı ise Docker. Docker, Docker imajları dediğimiz, mümkün olduğunca hedef program tarafından kullanılmayacak eklerin çıkartıldığı ya da imajımızı kendimiz oluşturuyorsak bütün bağımlılıkları kendimizin kontrol edebildiği imajlar oluşturmamızı sağlayan bir sistemdir. Bu imaj üzerinde çalışırken değişiklik yapamazsınız fakat gerçeleştirdiğiniz işlemler sizin belirttiğiniz sistem bölümüne ya da default konum olan (en azından Linux sistemlerde)
Docker kurulumu için en iyi kaynak Docker'ın resmi kaynağıdır, Ubuntu ve CentOS üzerine kurulum için ileriki zamanlarda güzel bir rehber hazırlayacağım
docs.docker.com
Bunun yanında yazının devamında kullanacağımız Docker Compose adlı aracı kurmanız tavsiyemdir
docs.docker.com
Bunun için sade bir script kullanacağım. Öncelikle uyarmadan edemiyorum, üretim için uygun bir kod değil bu. Örnek amaçlıdır. İçindeki dataları .env dosyalarında barındırmanız ya da başka şekillerde girilmelerini sağlamak daha güvenilir olacaktır.
Küçük bir uyarı daha olarak bana güvenerek iş yapmayın, junior bile değilim
Öncelikle bir .yml dosyası oluşturuyoruz.
[CODE lang="yaml" title="docker-compose.yml"]services:
db:
image: postgres
volumes:
- db-data:/var/lib/postgresql/data
environment:
- POSTGRES_DB=kargo-db
- POSTGRES_USER=root
- POSTGRES_PASSWORD=password
ports:
- "5432:5432"
restart: always
volumes:
db-data:
[/CODE]
Şimdi her satırı teker teker açıklıyorum
db -> image: yolunda belirttiğimiz postgres yazısı, Docker'ın kendi DBsi içinden PostgreSQL imajını indirmemize yarıyor.
db -> volumes: -> db-data: yolunda belirttiğimiz konum database datasının docker volümünde nerede olacağı, bizde yine üstte bahsettiğim volumes içine gelecek eğer
db -> enviroment: bu yol bizim enviroment değişkenlerimizi belirtiyor, konteynerımız içindeki PATH'de bunlar bulunacak ve oluşturulacak DB bu datalara göre oluşturulacak.
db -> ports: portları dışarı açmamıza yarıyor, sanki ana makinede açmışsınız gibi (buradaki portlara göre) localhost:5432 yolundan erişebilmenize yarıyor.
restart: DB çökerse tekrar otomatik başlatmasına yarıyor, isterseniz değiştirebilirsiniz dokümantasyona göre.
volume -> db-data: burası db: altında yaptığımız değişikliklerden sonra, Docker'a konumun orası olarak kullanılacağına dair, üstteki düzenlediğimiz arkadaşımızı işaret ediyor.
Bu dosyayı, kullandığınız shell üzerinden
Okuduğunuz için teşekkür ederim, sorularınızı bekliyorum
Öncelikle neden böyle bir maceraya giririp, databaselerimizi (ya da programlarımızı) PostgreSQL içinde kullanmamızı daha sağlıklı olacağına değinmek istiyorum.
Neden Docker?
Docker'ın ortaya çıkışı ve her yere girmesi insanların sanal makinelerden sıkılmasıyla başladı, sanal makinelerden sıkılma sebebimiz ise sanal makinelerin ağır olmalarıydı.
Native sistemler üzerine genel olarak ya database kurulmaz ya da o sistem sadece o amaçla kullanılır çünkü sistemde yaşanabilecek herhangi bir arıza noktasının orayı da etkilemesi, sistemde çalışacak başka bir programın vereceği bir hatayla bütün sistemi uçurması gibi durumlar, sizin de takdir edeceğiniz gibi can sıkıcıdır ve bunun gibi sebeplerden ötürü insanlar sanallaştırmaya ilgi duymaya başladı.
İlk yapmaya başladığımız sanallaştırma çözümleri, bir program (ya da işletim sistemi) ile donanımımızı ve istediğimiz işletim sistemini sanallaştırmasını sağlayarak, o programın (bazı durumlarda işletim sisteminin) içindeki sistemimizin, iç sistemdeki bağımlılıklardan etkilenmeden çalışmasıydı. Takdir edersiniz ki güzel bir çözüm ve her yerde hala karşımıza çıkıyor.
Sorun şu ki işletim sistemleri ağırdır, büyüktür ve bir program için (ne kadar yalıtım o kadar iyi) koskocaman bir işletim sistemini çalıştırmaya gerek olmamalı.
Bunlara karşı ise bize gelen çözümün adı ise Docker. Docker, Docker imajları dediğimiz, mümkün olduğunca hedef program tarafından kullanılmayacak eklerin çıkartıldığı ya da imajımızı kendimiz oluşturuyorsak bütün bağımlılıkları kendimizin kontrol edebildiği imajlar oluşturmamızı sağlayan bir sistemdir. Bu imaj üzerinde çalışırken değişiklik yapamazsınız fakat gerçeleştirdiğiniz işlemler sizin belirttiğiniz sistem bölümüne ya da default konum olan (en azından Linux sistemlerde)
/var/lib/docker/volumes/"konteyner-adı" konumuna kaydedilir.Nasıl Kurulur?
Docker kurulumu için en iyi kaynak Docker'ın resmi kaynağıdır, Ubuntu ve CentOS üzerine kurulum için ileriki zamanlarda güzel bir rehber hazırlayacağım
Install Docker Engine
Learn how to choose the best method for you to install Docker Engine. This client-server application is available on Linux, Mac, Windows, and as a static binary.
Bunun yanında yazının devamında kullanacağımız Docker Compose adlı aracı kurmanız tavsiyemdir
Overview of installing Docker Compose
Learn how to install Docker Compose. Compose is available natively on Docker Desktop, as a Docker Engine plugin, and as a standalone tool.
Nasıl PostgreSQL Kurulur?
Bunun için sade bir script kullanacağım. Öncelikle uyarmadan edemiyorum, üretim için uygun bir kod değil bu. Örnek amaçlıdır. İçindeki dataları .env dosyalarında barındırmanız ya da başka şekillerde girilmelerini sağlamak daha güvenilir olacaktır.
Küçük bir uyarı daha olarak bana güvenerek iş yapmayın, junior bile değilim
Öncelikle bir .yml dosyası oluşturuyoruz.
[CODE lang="yaml" title="docker-compose.yml"]services:
db:
image: postgres
volumes:
- db-data:/var/lib/postgresql/data
environment:
- POSTGRES_DB=kargo-db
- POSTGRES_USER=root
- POSTGRES_PASSWORD=password
ports:
- "5432:5432"
restart: always
volumes:
db-data:
[/CODE]
Şimdi her satırı teker teker açıklıyorum
db -> image: yolunda belirttiğimiz postgres yazısı, Docker'ın kendi DBsi içinden PostgreSQL imajını indirmemize yarıyor.
db -> volumes: -> db-data: yolunda belirttiğimiz konum database datasının docker volümünde nerede olacağı, bizde yine üstte bahsettiğim volumes içine gelecek eğer
/istenilen/konum:/var/lib/postgresql/data şeklinde yol belirtmezseniz.db -> enviroment: bu yol bizim enviroment değişkenlerimizi belirtiyor, konteynerımız içindeki PATH'de bunlar bulunacak ve oluşturulacak DB bu datalara göre oluşturulacak.
db -> ports: portları dışarı açmamıza yarıyor, sanki ana makinede açmışsınız gibi (buradaki portlara göre) localhost:5432 yolundan erişebilmenize yarıyor.
restart: DB çökerse tekrar otomatik başlatmasına yarıyor, isterseniz değiştirebilirsiniz dokümantasyona göre.
volume -> db-data: burası db: altında yaptığımız değişikliklerden sonra, Docker'a konumun orası olarak kullanılacağına dair, üstteki düzenlediğimiz arkadaşımızı işaret ediyor.
Bu dosyayı, kullandığınız shell üzerinden
docker-compose -f /dosya/konumu/docker-compose.yml up -d ile çalıştırdıktan sonra oluşturulan konteynerınızı istediğiniz şekilde kullanabilirsiniz.Okuduğunuz için teşekkür ederim, sorularınızı bekliyorum