kamer.dev

Docker ile PostgreSQL Kurulumu

- #docker - #postgresql

Merhaba, bu yazıda Docker ile PostgreSQL container‘ı ayağa kaldırmayı ve kullanmayı anlatacağım. Yazı herhangi bir Docker bilgisi gerektirmemektedir. Yalnızca kulak aşinalığı yeterlidir. Komutları tek tek açıklayacağım.

Bilgisayarınızda Docker’ın kurulu olduğunu varsayıyorum. Eğer yüklü değilse bu bağlantıya giderek kurulum yapabilirsiniz.

1. Uygun bir image bulmak

Bu adım zorunlu değildir. Docker’ı giriş seviyesinde bilenler için ekstra bir adımdır.

Kullanmak istediğimiz image‘ı Docker Hub’dan arayacağız. Bunun için terminalden docker search postgresql şeklinde bir arama yapabiliriz. Bu arama aşağıdaki çıktıyı verecektir:

En üstte postgres adıyla yayınlanmış official olarak işaretlenmiş bir image göreceksiniz. Bu bizim işimizi görüyor.

Arama yapmak için diğer bir seçenek ise Docker Hub’dır. Bunun için https://hub.docker.com/ adresine giderek arama yapabilirsiniz.

2. Image’ı indirmek ve container oluşturmak

Bir önceki adımda kullanacağımız image‘ı bulduk. (postgres) Şimdi de image dosyasını indirip container oluşturacağız.

Bunun için docker pull postgres yazın ve indirmenin bitmesini bekleyin. İndirme bittikten sonra kontrol etmek isterseniz docker images veya docker image ls komutlarını kullanabilirsiniz.

Eğer image sorunsuz olarak indiyse aşağıdaki komut ile container oluşturabilirsiniz:

docker run --name <CONTAINER_ADI> -e POSTGRES_PASSWORD=<ROOT_PAROLASI> -d -p 5432:5432 -v <HOST'TA_HERHANGI_BIR_DIZIN>:/var/lib/postgresql/data  postgres

Komutu parça parça inceleyelim.

  • docker run: Herhangi bir image ismi verdiğinizde o image’ı kullanarak bir container oluşturur ve dilediğiniz komutları çalıştırır.
  • --name: Container adı vermek için kullanılır.
  • -e: Ortam değişkeni(environment variable) tanımlamak için kullanılır. Her image’ın kendine ait ortam değişkenleri olur. postgres’in diğer değişkenlerini görmek için bu bağlantıya gidebilirsiniz. Bizim kullandığımız POSTGRES_PASSWORD değişkeni superuser parolasıdır. Eğer POSTGRES_USER değişkenini kullanmazsanız varsayılan superuser olan postgres‘in parolasını belirlemiş olursunuz.
  • -d: Container‘ı arkaplanda oluşturur ve container ID’sini ekrana yazdırır. (--detach)
  • -p: Container portlarını açar. Burada postgres’in varsayılan portu olan 5432’yi 5432 portunda açtık. Böylece host olan sistemden erişebileceğiz.
  • -v: Container‘lar silindiğinde içindeki veriler de silinir. Volume kullanarak container içindeki bir dizini host olan bilgisayardaki bir dizin ile eşleştiriyoruz. Böylece container silindiğinde verileri kaybetmiyoruz. İlk kısım host’taki dizin, ikincisi ise container içinde eşleştirdiğimiz dizin.
  • postgres: bu da kullanılacak olan image adı.

Yukarıdaki taslağı kullanarak aşağıdaki gibi bir komut çalıştırıyorum:

docker run --name docker_postgres -e POSTGRES_PASSWORD=123456 -d -p 5432:5432 -v $HOME/docker/volumes/postgres:/var/lib/postgresql/data postgres

Komutu çalıştırdığımda -d yazdığım için ekrana yalnızca container id’sini yazacak. Container‘ın çalışıp çalışmadığını görmek için docker container ls veya docker ps yazabilirsiniz.

3. psql’e Erişmek

Çalışan container’ın psql terminaline erişmek için ise aşağıdaki komutu yazıyoruz:

docker exec -it <CONTAINER_ADI> psql -U <KULLANICI_ADI>

Bu komutu da parçalara bölelim:

  • docker exec: Çalışan bir container içinde komut çalıştırmak için kullanırız.
  • -it: t ile komut yazabileceğimiz bir terminal istediğimizi (tty), i ile de bu terminalin interaktif olmasını istediğimizi belirtiyoruz. (interactive)
  • psql -U: Bunun zaten docker ile bir ilgisi yok. Eğer docker run komutunu çalıştırırken POSTGRES_USER ortam değişkeniyle bir kullanıcı adı belirlemediyseniz varsayılan kullanıcı olan postgres‘i girmeniz gerekiyor.

Bundan sonraki aşamalar Docker’dan bağımsız olarak ilerliyor. Psql ile veritabanı oluşturup dilediğiniz client ile bağlanabilirsiniz. Bu yazıyı hazırlarken yalnızca Docker dokümanlarından faydalandım. Komutların referansları aşağıdadır: