{"id":22009,"date":"2020-03-03T07:23:09","date_gmt":"2020-03-03T07:23:09","guid":{"rendered":"http:\/\/dev.profelis.net\/?p=16102"},"modified":"2023-02-01T10:57:59","modified_gmt":"2023-02-01T07:57:59","slug":"docker-uzerinden-postgres-ve-pgadmin-kullanmak","status":"publish","type":"post","link":"https:\/\/profelis.com.tr\/en\/2020\/03\/03\/docker-uzerinden-postgres-ve-pgadmin-kullanmak\/","title":{"rendered":"Docker \u00dczerinden Postgres ve PgAdmin Kullanmak"},"content":{"rendered":"<p class=\"p1\"><span style=\"color: #000000;\">Bu yaz\u0131 dizisinde Docker\u2019dan ve Docker \u00fczerinde PostgreSQL kullan\u0131m\u0131ndan bahsedece\u011fim. PostgreSQL ve PgAdmin kurulumuyla ba\u015flayan yaz\u0131 dizisine ise persistent storage eklemek, network ayarlar\u0131n\u0131 d\u00fczenlemek ve postgres kurulumunu \u00f6zelle\u015ftirmek ba\u015fl\u0131klar\u0131n\u0131 da ekleyerek bu konudaki tecr\u00fcbelerimizi detayland\u0131rmay\u0131 planl\u0131yorum. <\/span><\/p>\n<p class=\"p1\"><span style=\"color: #000000;\">Docker, gerek bu yaz\u0131da bahsedece\u011fim PostgreSQL \u00f6zelinde olsun gerek Hub sayfas\u0131ndan sundu\u011fu say\u0131s\u0131z uygulama i\u00e7in olsun kullan\u0131c\u0131lara uygulamalar\u0131 kurmalar\u0131nda ac\u0131s\u0131z ve izole bir ortam sunuyor. Asl\u0131nda bir\u015feyi kurmak yerine Docker \u00fczerinde \u201c zaten kurulmu\u015fuyla\u201d \u00e7al\u0131\u015fabilirsiniz.<\/span><\/p>\n<p>&#8230; ve PostgreSQL kurulumu i\u00e7in harcayaca\u011f\u0131n\u0131z zaman\u0131n belki onda biri kadar bir zamanda Docker \u00fczerinde \u00e7al\u0131\u015fan bir PostgreSQL cluster\u0131nda \u00e7al\u0131\u015fmaya ba\u015flayabilirsiniz.<\/p>\n<p class=\"p1\"><span style=\"color: #000000;\">Tabi ki Docker ortam\u0131n\u0131 ne i\u00e7in tercih edece\u011finizle ilgili farkl\u0131 sebepleriniz olabilir. Ancak hangi sebeple bu yolu tercih ederseniz edin, Docker \u00fczerinde h\u0131zl\u0131ca \u00e7al\u0131\u015fmaya ba\u015flayabilece\u011finiz konusunda emin olabilirsiniz. <\/span><\/p>\n<p class=\"p1\"><span style=\"color: #000000;\">Bu yaz\u0131da Docker \u00fczerinde bir PostgreSQL cluster\u0131 ile hem psql hem de PgAdmin4 istemcisinin kullan\u0131m\u0131n\u0131 g\u00f6rece\u011fiz. Tabi PgAdmin4 kurulumu i\u00e7in de Docker imaj\u0131n\u0131 tercih edece\u011fiz ki bu yaz\u0131n\u0131n bir anlam\u0131 olsun. <\/span><\/p>\n<p class=\"p1\"><span style=\"color: #000000;\">\u00d6nce Docker kurulumu yapal\u0131m. Bunun i\u00e7in i\u015fletim sisteminde gerekli ba\u011f\u0131ml\u0131l\u0131klar\u0131n kurulumunu ve gerekli repolar\u0131n eklenmesini, sonras\u0131nda ise Docker\u2019\u0131n kurularak servislerinin ba\u015flat\u0131lmas\u0131 yapmam\u0131z gerekiyor. Ben Centos 7 kurulu bilgisayar\u0131m \u00fczerinde bu \u00e7al\u0131\u015fmaya ba\u015flad\u0131\u011f\u0131m\u0131 da not olarak belirtmek isterim.<\/span><\/p>\n<pre style=\"padding-left: 40px;\"><span style=\"color: #000000;\">[hillshade@localhost ~]$ sudo yum install -y yum-utils<\/span>\n<span style=\"color: #000000;\">device-mapper-persistent-data lvm2<\/span><\/pre>\n<pre style=\"padding-left: 40px;\"><span style=\"color: #000000;\">[hillshade@localhost ~]$ sudo yum-config-manager --add-repo<\/span>\n<span style=\"color: #000000;\">https:\/\/download.docker.com\/linux\/centos\/docker-ce.repo<\/span><\/pre>\n<pre style=\"padding-left: 40px;\"><span style=\"color: #000000;\">[hillshade@localhost ~]$ sudo yum install docker<\/span>\n<span style=\"color: #000000;\">[hillshade@localhost ~]$ sudo systemctl start docker<\/span>\n<span style=\"color: #000000;\">[hillshade@localhost ~]$ sudo systemctl enable docker<\/span><\/pre>\n<p class=\"p1\"><span style=\"color: #000000;\">Art\u0131k Docker ve PostgreSQL kullanmaya ba\u015flayabiliriz. \u0130htiyac\u0131m\u0131z olan docker imajlar\u0131n\u0131 indirebilece\u011fimiz g\u00fcvenli liman\u0131 hub.docker.com adresinde buluyoruz. Sayfada PostgreSQL veritaban\u0131m\u0131z\u0131 arat\u0131p buluyoruz.<\/span><\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\"alignnone size-full wp-image-22324\" src=\"https:\/\/profelis.com.tr\/wp-content\/uploads\/2020\/03\/docker-hub-1.jpg\" alt=\"Docker Hub 3\" width=\"400\" height=\"291\" title=\"\" srcset=\"https:\/\/profelis.com.tr\/wp-content\/uploads\/2020\/03\/docker-hub-1.jpg 400w, https:\/\/profelis.com.tr\/wp-content\/uploads\/2020\/03\/docker-hub-1-300x218.jpg 300w\" sizes=\"(max-width: 400px) 100vw, 400px\" \/><\/p>\n<p class=\"p1\"><span style=\"color: #000000;\">PostgreSQL imaj\u0131m\u0131z\u0131n bulundu\u011fu sayfaya gidiyoruz. Docker kullanmaya yeni ba\u015flarken ve olabildi\u011fince varsay\u0131lan komutlar\u0131 test ederken resmi imajlar \u00fczerinden ilerlemekte fayda var. Bu y\u00fczden <i>Docker Verified Publisher <\/i>ya da <i>Official Images <\/i>se\u00e7eneklerini se\u00e7erek ilerlemek bize \u00e7e\u015fitli testlerden ge\u00e7irilmi\u015f \u00e7al\u0131\u015fan bir Docker imaj\u0131 garantisi de vermekte.<\/span><\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-22323\" src=\"https:\/\/profelis.com.tr\/wp-content\/uploads\/2020\/03\/dockerhub2-1.jpg\" alt=\"Docker Hub 2\" width=\"800\" height=\"256\" title=\"\" srcset=\"https:\/\/profelis.com.tr\/wp-content\/uploads\/2020\/03\/dockerhub2-1.jpg 800w, https:\/\/profelis.com.tr\/wp-content\/uploads\/2020\/03\/dockerhub2-1-300x96.jpg 300w, https:\/\/profelis.com.tr\/wp-content\/uploads\/2020\/03\/dockerhub2-1-768x246.jpg 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/p>\n<p class=\"p1\"><span style=\"color: #000000;\">\u015eimdilik PostgreSQL versiyonuna \u00e7ok tak\u0131lmadan \u201clatest\u201d etiketiyle gelen postgres imaj\u0131n\u0131 y\u00fckleyebilmek i\u00e7in sa\u011fda g\u00f6r\u00fcnen kodu terminalde \u00e7al\u0131\u015ft\u0131rabiliriz. \u201cLatest\u201d ne derseniz, yay\u0131mc\u0131n\u0131n Docker Hub\u2019\u0131na att\u0131\u011f\u0131 en (g\u00fcncel de\u011fil) son imaj\u0131n etiketi ve e\u011fer biz imaj \u00e7ekerken bir : koyarak bir etiket vermezsek varsay\u0131lan etiket olarak :latest gelmekte. E\u011fer ba\u015fka bir PostgreSQL s\u00fcr\u00fcm\u00fcne ihtiya\u00e7 duyuyorsak <i>View Available Tags <\/i>linki \u00fczerinden ba\u015fka hangi imajlar oldu\u011funu da ara\u015ft\u0131rabilir ve kurabilir ya da imaj ismi olan postgres\u2019in sonuna, \u00f6rne\u011fin <b>:11 <\/b>gibi bir s\u00fcr\u00fcm numaras\u0131 ekleyerek 11 s\u00fcr\u00fcm\u00fcn\u00fc indirebiliriz. <\/span><\/p>\n<p class=\"p1\"><span style=\"color: #000000;\">Art\u0131k h\u0131zl\u0131ca postgres\u2019imizi kurup \u00e7al\u0131\u015fmaya ba\u015flayal\u0131m.<\/span><\/p>\n<pre style=\"padding-left: 40px;\"><span style=\"color: #000000;\">[hillshade@localhost ~]$ sudo docker pull postgres<\/span><\/pre>\n<pre style=\"padding-left: 40px;\"><span style=\"color: #000000;\">[hillshade@localhost ~]$ sudo docker run --name pg12 -e<\/span>\n<span style=\"color: #000000;\">POSTGRES_PASSWORD=pg1234 -d postgres<\/span><\/pre>\n<pre style=\"padding-left: 40px;\"><span style=\"color: #000000;\">[hillshade@localhost ~]$ sudo docker exec -it pg12 bash<\/span><\/pre>\n<pre style=\"padding-left: 40px;\"><span style=\"color: #000000;\">root@b943f3780e42:\/# su - postgres<\/span><\/pre>\n<p class=\"p1\"><span style=\"color: #000000;\">Postgresql kuruldu ve \u00e7al\u0131\u015fmaya ba\u015flad\u0131. Bunun i\u00e7in yapt\u0131\u011f\u0131m\u0131z i\u015flemler Postgres imaj\u0131n\u0131 Hub\u2019dan \u00e7ekmek (<b>docker pull<\/b>), bu imaj\u0131 kullanarak bir PostgreSQL konteynerini \u00e7al\u0131\u015ft\u0131rmak (<b>docker run<\/b>) ve bu konteynerin i\u00e7ine girerek Postgres\u2019i kullanmaya ba\u015flamaktan (<b>docker exec<\/b>) ibaret. Hatta ilk komut (<b>docker pull<\/b>), asl\u0131nda ikinci komut (<b>docker run<\/b>) taraf\u0131ndan kapsand\u0131\u011f\u0131 i\u00e7in (yani Docker bir imaj\u0131 lokalimizde arad\u0131\u011f\u0131nda bulamazsa \u00f6nce Hub\u2019a ba\u011flanarak \u00e7ekece\u011fi ve sonra onu \u00e7al\u0131\u015ft\u0131rmaya ba\u015flayaca\u011f\u0131 i\u00e7in) do\u011frudan ikinci komuttan da ba\u015flayabilirdik. Ayr\u0131ca ikinci komutla bir Postgres konteynerini aya\u011fa kald\u0131r\u0131rken postgres makinas\u0131na isim atayabilir, veri kayd\u0131nda kullanmas\u0131 amac\u0131yla diskimizde bir klas\u00f6r\u00fc verebiliriz.<\/span><\/p>\n<p class=\"p1\"><span style=\"color: #000000;\">Bunlara ek olarak docker run i\u00e7inde kulland\u0131\u011f\u0131m\u0131z -e ifadesi run ile ko\u015fturmaya ba\u015flad\u0131\u011f\u0131m\u0131z imaja bir \u00e7evre de\u011fi\u015fkeni de atar. Yani burada yapt\u0131\u011f\u0131m\u0131z gibi \u00e7evresel bir de\u011fi\u015fken olan postgres kullan\u0131c\u0131s\u0131n\u0131n \u015fifresini veya cluster\u2019\u0131n kullanaca\u011f\u0131 veri dizinini tan\u0131mlayabiliriz.<\/span><\/p>\n<p class=\"p1\"><span style=\"color: #000000;\">Docker exec komutu ise \u00e7al\u0131\u015fan bir konteynerde i\u015fletmek \u00fczere bir komut g\u00f6ndermemize yar\u0131yor. Exec komutuna -it ekleyerek Docker\u2019dan bize bir Linux terminali a\u00e7mas\u0131n\u0131 (ve a\u00e7\u0131k tutmas\u0131n\u0131) istiyoruz ki bir komut g\u00f6nderebilelim. Ben burada basit\u00e7e <b>bash <\/b>komutunu g\u00f6nderdim ve konteynerin komut sat\u0131r\u0131na ge\u00e7tim. Zaten terminaldeki sat\u0131r\u0131n art\u0131k <b>b943f3780e42 <\/b>makinas\u0131 (ki bu benim <i>konteynerimin ID\u2019si<\/i>) \u00fczerindeki <b>root <\/b>kullan\u0131c\u0131s\u0131 olarak de\u011fi\u015fti\u011fi de dikkatimizden ka\u00e7mam\u0131\u015ft\u0131r.<\/span><\/p>\n<p class=\"p1\"><span style=\"color: #000000;\">Yukar\u0131daki en son sat\u0131rda ise Postgres makinas\u0131nda, \u201c<i>PostgreSQL \u00fczerinde \u00e7al\u0131\u015fmaya en yetkili<\/i>\u201d postgres kullan\u0131c\u0131s\u0131na ge\u00e7 komutunu vermi\u015f bulunuyoruz.<\/span><\/p>\n<p class=\"p1\"><span style=\"color: #000000;\">Hala postgres\u2019imizin nas\u0131l bu kadar h\u0131zl\u0131 bir \u015fekilde \u00e7al\u0131\u015fmaya ba\u015flad\u0131\u011f\u0131na inanmayanlar i\u00e7in k\u00fc\u00e7\u00fck testimizi yap\u0131yoruz.<\/span><\/p>\n<p>Bakal\u0131m minik Docker makinam\u0131zda hangi prosesler \u00e7al\u0131\u015f\u0131yormu\u015f, tan\u0131d\u0131k bir \u015feyler var m\u0131ym\u0131\u015f?<\/p>\n<pre style=\"padding-left: 40px;\"><span style=\"color: #000000;\">postgres@b943f3780e42:~$ ps -ef<\/span>\n<span style=\"color: #000000;\">UID PID PPID C STIME TTY TIME CMD<\/span>\n<span style=\"color: #000000;\">postgres 1 0 0 12:10 ? 00:00:00 postgres<\/span>\n<span style=\"color: #000000;\">postgres 53 1 0 12:10 ? 00:00:00 postgres: checkpointer<\/span>\n<span style=\"color: #000000;\">postgres 54 1 0 12:10 ? 00:00:00 postgres: background writer<\/span>\n<span style=\"color: #000000;\">postgres 55 1 0 12:10 ? 00:00:00 postgres: walwriter<\/span>\n<span style=\"color: #000000;\">postgres 56 1 0 12:10 ? 00:00:00 postgres: autovacuum launcher<\/span>\n<span style=\"color: #000000;\">postgres 57 1 0 12:10 ? 00:00:00 postgres: stats collector<\/span>\n<span style=\"color: #000000;\">postgres 58 1 0 12:10 ? 00:00:00 postgres: logical replication launcher<\/span>\n<span style=\"color: #000000;\">root 68 0 0 12:11 pts\/0 00:00:00 bash<\/span>\n<span style=\"color: #000000;\">root 132 68 0 12:34 pts\/0 00:00:00 su - postgres<\/span>\n<span style=\"color: #000000;\">postgres 133 132 0 12:34 pts\/0 00:00:00 -bash<\/span>\n<span style=\"color: #000000;\">postgres 147 133 0 12:34 pts\/0 00:00:00 ps -ef<\/span><\/pre>\n<p class=\"p1\"><span style=\"color: #000000;\">Bunlar Docker \u00fczerinde ko\u015fan Postgres makinam\u0131z\u0131n i\u00e7indeki prosesler. Farkettiysek postgresin <b>arkaplan prosesleri<\/b>. Sonraki ad\u0131mda art\u0131k psql istemcisini kullanarak veritaban\u0131nda yapmak istediklerimizi yapmaya her tu\u0308rlu\u0308 iznimiz var, \u00e7u\u0308nku\u0308 \u015fu anda postgres\u2019iz!<\/span><\/p>\n<pre style=\"padding-left: 40px;\"><span style=\"color: #000000;\">postgres@b943f3780e42:~$ psql<\/span>\n<span style=\"color: #000000;\">psql (12.2 (Debian 12.2-1.pgdg100+1))<\/span>\n<span style=\"color: #000000;\">Type \"help\" for help.<\/span>\n<span style=\"color: #000000;\">postgres=# create database otomobil;<\/span>\n<span style=\"color: #000000;\">CREATE DATABASE<\/span>\n<span style=\"color: #000000;\">postgres=# \\c otomobil<\/span>\n<span style=\"color: #000000;\">You are now connected to database \"otomobil\" as user \"postgres\".<\/span>\n<span style=\"color: #000000;\">otomobil=# create table marka (id serial, marka text);<\/span>\n<span style=\"color: #000000;\">CREATE TABLE<\/span>\n<span style=\"color: #000000;\">otomobil=# insert into marka (marka) values ('Audi'), ('BMW'), ('Citroen'), ('Ford'), ('Hyundai'), ('Renault'), ('Volvo');<\/span>\n<span style=\"color: #000000;\">INSERT 0 7<\/span>\n<span style=\"color: #000000;\">otomobil=# select * from marka;<\/span>\n<span style=\"color: #000000;\">id | marka<\/span>\n<span style=\"color: #000000;\">---|---------<\/span>\n<span style=\"color: #000000;\">1 | Audi<\/span>\n<span style=\"color: #000000;\">2 | BMW<\/span>\n<span style=\"color: #000000;\">3 | Citroen<\/span>\n<span style=\"color: #000000;\">4 | Ford<\/span>\n<span style=\"color: #000000;\">5 | Hyundai<\/span>\n<span style=\"color: #000000;\">6 | Renault<\/span>\n<span style=\"color: #000000;\">7 | Volvo<\/span>\n<span style=\"color: #000000;\">(7 rows)<\/span>\n<span style=\"color: #000000;\">otomobil=\\q<\/span>\n<span style=\"color: #000000;\">postgres@b943f3780e42:~$ logout<\/span>\n<span style=\"color: #000000;\">postgres@b943f3780e42:~$ exit<\/span>\n<span style=\"color: #000000;\">logout root@b943f3780e42:\/# exit<\/span>\n<span style=\"color: #000000;\">exit<\/span><\/pre>\n<p class=\"p1\"><span style=\"color: #000000;\">\u015eimdi de ikinci parmak \u015f\u0131klatmam\u0131z\u0131 ger\u00e7ekle\u015ftirelim ve Docker \u00fczerinde PgAdmin4 kurulumunu yapal\u0131m. Bu sefer de PgAdmin4 imaj\u0131n\u0131 bulmak i\u00e7in Hub\u2019a geri d\u00f6n\u00fcyorum.<\/span><\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-22322\" src=\"https:\/\/profelis.com.tr\/wp-content\/uploads\/2020\/03\/pgadmin4-1.jpg\" alt=\"Docker Hub\" width=\"800\" height=\"375\" title=\"\" srcset=\"https:\/\/profelis.com.tr\/wp-content\/uploads\/2020\/03\/pgadmin4-1.jpg 800w, https:\/\/profelis.com.tr\/wp-content\/uploads\/2020\/03\/pgadmin4-1-300x141.jpg 300w, https:\/\/profelis.com.tr\/wp-content\/uploads\/2020\/03\/pgadmin4-1-768x360.jpg 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/p>\n<p class=\"p1\"><span style=\"color: #000000;\">Bu kez resmi bir imaj olmad\u0131\u011f\u0131 i\u00e7in \u015fimdilik \u00e7ok indirilen imajlardan birisine y\u00f6neliyoruz. Ben ikinci s\u0131rada gelen imaj\u0131 tercih ettim. Bu imaja ait sayfada yeni ba\u015flayanlar i\u00e7in daha fazla y\u00f6nlendirme bulunmakta.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-22328\" src=\"https:\/\/profelis.com.tr\/wp-content\/uploads\/2020\/03\/pgadmin-1.jpg\" alt=\"Docker Pgamind Logo\" width=\"432\" height=\"129\" title=\"\" srcset=\"https:\/\/profelis.com.tr\/wp-content\/uploads\/2020\/03\/pgadmin-1.jpg 432w, https:\/\/profelis.com.tr\/wp-content\/uploads\/2020\/03\/pgadmin-1-300x90.jpg 300w\" sizes=\"(max-width: 432px) 100vw, 432px\" \/><\/p>\n<p class=\"p1\"><span style=\"color: #000000;\">Bu imaj\u0131 \u00e7ekmek i\u00e7in sayfada sa\u011fda yer alan komutu kullanabiliriz. Ancak bunun yerine sayfadaki y\u00f6nergeleri inceleyerek h\u0131zl\u0131ca a\u015fa\u011f\u0131daki <b>docker run <\/b>komutunu kullanmay\u0131 deneyelim.<\/span><\/p>\n<pre style=\"padding-left: 40px;\"><span style=\"color: #000000;\">[hillshade@localhost ~]$ docker run --name pgadmin4 -p 5050:5050 -d fenglc\/pgadmin4<\/span>\n<span style=\"color: #000000;\">Unable to find image 'fenglc\/pgadmin4:latest' locally<\/span>\n<span style=\"color: #000000;\">latest: Pulling from fenglc\/pgadmin4<\/span>\n<span style=\"color: #000000;\">f2b6b4884fc8: Pull complete<\/span>\n<span style=\"color: #000000;\">4fb899b4df21: Pull complete<\/span>\n<span style=\"color: #000000;\">74eaa8be7221: Pull complete<\/span>\n<span style=\"color: #000000;\">2d6e98fe4040: Pull complete<\/span>\n<span style=\"color: #000000;\">414666f7554d: Pull complete<\/span>\n<span style=\"color: #000000;\">135a494fed80: Pull complete<\/span>\n<span style=\"color: #000000;\">6ca3f38fdd4d: Pull complete<\/span>\n<span style=\"color: #000000;\">4de6fcaa1241: Pull complete<\/span>\n<span style=\"color: #000000;\">83869b6e8a68: Pull complete<\/span>\n<span style=\"color: #000000;\">017969f75f4b: Pull complete<\/span>\n<span style=\"color: #000000;\">9ea069bc6ed7: Pull complete<\/span>\n<span style=\"color: #000000;\">Digest:<\/span>\n<span style=\"color: #000000;\">sha256:0326d703c75a333758e8b974b0c6b40572417b1b12af5ff3b87406d59d786 63e<\/span>\n<span style=\"color: #000000;\">Status: Downloaded newer image for fenglc\/pgadmin4:latest ef7931a3d4b1e46b0c4df351cf7901276943b69340543dbcacac37066f8e7326<\/span><\/pre>\n<p class=\"p1\"><span style=\"color: #000000;\">Ve evet\u2026 Art\u0131k bir de \u00e7al\u0131\u015fan PgAdmin 4&#8217;\u00fcm\u00fcz var. \u00dcstelik demin bahsetti\u011fim gibi, az \u00f6nceki gibi lokalde bir imaj\u0131m\u0131z da yoktu. Do\u011frudan <b>docker run <\/b>komutunu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131zda \u00f6nce imaj\u0131 \u00e7ekti (<b>docker pull<\/b>), ard\u0131ndan da imaj\u0131 ko\u015fturdu (<b>docker run<\/b>).<\/span><\/p>\n<p class=\"p1\"><span style=\"color: #000000;\">Burada <b>docker run <\/b>komutuyla birlikte PgAdmin4 makinam\u0131za pgadmin4 ismini verdik ve -d ile bu Docker imaj\u0131n\u0131n <i>detached <\/i>modda, yani ayr\u0131k \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 istedi\u011fimizi belirttik. Ayr\u0131ca -p 5050:5050 gibi bir komut <span class=\"s1\">kulland\u0131k. Bu komut docker <\/span>makinas\u0131ndaki portu a\u00e7\u0131\u011fa \u00e7\u0131kartarak sunucu makinan\u0131n ilgili portuna ba\u011flar. Bunu ifade ederken -p veya &#8211;expose etiketlerine ili\u015ftirdi\u011fim ilk port birbirine ba\u011flamak istedi\u011fim sunucumun portunu, ikinci port ise Docker konteynerimin portunu g\u00f6steriyor. Bu sayede sunucu makinamdaki 5050 portuna gelen t\u00fcm istekler Docker makinamdaki 5050 portuna gelmi\u015f gibi \u00e7al\u0131\u015facak.<\/span><\/p>\n<p class=\"p1\"><span style=\"color: #000000;\">Art\u0131k docker\u2019\u0131 kurdu\u011fum makinada bir browser a\u00e7\u0131p PgAdmin\u2019e ula\u015fabilirim. Bunun i\u00e7in http:\/\/localhost:5050 adresine gitmem ve login olmam yeterli. Bu imajda pgadmin 4 giri\u015f \u015fifresi i\u00e7in varsay\u0131lan olarak a\u015fa\u011f\u0131daki giri\u015f bilgileri kullan\u0131lm\u0131\u015f. Bu sefer <b>-e <\/b>ile \u00e7evresel de\u011fi\u015fken vermeden do\u011frudan bunlar\u0131 kullanarak giri\u015f yapal\u0131m.<\/span><\/p>\n<p class=\"p1\"><span style=\"color: #000000;\"><b>Kullan\u0131c\u0131 ad\u0131: <\/b>pgadmin4@pgadmin.org \/ <b>Parola: <\/b>admin<\/span><\/p>\n<pre><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-22327\" src=\"https:\/\/profelis.com.tr\/wp-content\/uploads\/2020\/03\/login-1.jpg\" alt=\"Docker Pgadmin SS\" width=\"800\" height=\"461\" title=\"\" srcset=\"https:\/\/profelis.com.tr\/wp-content\/uploads\/2020\/03\/login-1.jpg 800w, https:\/\/profelis.com.tr\/wp-content\/uploads\/2020\/03\/login-1-300x173.jpg 300w, https:\/\/profelis.com.tr\/wp-content\/uploads\/2020\/03\/login-1-768x443.jpg 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/pre>\n<p class=\"p1\"><span style=\"color: #000000;\">Giri\u015f yapt\u0131\u011f\u0131m PgAdmin i\u00e7inde tabi bir sunucu yok ve di\u011fer Docker konteynerini burada g\u00f6rmek i\u00e7in <i>Add New Server <\/i>k\u0131sm\u0131ndan yeni bir sunucu ekliyorum.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-22321\" src=\"https:\/\/profelis.com.tr\/wp-content\/uploads\/2020\/03\/pgadmin1-1.jpg\" alt=\"Docker Pgamin SS\" width=\"800\" height=\"471\" title=\"\" srcset=\"https:\/\/profelis.com.tr\/wp-content\/uploads\/2020\/03\/pgadmin1-1.jpg 800w, https:\/\/profelis.com.tr\/wp-content\/uploads\/2020\/03\/pgadmin1-1-300x177.jpg 300w, https:\/\/profelis.com.tr\/wp-content\/uploads\/2020\/03\/pgadmin1-1-768x452.jpg 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/p>\n<p class=\"p1\"><span style=\"color: #000000;\">Sunucuya bir isim verip Connection sekmesine ge\u00e7iyorum ve a\u015fa\u011f\u0131daki bilgileri (PgAdmin\u2019in ba\u011flanaca\u011f\u0131 Postgres\u2019in host adresi, portu, kullan\u0131c\u0131 ad\u0131 ve \u015fifresi) vermem gerekti\u011fini \u00f6\u011freniyorum.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-22326\" src=\"https:\/\/profelis.com.tr\/wp-content\/uploads\/2020\/03\/login1-1.jpg\" alt=\"Docker Pgadmin Login\" width=\"800\" height=\"429\" title=\"\" srcset=\"https:\/\/profelis.com.tr\/wp-content\/uploads\/2020\/03\/login1-1.jpg 800w, https:\/\/profelis.com.tr\/wp-content\/uploads\/2020\/03\/login1-1-300x161.jpg 300w, https:\/\/profelis.com.tr\/wp-content\/uploads\/2020\/03\/login1-1-768x412.jpg 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/p>\n<p class=\"p1\"><span style=\"color: #000000;\">Burada host k\u0131sm\u0131 hari\u00e7 di\u011fer bilgiler asl\u0131nda imaj\u0131 indirdi\u011fimiz sayfada da yaz\u0131yor ancak h\u0131st adresi bilgisi i\u00e7in Docker\u2019da olu\u015fturdu\u011fumuz Postgres konteynerinin IP adresini \u00f6\u011frenmeliyiz. Bunu \u00f6\u011frenmek i\u00e7in konsolda <b>docker inspect pg12 <\/b>yaz\u0131p konteynerle ilgili bir\u00e7ok bilginin i\u00e7inden ihtiyac\u0131m olanlara bakabilir veya buna <b>docker inspect pg12 | grep IPAdress <\/b>\u015feklinde bir grep ekleyip zaten arad\u0131\u011f\u0131m IPAddress bilgisini s\u00fczebilirim.<\/span><\/p>\n<pre style=\"padding-left: 40px;\"><span style=\"color: #000000;\">[hillshade@localhost ~]$ docker inspect pg12 | grep IPAddress<\/span>\n<span style=\"color: #000000;\">\"SecondaryIPAddresses\": null,<\/span>\n<span style=\"color: #000000;\">\"IPAddress\": \"172.17.0.2\",<\/span>\n<span style=\"color: #000000;\">\"IPAddress\": \"172.17.0.2\",<\/span><\/pre>\n<p class=\"p1\"><span style=\"color: #000000;\">Sunucumu ekledi\u011fime g\u00f6re demin psql\u2019de olu\u015fturdu\u011fum veritaban\u0131 ve tabloyu a\u015fa\u011f\u0131daki gibi g\u00f6r\u00fcnt\u00fcleyebilirim. Burada verilerimi inceleyebilir ya da psql yerine i\u015flerime PgAdmin4 \u00fczerinden devam edebilirim.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-22325\" src=\"https:\/\/profelis.com.tr\/wp-content\/uploads\/2020\/03\/localhost-1.jpg\" alt=\"Docker PgAdmin Localhost\" width=\"800\" height=\"375\" title=\"\" srcset=\"https:\/\/profelis.com.tr\/wp-content\/uploads\/2020\/03\/localhost-1.jpg 800w, https:\/\/profelis.com.tr\/wp-content\/uploads\/2020\/03\/localhost-1-300x141.jpg 300w, https:\/\/profelis.com.tr\/wp-content\/uploads\/2020\/03\/localhost-1-768x360.jpg 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/p>\n<p class=\"p1\"><span style=\"color: #000000;\">Bir sonraki yaz\u0131da Docker \u00fczerinde \u00e7al\u0131\u015fan PostgreSQL\u2019in ve PgAdmin\u2019in kulland\u0131\u011f\u0131 disk alan\u0131 \u00fczerinde biraz daha kontrol elde etmeye \u00e7al\u0131\u015faca\u011f\u0131z. Sonraki yaz\u0131mda Docker Volume komutlar\u0131n\u0131 biraz daha detayl\u0131 bir \u015fekilde inceleyip cluster\u2019da saklanan verileri, \u00e7al\u0131\u015ft\u0131\u011f\u0131m\u0131z sunucu \u00fczerinden de ula\u015fabilmeyi test edece\u011fiz. <\/span><\/p>\n<p class=\"p1\"><span style=\"color: #000000;\">G\u00f6r\u00fc\u015fmek \u00fczere.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bu yaz\u0131 dizisinde Docker\u2019dan ve Docker \u00fczerinde PostgreSQL kullan\u0131m\u0131ndan bahsedece\u011fim. PostgreSQL ve PgAdmin kurulumuyla ba\u015flayan yaz\u0131 dizisine ise persistent storage eklemek, network ayarlar\u0131n\u0131 d\u00fczenlemek ve postgres kurulumunu \u00f6zelle\u015ftirmek ba\u015fl\u0131klar\u0131n\u0131 da ekleyerek bu konudaki tecr\u00fcbelerimizi detayland\u0131rmay\u0131 planl\u0131yorum. Docker, gerek bu yaz\u0131da&#8230;<\/p>","protected":false},"author":11,"featured_media":22104,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[76,75,45],"tags":[48,61,60],"class_list":["post-22009","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-linux","category-postgresql","category-yazi","tag-enterprisedb","tag-linux","tag-postgresql"],"_links":{"self":[{"href":"https:\/\/profelis.com.tr\/en\/wp-json\/wp\/v2\/posts\/22009","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/profelis.com.tr\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/profelis.com.tr\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/profelis.com.tr\/en\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/profelis.com.tr\/en\/wp-json\/wp\/v2\/comments?post=22009"}],"version-history":[{"count":0,"href":"https:\/\/profelis.com.tr\/en\/wp-json\/wp\/v2\/posts\/22009\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/profelis.com.tr\/en\/wp-json\/wp\/v2\/media\/22104"}],"wp:attachment":[{"href":"https:\/\/profelis.com.tr\/en\/wp-json\/wp\/v2\/media?parent=22009"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/profelis.com.tr\/en\/wp-json\/wp\/v2\/categories?post=22009"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/profelis.com.tr\/en\/wp-json\/wp\/v2\/tags?post=22009"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}