21 Nisan 2020 Salı

Docker üzerinde Postgresql çalıştırma ve yedekleme işlemi

Merhaba,
bu yazımda sizlere docker üzerinde postgresql'i ayağa kaldırmayı ve docker üzerinde çalışan DB'in verilerini kendi bilgisayarınıza kaydetmeyi paylaşacağım.

ilk olarak official postgres image'ını dockerhub tan çekip postgres1 adında bir container oluşturacağız.  postgres1'i container olarak çalıştırıp üzerinde çeşitli değişiklikler yaptıktan sonra container'a ait volume dosyalarını alıp  container'ı sileceğiz.

Daha sonra yeniden postgres image'ından postgres2 adında bir container oluşturacağız. 2. container'ı oluştururken  bir önceki container dan aldığımız volume dosyasını kullanacağız. Bu sayede eski kayıtların yeni container da başarılı bir şekilde erişilebilir olduğunu göreceğiz.

Aşağıdaki işlemleri terminal üzerinde yaparak adımları ve sonuçlarını gözlemleyebilirsiniz.

Docker hub üzerinden postgres image'ını çekerek postgres1 adında bir container oluşturun.
$ docker run -d -p 5432:5432 -v postgres-data:/var/lib/postgresql/data  --name postgres1 postgres 

  -v: parametresi ile oluturacağınız volume dosyasının adını ve adresini belirtin

postgres1'in loglarına bakarak container'ın son durumu hakkında bilgiler edinebilirsiniz
$ docker logs postgres1 

oluşturduğunuz container'ı çalıştırın
$ docker exec -it postgres1 sh 

-it : interactive terminal(çalıştırdığınız container'ın içinde sh komutlarını çalıştırmak için)

mydb adında bir veri tabanı oluşturun
 $ createdb -U postgres mydb

Bir postgres CLI(Command Line Interface) aracı olan psql ile oluşturduğunuz veritabanına bağlanın
 $ psql -U postgres mydb

bağlantı işleminden sonra list database anlamındaki \l komutunu çalıştırın
$ \l 

Veritabanı versiyonunu görmek için aşağıdaki komutu çalıştırabilirsiniz
 $ select version();

mydb içerisinde id ve name sütunları olan people adında bir tablo oluşturun
$ CREATE TABLE people (id int, name varchar(80));

Oluşturduğunuz tabloya name:mark ve id:1 olacak şekilde bir kayıt girin(insert).
$ INSERT INTO people (id,name) VALUES (1, 'Mark'); 

Aşağıdaki select cümlesini çalıştırarak insert ettiğiniz kaydı görebilirsiniz.
$ SELECT * FROM people; 

\q  komutunu çalıştırarak psql tool'undan çıkış yapın
$ \q 

exit komutuyla container dan da çıkış yapın
$ exit 

container'ı restart edin
$ docker stop postgres1 

$ docker start postgres1 

container'ı kapatıp tekrar ayağa kaldırdığımızda veriler kaybolmayacaktır.

volume inspect komutunu çalıştırarak oluşturduğunuz volume dosyasının bilgilerine erişilebilirsiniz
$ docker volume inspect postgres-data 

çıktı:
[
    {
        "CreatedAt": "2020-02-07T16:03:34+03:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/postgres-data/_data",
        "Name": "postgres-data",
        "Options": null,
        "Scope": "local"
    }


Docker'ı host ettiğiniz(kişisel bilgisayarınız) makinenin terminalinden _data dizininin içeriğine ls komutuyla bakabilirsiniz
$ ls /var/lib/docker/volumes/postgres-data/_data/

Bilgisayarınızda oluşturduğunuz postgres1 adlı container'ı silin
$ docker rm -f postgres1 

bu durumda veriler kişisel bilgisayarınızda kalacaktır. Herhangi bir veri kaybı olmayacaktır.

Elinizde bulunan volume verisini attach ederek postgres2 adında bir container oluşturun.
$ docker run -d -p 5432:5432 -v postgres-data:/var/lib/postgresql/data --name postgres2 postgres 

oluşturduğunuz postgres2 adlı container'ı çalıştırıp ssh üzerinden bağlanın
 $ docker exec -it postgres2 sh

psql aracı ile tekrar veritabanına bağlanın
 $ psql -U postgres mydb

Aşağıdaki select sorgusunu çalıştırdığınızda Herhangi bir veri kaybı olmadığını görebilirsiniz.
 $ SELECT * FROM people;


kaynak:https://markheath.net/post/exploring-postgresql-with-docker


Hiç yorum yok:

Yorum Gönderme