{"id":38564,"date":"2026-02-03T01:40:49","date_gmt":"2026-02-02T22:40:49","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=38564"},"modified":"2026-02-03T01:40:49","modified_gmt":"2026-02-02T22:40:49","slug":"ubuntu-14-04-uzerine-ozel-bir-docker-kayit-defteri-kurulumu","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/ubuntu-14-04-uzerine-ozel-bir-docker-kayit-defteri-kurulumu\/","title":{"rendered":"Ubuntu 14.04 \u00dczerine \u00d6zel Bir Docker Kay\u0131t Defteri Kurulumu"},"content":{"rendered":"<p><body><\/p>\n<h2>Ubuntu 14.04 \u00dczerine \u00d6zel Bir Docker Kay\u0131t Defteri Kurulumu<\/h2>\n<h3>Giri\u015f<\/h3>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn modern yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda, konteyner teknolojileri, \u00f6zellikle Docker, uygulamalar\u0131n da\u011f\u0131t\u0131m\u0131n\u0131, y\u00f6netimini ve \u00f6l\u00e7eklendirilmesini k\u00f6kten de\u011fi\u015ftirmi\u015ftir. Docker, uygulamalar\u0131 ba\u011f\u0131ml\u0131l\u0131klar\u0131 ile birlikte izole edilmi\u015f, ta\u015f\u0131nabilir birimler olan konteynerler i\u00e7inde paketleyerek &#8220;bir kez yaz, her yerde \u00e7al\u0131\u015ft\u0131r&#8221; ilkesini hayata ge\u00e7irir. Bu konteyner imajlar\u0131, Docker Hub gibi genel kay\u0131t defterlerinde depolanabilir ve payla\u015f\u0131labilir. Ancak, kurumsal veya hassas projelerde \u00e7al\u0131\u015f\u0131rken, imajlar\u0131n gizlili\u011fini, g\u00fcvenli\u011fini ve da\u011f\u0131t\u0131m h\u0131z\u0131n\u0131 kontrol etmek kritik bir ihtiya\u00e7 haline gelir. \u0130\u015fte bu noktada \u00f6zel bir Docker kay\u0131t defteri (private Docker registry) devreye girer.<\/p>\n<p>Bu makalede, pop\u00fcler bir sunucu i\u015fletim sistemi olan Ubuntu 14.04 \u00fczerine nas\u0131l \u00f6zel bir Docker kay\u0131t defteri kurulaca\u011f\u0131n\u0131 ad\u0131m ad\u0131m detayland\u0131raca\u011f\u0131z. Ubuntu 14.04, her ne kadar eski bir s\u00fcr\u00fcm olsa da, baz\u0131 kurumsal ortamlarda veya miras sistemlerde hala kullan\u0131lmaya devam edebilir. Bu nedenle, bu \u00f6zel s\u00fcr\u00fcm \u00fczerinde kurulumun inceliklerini anlamak, belirli senaryolar i\u00e7in b\u00fcy\u00fck \u00f6nem ta\u015f\u0131maktad\u0131r. Makalemiz, kay\u0131t defterinin temel kurulumundan, g\u00fcvenlik \u00f6nlemlerine (HTTPS\/TLS ve kimlik do\u011frulama) ve imaj y\u00f6netimine kadar geni\u015f bir yelpazeyi kapsayacakt\u0131r.<\/p>\n<h3>\u00d6n Gereksinimler<\/h3>\n<p>\u00d6zel bir Docker kay\u0131t defteri kurmaya ba\u015flamadan \u00f6nce, a\u015fa\u011f\u0131daki \u00f6n gereksinimlerin kar\u015f\u0131land\u0131\u011f\u0131ndan emin olman\u0131z \u00f6nemlidir:<\/p>\n<p>*   <strong>Ubuntu 14.04 Sunucusu:<\/strong> En az 2 GB RAM ve 20 GB disk alan\u0131na sahip, kararl\u0131 bir Ubuntu 14.04 sunucusu. SSH eri\u015fimi ve <code>sudo<\/code> yetkilerine sahip bir kullan\u0131c\u0131 hesab\u0131n\u0131z olmal\u0131d\u0131r.<br \/>\n*   <strong>Docker Y\u00fckl\u00fc Olmas\u0131:<\/strong> Sunucunuzda Docker Engine&#8217;in kurulu ve \u00e7al\u0131\u015f\u0131r durumda olmas\u0131 gerekmektedir. Ubuntu 14.04 i\u00e7in Docker kurulumu biraz farkl\u0131l\u0131k g\u00f6sterebilir. Genellikle <code>apt-get install docker.io<\/code> ile kurulur ve ard\u0131ndan <code>ln -sf \/usr\/bin\/docker.io \/usr\/local\/bin\/docker<\/code> komutu ile <code>docker<\/code> komutunun do\u011fru \u015fekilde \u00e7al\u0131\u015fmas\u0131 sa\u011flan\u0131r.<br \/>\n*   <strong>Temel Linux Bilgisi:<\/strong> Komut sat\u0131r\u0131 \u00fczerinde temel Linux komutlar\u0131n\u0131 kullanabilme yetene\u011fi.<br \/>\n*   <strong>A\u011f ve G\u00fcvenlik Duvar\u0131 Ayarlar\u0131:<\/strong> Kay\u0131t defterinizin d\u0131\u015far\u0131dan eri\u015filebilir olmas\u0131 i\u00e7in, sunucunuzun g\u00fcvenlik duvar\u0131nda (\u00f6rne\u011fin <code>ufw<\/code> veya <code>iptables<\/code>) kay\u0131t defterinin kullanaca\u011f\u0131 portun (varsay\u0131lan olarak 5000 veya HTTPS i\u00e7in 443) a\u00e7\u0131k olmas\u0131 gerekmektedir.<br \/>\n*   <strong>Alan Ad\u0131 veya IP Adresi:<\/strong> Kay\u0131t defterinize eri\u015fmek i\u00e7in bir alan ad\u0131 (\u00f6rne\u011fin <code>registry.example.com<\/code>) veya do\u011frudan sunucunun IP adresi gereklidir. \u00dcretim ortamlar\u0131 i\u00e7in alan ad\u0131 kullan\u0131lmas\u0131 ve bir DNS kayd\u0131n\u0131n olu\u015fturulmas\u0131 \u015fiddetle tavsiye edilir.<br \/>\n*   <strong>SSL Sertifikas\u0131 (\u00dcretim Ortam\u0131 \u0130\u00e7in):<\/strong> G\u00fcvenli bir kay\u0131t defteri i\u00e7in HTTPS kullan\u0131m\u0131 zorunludur. Bu, bir SSL sertifikas\u0131 gerektirir. \u00dcretim ortamlar\u0131 i\u00e7in g\u00fcvenilir bir Sertifika Yetkilisinden (CA) al\u0131nm\u0131\u015f bir sertifika (\u00f6rne\u011fin Let&#8217;s Encrypt, Comodo, DigiCert) veya kurumsal bir CA taraf\u0131ndan imzalanm\u0131\u015f bir sertifika kullan\u0131lmal\u0131d\u0131r. Geli\u015ftirme veya test ortamlar\u0131 i\u00e7in kendinden imzal\u0131 (self-signed) sertifikalar da kullan\u0131labilir.<\/p>\n<h3>Docker Kay\u0131t Defteri Mimarisi ve Bile\u015fenleri<\/h3>\n<p>Docker kay\u0131t defteri, Docker imajlar\u0131n\u0131 depolamak ve da\u011f\u0131tmak i\u00e7in tasarlanm\u0131\u015f bir sunucu taraf\u0131 uygulamas\u0131d\u0131r. Temel olarak, bir kay\u0131t defteri a\u015fa\u011f\u0131daki bile\u015fenlerden olu\u015fur:<\/p>\n<p>*   <strong>Registry V2 API:<\/strong> Docker kay\u0131t defterleri, Docker CLI (komut sat\u0131r\u0131 aray\u00fcz\u00fc) ile ileti\u015fim kurmak i\u00e7in belirli bir RESTful API kullan\u0131r. Bu API, imajlar\u0131n y\u00fcklenmesi (push), \u00e7ekilmesi (pull), etiketlenmesi ve meta verilerinin sorgulanmas\u0131 gibi i\u015flemleri y\u00f6netir.<br \/>\n*   <strong>Depolama Backend&#8217;i:<\/strong> \u0130maj verilerinin fiziksel olarak nerede saklanaca\u011f\u0131n\u0131 belirler. Varsay\u0131lan olarak, kay\u0131t defteri konteynerinin i\u00e7indeki bir dosya sistemini kullan\u0131r. Ancak, \u00fcretim ortamlar\u0131 i\u00e7in harici depolama \u00e7\u00f6z\u00fcmleri (\u00f6rne\u011fin Amazon S3, Azure Blob Storage, Google Cloud Storage, OpenStack Swift) kullanmak daha esnek ve \u00f6l\u00e7eklenebilir bir yakla\u015f\u0131m sunar. Bu makalede dosya sistemi tabanl\u0131 depolama \u00fczerine odaklanaca\u011f\u0131z.<br \/>\n*   <strong>Kimlik Do\u011frulama ve Yetkilendirme Mekanizmalar\u0131:<\/strong> Kay\u0131t defterine kimlerin eri\u015febilece\u011fini ve hangi i\u015flemleri yapabilece\u011fini kontrol eder. Temel kimlik do\u011frulama (basic auth) en yayg\u0131n kullan\u0131lan y\u00f6ntemlerden biridir, ancak daha geli\u015fmi\u015f token tabanl\u0131 kimlik do\u011frulama veya entegrasyonlar da m\u00fcmk\u00fcnd\u00fcr.<br \/>\n*   <strong>TLS\/SSL:<\/strong> \u0130stemci ile kay\u0131t defteri aras\u0131ndaki ileti\u015fimi \u015fifreleyerek veri g\u00fcvenli\u011fini sa\u011flar. \u00d6zellikle hassas imajlar depolan\u0131yorsa veya genel a\u011f \u00fczerinden eri\u015filiyorsa HTTPS kullan\u0131m\u0131 kritik \u00f6neme sahiptir.<\/p>\n<h3>Docker Kay\u0131t Defteri Kurulumu<\/h3>\n<p>\u015eimdi ad\u0131m ad\u0131m \u00f6zel Docker kay\u0131t defterimizi kurmaya ba\u015flayal\u0131m.<\/p>\n<h4>Docker&#8217;\u0131 Y\u00fckleme (E\u011fer Kurulu De\u011filse)<\/h4>\n<p>Ubuntu 14.04 \u00fczerinde Docker kurulumu, daha yeni s\u00fcr\u00fcmlerden biraz farkl\u0131d\u0131r.<\/p>\n<p>1.  <strong>Paket listesini g\u00fcncelleyin:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo apt-get update<\/code><\/pre>\n<p>2.  <strong>Docker.io paketini y\u00fckleyin:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo apt-get install docker.io -y<\/code><\/pre>\n<p>    Ubuntu 14.04&#8217;te <code>docker.io<\/code> paketi Docker Engine&#8217;i i\u00e7erir.<\/p>\n<p>3.  <strong>Docker komutu i\u00e7in sembolik ba\u011flant\u0131 olu\u015fturun:<\/strong><br \/>\n    <code>docker.io<\/code> y\u00fcklendikten sonra <code>docker<\/code> komutu do\u011frudan \u00e7al\u0131\u015fmayabilir. Sembolik bir ba\u011flant\u0131 olu\u015fturarak bu sorunu \u00e7\u00f6zebiliriz:<\/p>\n<pre><code class=\"language-bash\">sudo ln -sf \/usr\/bin\/docker.io \/usr\/local\/bin\/docker<\/code><\/pre>\n<p>4.  <strong>Docker servisini ba\u015flat\u0131n:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo service docker start<\/code><\/pre>\n<p>5.  <strong>Kurulumu do\u011frulay\u0131n:<\/strong><\/p>\n<pre><code class=\"language-bash\">docker --version<\/code><\/pre>\n<p>    \u00c7\u0131kt\u0131da Docker s\u00fcr\u00fcm\u00fcn\u00fc g\u00f6rmelisiniz. Ayr\u0131ca, <code>sudo<\/code> kullanmadan Docker komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in kullan\u0131c\u0131 hesab\u0131n\u0131z\u0131 <code>docker<\/code> grubuna ekleyebilirsiniz:<\/p>\n<pre><code class=\"language-bash\">sudo usermod -aG docker $USER\n    # De\u011fi\u015fikliklerin etkili olmas\u0131 i\u00e7in oturumu kapat\u0131p tekrar a\u00e7\u0131n veya a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n\n    # newgrp docker<\/code><\/pre>\n<h4>Kay\u0131t Defteri Konteynerini \u00c7al\u0131\u015ft\u0131rma<\/h4>\n<p>Docker kay\u0131t defteri, resmi bir Docker imaj\u0131 olarak mevcuttur. En basit haliyle, kay\u0131t defterini g\u00fcvenli olmayan bir HTTP ba\u011flant\u0131s\u0131 \u00fczerinden \u00e7al\u0131\u015ft\u0131rabiliriz. Ancak bu, \u00fcretim ortamlar\u0131 i\u00e7in kesinlikle \u00f6nerilmez.<\/p>\n<p>1.  <strong>G\u00fcvenli olmayan bir kay\u0131t defteri \u00e7al\u0131\u015ft\u0131rma (yaln\u0131zca test\/geli\u015ftirme i\u00e7in):<\/strong><\/p>\n<pre><code class=\"language-bash\">docker run -d -p 5000:5000 --restart=always --name registry registry:2<\/code><\/pre>\n<p>    *   <code>-d<\/code>: Konteyneri arka planda \u00e7al\u0131\u015ft\u0131r\u0131r.<br \/>\n    *   <code>-p 5000:5000<\/code>: Host makinenin 5000 numaral\u0131 portunu konteynerin 5000 numaral\u0131 portuna ba\u011flar.<br \/>\n    *   <code>--restart=always<\/code>: Sunucu yeniden ba\u015flat\u0131ld\u0131\u011f\u0131nda veya konteyner \u00e7\u00f6kt\u00fc\u011f\u00fcnde otomatik olarak yeniden ba\u015flamas\u0131n\u0131 sa\u011flar.<br \/>\n    *   <code>--name registry<\/code>: Konteynere &#8220;registry&#8221; ad\u0131n\u0131 verir.<br \/>\n    *   <code>registry:2<\/code>: Kullan\u0131lacak Docker imaj\u0131n\u0131n ad\u0131d\u0131r (Docker Registry V2).<\/p>\n<p>    Bu komutla kay\u0131t defteriniz <code>http:\/\/your_server_ip:5000<\/code> adresinden eri\u015filebilir olacakt\u0131r. Ancak, Docker istemcileri varsay\u0131lan olarak g\u00fcvenli (HTTPS) ba\u011flant\u0131lar bekler. G\u00fcvenli olmayan bir kay\u0131t defterine ba\u011flanmak i\u00e7in istemci taraf\u0131nda ek yap\u0131land\u0131rma yapman\u0131z gerekir:<\/p>\n<p>    *   <code>\/etc\/default\/docker<\/code> dosyas\u0131n\u0131 a\u00e7\u0131n (veya <code>\/etc\/docker\/daemon.json<\/code> e\u011fer varsa)<br \/>\n    *   <code>DOCKER_OPTS=\"--insecure-registry your_server_ip:5000\"<\/code> sat\u0131r\u0131n\u0131 ekleyin veya d\u00fczenleyin.<br \/>\n    *   <code>sudo service docker restart<\/code> ile Docker servisini yeniden ba\u015flat\u0131n.<\/p>\n<p>    Bu y\u00f6ntem, g\u00fcvenlik a\u00e7\u0131klar\u0131 nedeniyle \u00fcretimde kullan\u0131lmamal\u0131d\u0131r.<\/p>\n<h4>Depolama Alan\u0131 Yap\u0131land\u0131rmas\u0131<\/h4>\n<p>Varsay\u0131lan olarak, kay\u0131t defteri konteyneri imaj verilerini konteynerin kendi dosya sistemi i\u00e7inde <code>\/var\/lib\/registry<\/code> dizininde saklar. Konteyner silinirse, t\u00fcm imajlar\u0131n\u0131z kaybolur. Bu nedenle, verileri kal\u0131c\u0131 hale getirmek i\u00e7in bir bind mount kullanmak esast\u0131r.<\/p>\n<p>1.  <strong>Host makinede bir depolama dizini olu\u015fturun:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo mkdir -p \/opt\/registry-data<\/code><\/pre>\n<p>2.  <strong>Kay\u0131t defteri konteynerini kal\u0131c\u0131 depolama ile \u00e7al\u0131\u015ft\u0131r\u0131n:<\/strong><\/p>\n<pre><code class=\"language-bash\">docker run -d -p 5000:5000 --restart=always \\\n      -v \/opt\/registry-data:\/var\/lib\/registry \\\n      --name registry registry:2<\/code><\/pre>\n<p>    *   <code>-v \/opt\/registry-data:\/var\/lib\/registry<\/code>: Host makinedeki <code>\/opt\/registry-data<\/code> dizinini konteynerin <code>\/var\/lib\/registry<\/code> dizinine ba\u011flar. Bu, imaj verilerinin konteynerden ba\u011f\u0131ms\u0131z olarak host makinede kal\u0131c\u0131 olmas\u0131n\u0131 sa\u011flar.<\/p>\n<h3>G\u00fcvenlik ve Kimlik Do\u011frulama<\/h3>\n<p>\u00d6zel bir Docker kay\u0131t defteri kurman\u0131n ana nedenlerinden biri g\u00fcvenliktir. Bu nedenle, kay\u0131t defterinizi HTTPS ile g\u00fcvence alt\u0131na almak ve eri\u015fimi kimlik do\u011frulama ile k\u0131s\u0131tlamak zorunludur.<\/p>\n<h4>HTTPS\/TLS Yap\u0131land\u0131rmas\u0131<\/h4>\n<p>HTTPS, istemci ile kay\u0131t defteri aras\u0131ndaki ileti\u015fimi \u015fifreleyerek veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc ve gizlili\u011fini sa\u011flar.<\/p>\n<p>1.  <strong>SSL Sertifikas\u0131 Olu\u015fturma:<\/strong><br \/>\n    \u00dcretim ortamlar\u0131 i\u00e7in g\u00fcvenilir bir CA&#8217;dan sertifika almal\u0131s\u0131n\u0131z. Geli\u015ftirme veya test ortamlar\u0131 i\u00e7in kendinden imzal\u0131 bir sertifika olu\u015fturabiliriz.<\/p>\n<p>    *   <strong>Sertifika ve anahtar dosyalar\u0131n\u0131 saklamak i\u00e7in bir dizin olu\u015fturun:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo mkdir -p \/opt\/registry-certs\n        cd \/opt\/registry-certs<\/code><\/pre>\n<p>    *   <strong>Kendinden imzal\u0131 sertifika olu\u015fturma:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo openssl req -newkey rsa:4096 -nodes -sha256 -keyout domain.key -x509 -days 365 -out domain.crt<\/code><\/pre>\n<p>        Bu komut sizden baz\u0131 bilgiler isteyecektir. <strong>&#8220;Common Name (CN)&#8221; (Ortak \u0130sim)<\/strong> alan\u0131na kay\u0131t defterinize eri\u015fmek i\u00e7in kullanaca\u011f\u0131n\u0131z alan ad\u0131n\u0131 (\u00f6rne\u011fin <code>registry.example.com<\/code>) veya IP adresini do\u011fru bir \u015fekilde girmeniz \u00e7ok \u00f6nemlidir. Yanl\u0131\u015f girilmesi durumunda SSL do\u011frulamas\u0131 ba\u015far\u0131s\u0131z olacakt\u0131r.<\/p>\n<p>2.  <strong>Docker Daemon&#8217;u Sertifikay\u0131 Tan\u0131yacak \u015eekilde Yap\u0131land\u0131rma (\u0130stemci Taraf\u0131nda):<\/strong><br \/>\n    Kay\u0131t defterinize bir Docker istemcisi (\u00f6rne\u011fin geli\u015ftirici makinesi) \u00fczerinden eri\u015firken, Docker daemon&#8217;un kay\u0131t defterinizin sertifikas\u0131na g\u00fcvenmesi gerekir.<\/p>\n<p>    *   <strong>\u0130stemci makinesinde sertifika dizini olu\u015fturun:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo mkdir -p \/etc\/docker\/certs.d\/your_registry_domain_or_ip:5000<\/code><\/pre>\n<p>        <code>your_registry_domain_or_ip:5000<\/code> k\u0131sm\u0131n\u0131 kay\u0131t defterinizin ger\u00e7ek alan ad\u0131 ve portu ile de\u011fi\u015ftirin (\u00f6rne\u011fin <code>registry.example.com:5000<\/code>).<\/p>\n<p>    *   <strong>Olu\u015fturdu\u011funuz <code>domain.crt<\/code> dosyas\u0131n\u0131 bu dizine kopyalay\u0131n:<\/strong><\/p>\n<pre><code class=\"language-bash\"># Sunucudan istemciye kopyalamak i\u00e7in scp kullanabilirsiniz:\n        # scp user@registry_server_ip:\/opt\/registry-certs\/domain.crt \/tmp\/domain.crt\n        sudo cp \/tmp\/domain.crt \/etc\/docker\/certs.d\/your_registry_domain_or_ip:5000\/ca.crt<\/code><\/pre>\n<p>        Dosya ad\u0131n\u0131n <code>ca.crt<\/code> olmas\u0131 \u00f6nemlidir.<\/p>\n<p>    *   <strong>Docker servisini yeniden ba\u015flat\u0131n (\u0130stemci Taraf\u0131nda):<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo service docker restart<\/code><\/pre>\n<p>3.  <strong>Kay\u0131t Defteri Konteynerini TLS ile \u00c7al\u0131\u015ft\u0131rma:<\/strong><br \/>\n    \u015eimdi kay\u0131t defteri konteynerini SSL sertifikalar\u0131m\u0131zla birlikte \u00e7al\u0131\u015ft\u0131rabiliriz. Mevcut konteyneri durdurup silmeniz gerekecektir.<\/p>\n<pre><code class=\"language-bash\">docker stop registry\n    docker rm registry<\/code><\/pre>\n<p>    Ard\u0131ndan, yeni konteyneri ba\u015flat\u0131n:<\/p>\n<pre><code class=\"language-bash\">docker run -d -p 5000:5000 --restart=always \\\n      -v \/opt\/registry-data:\/var\/lib\/registry \\\n      -v \/opt\/registry-certs:\/certs \\\n      -e REGISTRY_HTTP_TLS_CERTIFICATE=\/certs\/domain.crt \\\n      -e REGISTRY_HTTP_TLS_KEY=\/certs\/domain.key \\\n      --name registry registry:2<\/code><\/pre>\n<p>    *   <code>-v \/opt\/registry-certs:\/certs<\/code>: Host makinedeki sertifika dizinimizi konteynerin <code>\/certs<\/code> dizinine ba\u011flar.<br \/>\n    *   <code>-e REGISTRY_HTTP_TLS_CERTIFICATE=\/certs\/domain.crt<\/code>: Kay\u0131t defterine sertifika dosyas\u0131n\u0131n yolunu bildirir.<br \/>\n    *   <code>-e REGISTRY_HTTP_TLS_KEY=\/certs\/domain.key<\/code>: Kay\u0131t defterine \u00f6zel anahtar dosyas\u0131n\u0131n yolunu bildirir.<\/p>\n<p>    Art\u0131k kay\u0131t defteriniz HTTPS \u00fczerinden <code>https:\/\/your_registry_domain_or_ip:5000<\/code> adresinden eri\u015filebilir olmal\u0131d\u0131r.<\/p>\n<h4>Temel Kimlik Do\u011frulama (Basic Authentication)<\/h4>\n<p>Kay\u0131t defterinize eri\u015fimi daha da k\u0131s\u0131tlamak i\u00e7in kullan\u0131c\u0131 ad\u0131 ve parola tabanl\u0131 kimlik do\u011frulama ekleyebiliriz. Docker Registry, Apache&#8217;nin <code>htpasswd<\/code> format\u0131ndaki parola dosyalar\u0131n\u0131 destekler.<\/p>\n<p>1.  <strong><code>apache2-utils<\/code> paketini y\u00fckleyin (htpasswd komutu i\u00e7in):<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo apt-get install apache2-utils -y<\/code><\/pre>\n<p>2.  <strong>Parola dosyas\u0131n\u0131 saklamak i\u00e7in bir dizin olu\u015fturun:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo mkdir -p \/opt\/registry-auth<\/code><\/pre>\n<p>3.  <strong>\u0130lk kullan\u0131c\u0131y\u0131 ve parolas\u0131n\u0131 olu\u015fturun:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo htpasswd -Bc \/opt\/registry-auth\/htpasswd user1<\/code><\/pre>\n<p>    *   <code>-B<\/code>: bcrypt \u015fifreleme algoritmas\u0131n\u0131 kullan\u0131r (daha g\u00fcvenli).<br \/>\n    *   <code>-c<\/code>: Yeni bir dosya olu\u015fturur. Yaln\u0131zca ilk kullan\u0131c\u0131 olu\u015fturulurken kullan\u0131l\u0131r. Sonraki kullan\u0131c\u0131lar i\u00e7in bu bayra\u011f\u0131 kullanmay\u0131n.<br \/>\n    *   <code>user1<\/code>: Kullan\u0131c\u0131 ad\u0131d\u0131r. Komutu \u00e7al\u0131\u015ft\u0131rd\u0131ktan sonra sizden bu kullan\u0131c\u0131 i\u00e7in bir parola girmenizi isteyecektir.<\/p>\n<p>4.  <strong>Ek kullan\u0131c\u0131lar ekleme (iste\u011fe ba\u011fl\u0131):<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo htpasswd -B \/opt\/registry-auth\/htpasswd user2<\/code><\/pre>\n<p>    <code>user2<\/code> i\u00e7in parola girmeniz istenecektir. <code>-c<\/code> bayra\u011f\u0131n\u0131 kullanmad\u0131\u011f\u0131m\u0131za dikkat edin, aksi takdirde mevcut dosyan\u0131n \u00fczerine yaz\u0131l\u0131r.<\/p>\n<p>5.  <strong>Kay\u0131t Defteri Konteynerini Kimlik Do\u011frulama ile \u00c7al\u0131\u015ft\u0131rma:<\/strong><br \/>\n    Mevcut konteyneri durdurup silin ve ard\u0131ndan kimlik do\u011frulama parametreleriyle yeniden ba\u015flat\u0131n.<\/p>\n<pre><code class=\"language-bash\">docker stop registry\n    docker rm registry<\/code><\/pre>\n<pre><code class=\"language-bash\">docker run -d -p 5000:5000 --restart=always \\\n      -v \/opt\/registry-data:\/var\/lib\/registry \\\n      -v \/opt\/registry-certs:\/certs \\\n      -v \/opt\/registry-auth:\/auth \\\n      -e REGISTRY_HTTP_TLS_CERTIFICATE=\/certs\/domain.crt \\\n      -e REGISTRY_HTTP_TLS_KEY=\/certs\/domain.key \\\n      -e REGISTRY_AUTH_HTPASSWD_REALM=\"Registry Realm\" \\\n      -e REGISTRY_AUTH_HTPASSWD_PATH=\/auth\/htpasswd \\\n      --name registry registry:2<\/code><\/pre>\n<p>    *   <code>-v \/opt\/registry-auth:\/auth<\/code>: Host makinedeki parola dosyam\u0131z\u0131n bulundu\u011fu dizini konteynerin <code>\/auth<\/code> dizinine ba\u011flar.<br \/>\n    *   <code>-e REGISTRY_AUTH_HTPASSWD_REALM=\"Registry Realm\"<\/code>: Kimlik do\u011frulama i\u00e7in kullan\u0131lacak alan\u0131 tan\u0131mlar.<br \/>\n    *   <code>-e REGISTRY_AUTH_HTPASSWD_PATH=\/auth\/htpasswd<\/code>: Kimlik do\u011frulama i\u00e7in kullan\u0131lacak parola dosyas\u0131n\u0131n yolunu belirtir.<\/p>\n<p>    Art\u0131k kay\u0131t defterinize eri\u015fmek i\u00e7in kimlik do\u011frulama yapman\u0131z gerekecek.<\/p>\n<h3>Kay\u0131t Defterini Kullanma<\/h3>\n<p>Kay\u0131t defterinizi kurduktan sonra, Docker imajlar\u0131n\u0131 depolamak ve \u00e7ekmek i\u00e7in kullanabilirsiniz.<\/p>\n<p>1.  <strong>Kay\u0131t Defterine Giri\u015f Yapma (\u0130stemci Taraf\u0131nda):<\/strong><br \/>\n    Bir Docker istemcisinden kay\u0131t defterinize giri\u015f yapman\u0131z gerekmektedir.<\/p>\n<pre><code class=\"language-bash\">docker login your_registry_domain_or_ip:5000<\/code><\/pre>\n<p>    <code>user1<\/code> veya <code>user2<\/code> gibi olu\u015fturdu\u011funuz bir kullan\u0131c\u0131 ad\u0131 ve parolas\u0131n\u0131 girmeniz istenecektir. Ba\u015far\u0131l\u0131 bir giri\u015f, kimlik do\u011frulama bilgilerini istemcinizin <code>~\/.docker\/config.json<\/code> dosyas\u0131na kaydeder.<\/p>\n<p>2.  <strong>\u0130maj\u0131 Etiketleme (Tagging an Image):<\/strong><br \/>\n    Mevcut bir Docker imaj\u0131n\u0131 \u00f6zel kay\u0131t defterinize y\u00fcklemek i\u00e7in, imaj\u0131 kay\u0131t defterinizin ad\u0131yla etiketlemeniz gerekir.<\/p>\n<pre><code class=\"language-bash\">docker tag myimage:latest your_registry_domain_or_ip:5000\/myimage:latest<\/code><\/pre>\n<p>    *   <code>myimage:latest<\/code>: Yerel Docker imaj\u0131n\u0131z\u0131n ad\u0131 ve etiketi.<br \/>\n    *   <code>your_registry_domain_or_ip:5000\/myimage:latest<\/code>: Kay\u0131t defterinizin tam adresi, imaj\u0131n ad\u0131 ve etiketi.<\/p>\n<p>3.  <strong>\u0130maj\u0131 Y\u00fckleme (Pushing an Image):<\/strong><br \/>\n    Etiketledi\u011finiz imaj\u0131 kay\u0131t defterinize y\u00fckleyin:<\/p>\n<pre><code class=\"language-bash\">docker push your_registry_domain_or_ip:5000\/myimage:latest<\/code><\/pre>\n<p>4.  <strong>\u0130maj\u0131 \u00c7ekme (Pulling an Image):<\/strong><br \/>\n    Kay\u0131t defterinizden bir imaj \u00e7ekmek i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">docker pull your_registry_domain_or_ip:5000\/myimage:latest<\/code><\/pre>\n<p>5.  <strong>\u0130maj\u0131 Silme (Deleting an Image):<\/strong><br \/>\n    Bir imaj\u0131 kay\u0131t defterinden silmek biraz daha karma\u015f\u0131kt\u0131r ve birka\u00e7 ad\u0131mdan olu\u015fur:<\/p>\n<p>    *   <strong>Kay\u0131t defteri yap\u0131land\u0131rmas\u0131n\u0131 d\u00fczenleme:<\/strong><br \/>\n        \u0130maj silme \u00f6zelli\u011finin etkinle\u015ftirilmesi i\u00e7in kay\u0131t defterinin yap\u0131land\u0131rma dosyas\u0131nda (varsay\u0131lan olarak konteyner i\u00e7inde <code>\/etc\/docker\/registry\/config.yml<\/code>) <code>delete<\/code> b\u00f6l\u00fcm\u00fcn\u00fcn etkinle\u015ftirilmesi gerekir. Bunu yapmak i\u00e7in, konteyneri \u00e7al\u0131\u015ft\u0131r\u0131rken bir yap\u0131land\u0131rma dosyas\u0131 ba\u011flayabilirsiniz.<\/p>\n<p>        \u00d6rnek bir <code>config.yml<\/code> dosyas\u0131:<\/p>\n<pre><code class=\"language-yaml\">version: 0.1\n        log:\n          fields:\n            service: registry\n        storage:\n          filesystem:\n            rootdirectory: \/var\/lib\/registry\n        http:\n          addr: :5000\n          headers:\n            X-Content-Type-Options: [nosniff]\n          tls:\n            certificate: \/certs\/domain.crt\n            key: \/certs\/domain.key\n        auth:\n          htpasswd:\n            realm: Registry Realm\n            path: \/auth\/htpasswd\n        # Delete \u00f6zelli\u011fini etkinle\u015ftir\n        delete:\n          enabled: true<\/code><\/pre>\n<p>        Bu dosyay\u0131 <code>\/opt\/registry-config\/config.yml<\/code> olarak kaydedin.<\/p>\n<p>        Konteyneri bu yap\u0131land\u0131rma dosyas\u0131yla \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-bash\">docker stop registry\n        docker rm registry\n        sudo mkdir -p \/opt\/registry-config\n\n        docker run -d -p 5000:5000 --restart=always \\\n          -v \/opt\/registry-data:\/var\/lib\/registry \\\n          -v \/opt\/registry-certs:\/certs \\\n          -v \/opt\/registry-auth:\/auth \\\n          -v \/opt\/registry-config\/config.yml:\/etc\/docker\/registry\/config.yml \\\n          --name registry registry:2<\/code><\/pre>\n<p>        Bu, <code>config.yml<\/code> dosyas\u0131n\u0131 konteynerin i\u00e7ine ba\u011flar ve kay\u0131t defterinin bu yap\u0131land\u0131rmay\u0131 kullanmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>    *   <strong>\u0130maj\u0131n manifestini silme:<\/strong><br \/>\n        \u00d6nce imaj\u0131n manifest digest&#8217;ini (SHA256) alman\u0131z gerekir:<\/p>\n<pre><code class=\"language-bash\">curl -v -H \"Authorization: Basic $(echo -n 'user1:password' | base64)\" \\\n        -H \"Accept: application\/vnd.docker.distribution.manifest.v2+json\" \\\n        -X GET https:\/\/your_registry_domain_or_ip:5000\/v2\/myimage\/manifests\/latest \\\n        --insecure # E\u011fer kendinden imzal\u0131 sertifika kullan\u0131yorsan\u0131z<\/code><\/pre>\n<p>        \u00c7\u0131kt\u0131daki <code>Docker-Content-Digest<\/code> ba\u015fl\u0131\u011f\u0131n\u0131 not al\u0131n.<\/p>\n<p>        Ard\u0131ndan, bu digest&#8217;i kullanarak manifesti silin:<\/p>\n<pre><code class=\"language-bash\">curl -v -H \"Authorization: Basic $(echo -n 'user1:password' | base64)\" \\\n        -X DELETE https:\/\/your_registry_domain_or_ip:5000\/v2\/myimage\/manifests\/<DIGEST> \\\n        --insecure # E\u011fer kendinden imzal\u0131 sertifika kullan\u0131yorsan\u0131z<\/code><\/pre>\n<p>        <code><DIGEST><\/code> yerine ald\u0131\u011f\u0131n\u0131z manifest digest&#8217;ini yap\u0131\u015ft\u0131r\u0131n.<\/p>\n<p>    *   <strong>\u00c7\u00f6p toplama (Garbage Collection) \u00e7al\u0131\u015ft\u0131rma:<\/strong><br \/>\n        Manifest silindikten sonra, fiziksel disk alan\u0131n\u0131 bo\u015faltmak i\u00e7in \u00e7\u00f6p toplama \u00e7al\u0131\u015ft\u0131rman\u0131z gerekir. Bu i\u015flem, kay\u0131t defteri konteyneri durdurulmu\u015fken yap\u0131lmal\u0131d\u0131r:<\/p>\n<pre><code class=\"language-bash\">docker stop registry\n        docker run --rm -v \/opt\/registry-data:\/var\/lib\/registry \\\n          -v \/opt\/registry-config\/config.yml:\/etc\/docker\/registry\/config.yml \\\n          registry:2 garbage-collect \/etc\/docker\/registry\/config.yml\n        docker start registry<\/code><\/pre>\n<p>        <code>--rm<\/code> bayra\u011f\u0131, komut tamamland\u0131ktan sonra ge\u00e7ici konteyneri otomatik olarak siler.<\/p>\n<p>        <strong>Uyar\u0131:<\/strong> \u00c7\u00f6p toplama i\u015flemi s\u0131ras\u0131nda kay\u0131t defteri eri\u015filebilir olmamal\u0131d\u0131r, aksi takdirde veri kayb\u0131 ya\u015fanabilir.<\/p>\n<h3>Y\u00f6netim ve Bak\u0131m<\/h3>\n<p>\u00d6zel kay\u0131t defterinizin sorunsuz \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flamak i\u00e7in d\u00fczenli y\u00f6netim ve bak\u0131m \u00f6nemlidir.<\/p>\n<h4>G\u00fcncelleme<\/h4>\n<p>Kay\u0131t defteri yaz\u0131l\u0131m\u0131n\u0131 g\u00fcncellemek i\u00e7in:<\/p>\n<p>1.  <strong>Mevcut kay\u0131t defteri konteynerini durdurun ve silin:<\/strong><\/p>\n<pre><code class=\"language-bash\">docker stop registry\n    docker rm registry<\/code><\/pre>\n<p>2.  <strong>En son kay\u0131t defteri imaj\u0131n\u0131 \u00e7ekin:<\/strong><\/p>\n<pre><code class=\"language-bash\">docker pull registry:2<\/code><\/pre>\n<p>3.  <strong>Ayn\u0131 parametrelerle (mount&#8217;lar, ortam de\u011fi\u015fkenleri vb.) yeni bir konteyner ba\u015flat\u0131n:<\/strong><br \/>\n    \u00d6nceki <code>docker run<\/code> komutunuzu tekrar \u00e7al\u0131\u015ft\u0131r\u0131n.<\/p>\n<h4>Yedekleme<\/h4>\n<p>Kay\u0131t defterindeki t\u00fcm imaj verileri, host makinedeki <code>\/opt\/registry-data<\/code> dizininde saklan\u0131r. Bu dizini d\u00fczenli olarak yedeklemek, veri kayb\u0131n\u0131 \u00f6nlemek i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<pre><code class=\"language-bash\">sudo tar -cvzf registry_backup_$(date +%Y%m%d%H%M%S).tar.gz \/opt\/registry-data<\/code><\/pre>\n<p>Yedeklemeyi farkl\u0131 bir sunucuya veya depolama alan\u0131na ta\u015f\u0131mak iyi bir uygulamad\u0131r.<\/p>\n<h4>Loglar<\/h4>\n<p>Kay\u0131t defterinin durumunu ve olas\u0131 hatalar\u0131 izlemek i\u00e7in loglar\u0131 kontrol edin:<\/p>\n<pre><code class=\"language-bash\">docker logs registry<\/code><\/pre>\n<p>Daha fazla detay i\u00e7in <code>-f<\/code> bayra\u011f\u0131n\u0131 kullanarak loglar\u0131 canl\u0131 olarak takip edebilirsiniz: <code>docker logs -f registry<\/code>.<\/p>\n<h4>Disk Alan\u0131 Y\u00f6netimi<\/h4>\n<p>Zamanla, kay\u0131t defterinizde depolanan imajlar disk alan\u0131n\u0131 doldurabilir. Yukar\u0131da bahsedilen imaj silme ve \u00e7\u00f6p toplama (garbage collection) i\u015flemleri, disk alan\u0131n\u0131 geri kazanmak i\u00e7in d\u00fczenli olarak yap\u0131lmal\u0131d\u0131r.<\/p>\n<h3>Sorun Giderme<\/h3>\n<p>Kurulum veya kullan\u0131m s\u0131ras\u0131nda kar\u015f\u0131la\u015fabilece\u011finiz baz\u0131 yayg\u0131n sorunlar ve \u00e7\u00f6z\u00fcmleri:<\/p>\n<p>*   <strong><code>docker login<\/code> veya <code>docker push<\/code> hatalar\u0131 (x509: certificate signed by unknown authority):<\/strong><br \/>\n    *   Bu genellikle istemci taraf\u0131nda kay\u0131t defteri sertifikas\u0131n\u0131n Docker daemon taraf\u0131ndan tan\u0131nmamas\u0131ndan kaynaklan\u0131r. <code>ca.crt<\/code> dosyas\u0131n\u0131n do\u011fru dizinde (<code>\/etc\/docker\/certs.d\/your_registry_domain_or_ip:5000\/ca.crt<\/code>) oldu\u011fundan ve Docker servisini yeniden ba\u015flatt\u0131\u011f\u0131n\u0131zdan emin olun.<br \/>\n    *   Sertifika olu\u015ftururken &#8220;Common Name&#8221; (CN) alan\u0131n\u0131 kay\u0131t defterinizin tam alan ad\u0131 veya IP adresiyle e\u015fle\u015ftirdi\u011finizden emin olun.<br \/>\n    *   E\u011fer bir proxy kullan\u0131yorsan\u0131z, proxy&#8217;nin SSL trafi\u011fini do\u011fru \u015fekilde iletti\u011finden emin olun.<\/p>\n<p>*   <strong><code>docker login<\/code> hatalar\u0131 (unauthorized: authentication required):<\/strong><br \/>\n    *   Bu, kimlik do\u011frulama bilgilerinin yanl\u0131\u015f oldu\u011fu veya kay\u0131t defterinin kimlik do\u011frulama i\u00e7in do\u011fru \u015fekilde yap\u0131land\u0131r\u0131lmad\u0131\u011f\u0131 anlam\u0131na gelir.<br \/>\n    *   <code>docker login<\/code> s\u0131ras\u0131nda do\u011fru kullan\u0131c\u0131 ad\u0131 ve parolay\u0131 kulland\u0131\u011f\u0131n\u0131zdan emin olun.<br \/>\n    *   Kay\u0131t defteri konteynerinin <code>REGISTRY_AUTH_HTPASSWD_PATH<\/code> ve <code>REGISTRY_AUTH_HTPASSWD_REALM<\/code> ortam de\u011fi\u015fkenlerini do\u011fru \u015fekilde ayarlad\u0131\u011f\u0131n\u0131z\u0131 ve <code>htpasswd<\/code> dosyas\u0131n\u0131n do\u011fru yolda oldu\u011funu kontrol edin.<\/p>\n<p>*   <strong>Ba\u011flant\u0131 zaman a\u015f\u0131m\u0131 veya &#8220;connection refused&#8221; hatalar\u0131:<\/strong><br \/>\n    *   Sunucunuzun g\u00fcvenlik duvar\u0131nda (ufw, iptables) kay\u0131t defterinin kulland\u0131\u011f\u0131 portun (varsay\u0131lan 5000) a\u00e7\u0131k oldu\u011fundan emin olun.<br \/>\n    *   Kay\u0131t defteri konteynerinin ger\u00e7ekten \u00e7al\u0131\u015f\u0131p \u00e7al\u0131\u015fmad\u0131\u011f\u0131n\u0131 kontrol edin: <code>docker ps<\/code>.<br \/>\n    *   Kay\u0131t defteri konteynerinin loglar\u0131n\u0131 kontrol edin: <code>docker logs registry<\/code>.<\/p>\n<p>*   <strong>\u0130maj y\u00fckleme\/\u00e7ekme s\u0131ras\u0131nda yava\u015fl\u0131k:<\/strong><br \/>\n    *   Sunucunun a\u011f bant geni\u015fli\u011fini kontrol edin.<br \/>\n    *   Kay\u0131t defterinin depolama performans\u0131n\u0131 g\u00f6zden ge\u00e7irin (\u00f6zellikle disk G\/\u00c7).<br \/>\n    *   \u00c7ok say\u0131da e\u015fzamanl\u0131 i\u015flem varsa sunucu kaynaklar\u0131n\u0131 (CPU, RAM) kontrol edin.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Bu makalede, Ubuntu 14.04 sunucusu \u00fczerine \u00f6zel bir Docker kay\u0131t defterinin nas\u0131l kurulaca\u011f\u0131n\u0131 ayr\u0131nt\u0131l\u0131 bir \u015fekilde inceledik. Temel kurulumdan ba\u015flayarak, kal\u0131c\u0131 depolama yap\u0131land\u0131rmas\u0131na, HTTPS\/TLS ile g\u00fcvenli\u011fe ve <code>htpasswd<\/code> ile temel kimlik do\u011frulamas\u0131na kadar t\u00fcm \u00f6nemli ad\u0131mlar\u0131 ele ald\u0131k. Ayr\u0131ca, imajlar\u0131n nas\u0131l y\u00f6netilece\u011fi, kay\u0131t defterinin bak\u0131m\u0131 ve yayg\u0131n sorun giderme ipu\u00e7lar\u0131 hakk\u0131nda bilgi verdik.<\/p>\n<p>\u00d6zel bir Docker kay\u0131t defteri, \u00f6zellikle hassas veya \u00f6zel imajlarla \u00e7al\u0131\u015fan geli\u015ftirme ekipleri ve kurumsal ortamlar i\u00e7in vazge\u00e7ilmez bir ara\u00e7t\u0131r. \u0130majlar\u0131n\u0131z \u00fczerinde tam kontrol sahibi olman\u0131z\u0131, a\u011f performans\u0131n\u0131 optimize etmenizi ve g\u00fcvenlik politikalar\u0131n\u0131z\u0131 uygulaman\u0131z\u0131 sa\u011flar. Ubuntu 14.04 gibi eski bir i\u015fletim sistemi \u00fczerinde bile, Docker&#8217;\u0131n esnekli\u011fi sayesinde modern konteyner y\u00f6netiminin avantajlar\u0131ndan faydalanabilirsiniz.<\/p>\n<p>\u00dcretim ortamlar\u0131nda kullan\u0131rken, kay\u0131t defterinizin y\u00fcksek kullan\u0131labilirlik, yedeklilik ve izleme \u00e7\u00f6z\u00fcmleriyle desteklendi\u011finden emin olman\u0131z \u00f6nemlidir. Ayr\u0131ca, daha geli\u015fmi\u015f kimlik do\u011frulama entegrasyonlar\u0131 (\u00f6rne\u011fin LDAP, OAuth) veya farkl\u0131 depolama backend&#8217;leri (\u00f6rne\u011fin bulut depolama hizmetleri) gibi konular\u0131 da de\u011ferlendirebilirsiniz. Bu kurulum, kendi \u00f6zel Docker ekosisteminizi olu\u015fturmak i\u00e7in sa\u011flam bir temel sunmaktad\u0131r.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Ubuntu 14.04 \u00dczerine \u00d6zel Bir Docker Kay\u0131t Defteri Kurulumu\nGiri\u015f\nG\u00fcn\u00fcm\u00fcz\u00fcn modern yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda, konteyner teknolojile","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1468],"tags":[],"class_list":{"0":"post-38564","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-ubuntu","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Ubuntu 14.04 \u00dczerine \u00d6zel Bir Docker Kay\u0131t Defteri Kurulumu - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/ubuntu-14-04-uzerine-ozel-bir-docker-kayit-defteri-kurulumu\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ubuntu 14.04 \u00dczerine \u00d6zel Bir Docker Kay\u0131t Defteri Kurulumu\" \/>\n<meta property=\"og:description\" content=\"Ubuntu 14.04 \u00dczerine \u00d6zel Bir Docker Kay\u0131t Defteri Kurulumu Giri\u015f G\u00fcn\u00fcm\u00fcz\u00fcn modern yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda, konteyner teknolojile\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/ubuntu-14-04-uzerine-ozel-bir-docker-kayit-defteri-kurulumu\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-02T22:40:49+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ubuntu-14-04-uzerine-ozel-bir-docker-kayit-defteri-kurulumu\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ubuntu-14-04-uzerine-ozel-bir-docker-kayit-defteri-kurulumu\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Ubuntu 14.04 \u00dczerine \u00d6zel Bir Docker Kay\u0131t Defteri Kurulumu\",\"datePublished\":\"2026-02-02T22:40:49+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ubuntu-14-04-uzerine-ozel-bir-docker-kayit-defteri-kurulumu\/\"},\"wordCount\":2717,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Ubuntu\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/ubuntu-14-04-uzerine-ozel-bir-docker-kayit-defteri-kurulumu\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ubuntu-14-04-uzerine-ozel-bir-docker-kayit-defteri-kurulumu\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/ubuntu-14-04-uzerine-ozel-bir-docker-kayit-defteri-kurulumu\/\",\"name\":\"Ubuntu 14.04 \u00dczerine \u00d6zel Bir Docker Kay\u0131t Defteri Kurulumu - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-02-02T22:40:49+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ubuntu-14-04-uzerine-ozel-bir-docker-kayit-defteri-kurulumu\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/ubuntu-14-04-uzerine-ozel-bir-docker-kayit-defteri-kurulumu\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ubuntu-14-04-uzerine-ozel-bir-docker-kayit-defteri-kurulumu\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ubuntu 14.04 \u00dczerine \u00d6zel Bir Docker Kay\u0131t Defteri Kurulumu\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Ubuntu 14.04 \u00dczerine \u00d6zel Bir Docker Kay\u0131t Defteri Kurulumu - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/ubuntu-14-04-uzerine-ozel-bir-docker-kayit-defteri-kurulumu\/","og_locale":"tr_TR","og_type":"article","og_title":"Ubuntu 14.04 \u00dczerine \u00d6zel Bir Docker Kay\u0131t Defteri Kurulumu","og_description":"Ubuntu 14.04 \u00dczerine \u00d6zel Bir Docker Kay\u0131t Defteri Kurulumu Giri\u015f G\u00fcn\u00fcm\u00fcz\u00fcn modern yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda, konteyner teknolojile","og_url":"https:\/\/fatihsoysal.com\/blog\/ubuntu-14-04-uzerine-ozel-bir-docker-kayit-defteri-kurulumu\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-02-02T22:40:49+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"17 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/ubuntu-14-04-uzerine-ozel-bir-docker-kayit-defteri-kurulumu\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/ubuntu-14-04-uzerine-ozel-bir-docker-kayit-defteri-kurulumu\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Ubuntu 14.04 \u00dczerine \u00d6zel Bir Docker Kay\u0131t Defteri Kurulumu","datePublished":"2026-02-02T22:40:49+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/ubuntu-14-04-uzerine-ozel-bir-docker-kayit-defteri-kurulumu\/"},"wordCount":2717,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Ubuntu"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/ubuntu-14-04-uzerine-ozel-bir-docker-kayit-defteri-kurulumu\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/ubuntu-14-04-uzerine-ozel-bir-docker-kayit-defteri-kurulumu\/","url":"https:\/\/fatihsoysal.com\/blog\/ubuntu-14-04-uzerine-ozel-bir-docker-kayit-defteri-kurulumu\/","name":"Ubuntu 14.04 \u00dczerine \u00d6zel Bir Docker Kay\u0131t Defteri Kurulumu - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-02-02T22:40:49+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/ubuntu-14-04-uzerine-ozel-bir-docker-kayit-defteri-kurulumu\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/ubuntu-14-04-uzerine-ozel-bir-docker-kayit-defteri-kurulumu\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/ubuntu-14-04-uzerine-ozel-bir-docker-kayit-defteri-kurulumu\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Ubuntu 14.04 \u00dczerine \u00d6zel Bir Docker Kay\u0131t Defteri Kurulumu"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38564","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=38564"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38564\/revisions"}],"predecessor-version":[{"id":38565,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38564\/revisions\/38565"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=38564"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=38564"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=38564"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}