{"id":278,"date":"2026-08-07T12:00:00","date_gmt":"2026-08-07T12:00:00","guid":{"rendered":"https:\/\/konteynerium.com\/?p=217"},"modified":"2026-10-06T11:34:00","modified_gmt":"2026-10-06T11:34:00","slug":"docker-registry-docker-hub-imaj-paylasimi-nasil-calisir","status":"publish","type":"post","link":"https:\/\/konteynerium.com\/index.php\/2026\/08\/07\/docker-registry-docker-hub-imaj-paylasimi-nasil-calisir\/","title":{"rendered":"Docker Registry ve Docker Hub: \u0130maj Payla\u015f\u0131m\u0131 Nas\u0131l \u00c7al\u0131\u015f\u0131r?"},"content":{"rendered":"<p>Bir Docker imaj\u0131 build ettikten sonra onu ba\u015fka bir makinede (bir sunucuda, bir meslekta\u015f\u0131n\u0131z\u0131n bilgisayar\u0131nda, bir CI\/CD sisteminde) kullanmak istedi\u011finizde, imaj\u0131 bir yerden bir yere elle ta\u015f\u0131mak yerine bir <strong>registry<\/strong>&#8216;e g\u00f6nderip oradan \u00e7ekersiniz. Docker Hub bu i\u015fin en yayg\u0131n kullan\u0131lan halka a\u00e7\u0131k registry&#8217;sidir, ama kurumsal projelerde genellikle private (\u00f6zel) bir registry de devreye girer.<\/p>\n<h2>Registry nedir?<\/h2>\n<p>Registry, Docker imajlar\u0131n\u0131 depolayan ve da\u011f\u0131tan bir sunucudur \u2014 imajlar i\u00e7in bir GitHub gibi d\u00fc\u015f\u00fcnebilirsiniz. Her imaj bir veya birden fazla <strong>etiketle<\/strong> (tag) tan\u0131mlan\u0131r ve <code>registry\/repo:etiket<\/code> format\u0131nda adreslenir:<\/p>\n<pre><code>docker.io\/library\/nginx:1.27      # Docker Hub'daki resmi nginx imaj\u0131\nghcr.io\/kullanici-adi\/api:2.4     # GitHub Container Registry'deki \u00f6zel imaj\ndocker.io\/kullanici-adi\/api:latest  # Kendi Docker Hub hesab\u0131n\u0131zdaki imaj<\/code><\/pre>\n<p>Registry ad\u0131 belirtilmezse Docker varsay\u0131lan olarak Docker Hub&#8217;\u0131 (<code>docker.io<\/code>) kullan\u0131r \u2014 <code>docker pull nginx<\/code> demek, asl\u0131nda <code>docker.io\/library\/nginx:latest<\/code> demektir.<\/p>\n<h2>Docker Hub&#8217;a giri\u015f yapmak ve imaj g\u00f6ndermek (push)<\/h2>\n<pre><code># Docker Hub hesab\u0131n\u0131zla giri\u015f yap\u0131n\ndocker login\n\n# Yerel imaj\u0131n\u0131z\u0131, Docker Hub kullan\u0131c\u0131 ad\u0131n\u0131zla e\u015fle\u015fecek\n# \u015fekilde yeniden etiketleyin\ndocker tag benim-api:1.0 kullanici-adi\/benim-api:1.0\n\n# Registry'e g\u00f6nderin\ndocker push kullanici-adi\/benim-api:1.0<\/code><\/pre>\n<p>Kritik nokta: bir imaj\u0131 push etmeden \u00f6nce, imaj ad\u0131n\u0131n registry kullan\u0131c\u0131 ad\u0131n\u0131zla ba\u015flamas\u0131 gerekir. <code>docker tag<\/code> yeni bir imaj kopyalamaz \u2014 ayn\u0131 imaja ikinci bir isim\/etiket ekler, disk alan\u0131 ekstra kullanmaz.<\/p>\n<h2>Bir imaj\u0131 \u00e7ekmek (pull)<\/h2>\n<pre><code>docker pull kullanici-adi\/benim-api:1.0\ndocker run -d kullanici-adi\/benim-api:1.0<\/code><\/pre>\n<div class=\"callout\">\n  <span class=\"glyph\">\u2713<\/span><\/p>\n<p>Etiketleri anlaml\u0131 kullan\u0131n: <code>:latest<\/code> yerine <code>:1.0<\/code>, <code>:2024-06-01<\/code> veya bir Git commit hash&#8217;i gibi sabit, izlenebilir etiketler tercih edin. B\u00f6ylece hangi s\u00fcr\u00fcm\u00fcn production&#8217;da \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 her zaman kesin olarak bilirsiniz.<\/p>\n<\/div>\n<h2>Neden private (\u00f6zel) bir registry?<\/h2>\n<p>Ticari projelerde imajlar\u0131n\u0131z\u0131 herkese a\u00e7\u0131k Docker Hub&#8217;a g\u00f6ndermek genellikle istenmez \u2014 kodunuz ve yap\u0131land\u0131rman\u0131z imaj\u0131n katmanlar\u0131nda gizlidir. Bu durumda se\u00e7enekleriniz:<\/p>\n<ul>\n<li><strong>Docker Hub private repo:<\/strong> Ayn\u0131 Docker Hub&#8217;da, sadece yetkili kullan\u0131c\u0131lar\u0131n eri\u015febildi\u011fi \u00f6zel depolar (\u00fccretli planlarda s\u0131n\u0131rs\u0131z).<\/li>\n<li><strong>GitHub Container Registry (ghcr.io):<\/strong> GitHub reponuzla entegre, CI\/CD&#8217;de (GitHub Actions) token ile otomatik giri\u015f yap\u0131labilen pop\u00fcler bir se\u00e7enek.<\/li>\n<li><strong>Bulut sa\u011flay\u0131c\u0131 registry&#8217;leri:<\/strong> AWS ECR, Google Artifact Registry, Azure Container Registry \u2014 genellikle o bulutun di\u011fer servisleriyle (Kubernetes, sunucusuz fonksiyonlar) do\u011frudan entegre \u00e7al\u0131\u015f\u0131r.<\/li>\n<li><strong>Kendi sunucunuzda self-hosted registry:<\/strong> Docker&#8217;\u0131n resmi <code>registry<\/code> imaj\u0131yla kendi private registry&#8217;nizi birka\u00e7 dakikada aya\u011fa kald\u0131rabilirsiniz.<\/li>\n<\/ul>\n<h2>Kendi registry&#8217;nizi \u00e7al\u0131\u015ft\u0131rmak<\/h2>\n<pre><code># Basit, self-hosted bir registry ba\u015flat\ndocker run -d -p 5000:5000 --name kayit-defteri registry:2\n\n# \u0130maj\u0131 bu \u00f6zel registry'ye push et\ndocker tag benim-api:1.0 localhost:5000\/benim-api:1.0\ndocker push localhost:5000\/benim-api:1.0\n\n# Ba\u015fka bir makineden \u00e7ekmek i\u00e7in host adresini kullan\ndocker pull sunucu-ip:5000\/benim-api:1.0<\/code><\/pre>\n<h2>GitHub Actions ile otomatik push \u00f6rne\u011fi<\/h2>\n<p>CI\/CD pipeline&#8217;\u0131n\u0131zda her <code>main<\/code> dal\u0131na yap\u0131lan push sonras\u0131 imaj\u0131 otomatik build edip registry&#8217;e g\u00f6ndermek \u00e7ok yayg\u0131n bir desendir:<\/p>\n<pre><code>- name: Docker Hub'a giri\u015f yap\n  run: echo \"${{ secrets.DOCKERHUB_TOKEN }}\" | docker login -u kullanici-adi --password-stdin\n\n- name: \u0130maj\u0131 build et ve g\u00f6nder\n  run: |\n    docker build -t kullanici-adi\/benim-api:${{ github.sha }} .\n    docker push kullanici-adi\/benim-api:${{ github.sha }}<\/code><\/pre>\n<p>Bu ak\u0131\u015f\u0131 bir sonraki, CI\/CD odakl\u0131 yaz\u0131m\u0131zda u\u00e7tan uca bir GitHub Actions pipeline&#8217;\u0131 \u00fczerinden daha detayl\u0131 inceliyoruz.<\/p>\n<p>\u0130majlar\u0131n\u0131z\u0131 art\u0131k build edip, kal\u0131c\u0131 veriyle \u00e7al\u0131\u015ft\u0131r\u0131p, birbirleriyle konu\u015fturup, bir registry \u00fczerinden payla\u015fabiliyorsunuz \u2014 Docker&#8217;\u0131n temel i\u015f ak\u0131\u015f\u0131n\u0131n tamam\u0131n\u0131 tamamlad\u0131n\u0131z. S\u0131radaki b\u00f6l\u00fcmde bu bilgileri ger\u00e7ek bir production ortam\u0131na, CI\/CD&#8217;den izlemeye kadar ta\u015f\u0131yoruz.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Docker Hub&#8217;a imaj push\/pull etmekten kendi private registry&#8217;nizi aya\u011fa kald\u0131rmaya, GitHub Container Registry gibi alternatiflere kadar imaj payla\u015f\u0131m\u0131n\u0131n t\u00fcm yollar\u0131n\u0131 inceliyoruz.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"seviye":[8],"class_list":["post-278","post","type-post","status-publish","format-standard","hentry","category-docker-derinlemesine","seviye-orta"],"_links":{"self":[{"href":"https:\/\/konteynerium.com\/index.php\/wp-json\/wp\/v2\/posts\/278","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/konteynerium.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/konteynerium.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/konteynerium.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/konteynerium.com\/index.php\/wp-json\/wp\/v2\/comments?post=278"}],"version-history":[{"count":1,"href":"https:\/\/konteynerium.com\/index.php\/wp-json\/wp\/v2\/posts\/278\/revisions"}],"predecessor-version":[{"id":576,"href":"https:\/\/konteynerium.com\/index.php\/wp-json\/wp\/v2\/posts\/278\/revisions\/576"}],"wp:attachment":[{"href":"https:\/\/konteynerium.com\/index.php\/wp-json\/wp\/v2\/media?parent=278"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/konteynerium.com\/index.php\/wp-json\/wp\/v2\/categories?post=278"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/konteynerium.com\/index.php\/wp-json\/wp\/v2\/tags?post=278"},{"taxonomy":"seviye","embeddable":true,"href":"https:\/\/konteynerium.com\/index.php\/wp-json\/wp\/v2\/seviye?post=278"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}