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ızPOSTGRES_PASSWORD
değişkeni superuser parolasıdır. EğerPOSTGRES_USER
değişkenini kullanmazsanız varsayılan superuser olanpostgres
‘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ğerdocker run
komutunu çalıştırırkenPOSTGRES_USER
ortam değişkeniyle bir kullanıcı adı belirlemediyseniz varsayılan kullanıcı olanpostgres
‘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: