{"id":44885,"date":"2026-09-25T09:05:29","date_gmt":"2026-09-25T06:05:29","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/debian-uzerine-docker-kurulumu-adim-adim-kapsamli-rehber\/"},"modified":"2026-09-25T09:06:24","modified_gmt":"2026-09-25T06:06:24","slug":"debian-uzerine-docker-kurulumu-adim-adim-kapsamli-rehber","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/debian-uzerine-docker-kurulumu-adim-adim-kapsamli-rehber\/","title":{"rendered":"Debian \u00dczerine Docker Kurulumu: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber"},"content":{"rendered":"<h2>Debian \u00dczerine Docker Kurulumu: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber<\/h2>\n<p>G\u00fcn\u00fcm\u00fcz yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinde kar\u015f\u0131la\u015f\u0131lan en b\u00fcy\u00fck zorluklardan biri, uygulamalar\u0131n farkl\u0131 ortamlarda (geli\u015ftirme, test, \u00fcretim) tutarl\u0131 bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flamakt\u0131r. &#8220;Benim makinemde \u00e7al\u0131\u015f\u0131yor!&#8221; c\u00fcmlesi, bir\u00e7ok geli\u015ftiricinin k\u00e2busu haline gelmi\u015ftir. Peki, bu sorunu k\u00f6kten \u00e7\u00f6zmek ve geli\u015ftirme s\u00fcre\u00e7lerinizi standardize ederek h\u0131zland\u0131rmak m\u00fcmk\u00fcn m\u00fc? Elbette! \u0130\u015fte tam da bu noktada Docker, konteynerle\u015fme (containerization) teknolojisiyle devreye girerek, uygulamalar\u0131n\u0131z\u0131 ve t\u00fcm ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 izole edilmi\u015f, ta\u015f\u0131nabilir birimler halinde paketlemenizi sa\u011flar. Bu makalede, a\u00e7\u0131k kaynak d\u00fcnyas\u0131n\u0131n g\u00fc\u00e7l\u00fc ve istikrarl\u0131 i\u015fletim sistemlerinden biri olan Debian \u00fczerine Docker&#8217;\u0131 nas\u0131l kuraca\u011f\u0131n\u0131z\u0131, temelden ileri d\u00fczeye kadar ad\u0131m ad\u0131m detayl\u0131 bir \u015fekilde inceleyece\u011fiz. Bu rehber sayesinde, Docker&#8217;\u0131n sundu\u011fu esneklik ve verimlilikle tan\u0131\u015facak, geli\u015ftirme ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinizi yepyeni bir boyuta ta\u015f\u0131yacaks\u0131n\u0131z. Haz\u0131rsan\u0131z, Debian sunucunuzu modern yaz\u0131l\u0131m geli\u015ftirme platformuna d\u00f6n\u00fc\u015ft\u00fcrmeye ba\u015flayal\u0131m.<\/p>\n<h2>Geli\u015ftirme S\u00fcre\u00e7lerinizi H\u0131zland\u0131rmak \u0130\u00e7in Neden Docker Kullanmal\u0131s\u0131n\u0131z?<\/h2>\n<p>Yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131 s\u00fcrekli evrim ge\u00e7irirken, uygulamalar\u0131n geli\u015ftirilmesi, test edilmesi ve da\u011f\u0131t\u0131lmas\u0131 s\u00fcre\u00e7leri de giderek karma\u015f\u0131kla\u015fmaktad\u0131r. Farkl\u0131 geli\u015ftiricilerin farkl\u0131 i\u015fletim sistemleri, k\u00fct\u00fcphane versiyonlar\u0131 veya ba\u011f\u0131ml\u0131l\u0131klar\u0131 kullanmas\u0131, &#8220;benim makinemde \u00e7al\u0131\u015f\u0131yor ama sunucuda \u00e7al\u0131\u015fm\u0131yor&#8221; gibi klasik problemlerin ortaya \u00e7\u0131kmas\u0131na neden olmaktad\u0131r. Bu durum, hem zaman kayb\u0131na yol a\u00e7ar hem de ekipler aras\u0131ndaki i\u015f birli\u011fini zorla\u015ft\u0131r\u0131r. \u0130\u015fte bu noktada Docker, modern yaz\u0131l\u0131m geli\u015ftirme ve DevOps pratiklerinin vazge\u00e7ilmez bir par\u00e7as\u0131 haline gelmi\u015ftir. Docker, uygulamalar\u0131 ve onlar\u0131n t\u00fcm ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131, i\u015fletim sisteminden ba\u011f\u0131ms\u0131z, hafif ve ta\u015f\u0131nabilir birimler olan &#8220;konteynerler&#8221; i\u00e7ine paketleyerek bu tutars\u0131zl\u0131k sorununu ortadan kald\u0131r\u0131r. Konteynerler, bir sanal makine (virtual machine) gibi t\u00fcm bir i\u015fletim sistemini taklit etmek yerine, ana i\u015fletim sisteminin \u00e7ekirde\u011fini (kernel) payla\u015f\u0131r ve sadece uygulama ile ilgili ba\u011f\u0131ml\u0131l\u0131klar\u0131 i\u00e7erir. Bu sayede, \u00e7ok daha az kaynak t\u00fcketirler ve saniyeler i\u00e7inde ba\u015flat\u0131labilirler.<\/p>\n<p>Docker&#8217;\u0131n sundu\u011fu en \u00f6nemli avantajlardan biri ta\u015f\u0131nabilirliktir. Bir Docker konteynerini, ister yerel geli\u015ftirme ortam\u0131n\u0131zda, ister bir test sunucusunda, isterse de bulut tabanl\u0131 bir \u00fcretim ortam\u0131nda \u00e7al\u0131\u015ft\u0131r\u0131n, her yerde ayn\u0131 \u015fekilde davranaca\u011f\u0131ndan emin olabilirsiniz. Bu tutarl\u0131l\u0131k, geli\u015ftiricilerin kodlar\u0131n\u0131 daha h\u0131zl\u0131 yazmalar\u0131na, test ekiplerinin daha g\u00fcvenilir testler yapmalar\u0131na ve operasyon ekiplerinin uygulamalar\u0131 daha sorunsuz bir \u015fekilde da\u011f\u0131tmalar\u0131na olanak tan\u0131r. Ayr\u0131ca, Docker, mikroservis mimarileri i\u00e7in ideal bir platform sunar. Uygulaman\u0131z\u0131n farkl\u0131 bile\u015fenlerini ayr\u0131 konteynerlerde \u00e7al\u0131\u015ft\u0131rarak, her bir bile\u015fenin ba\u011f\u0131ms\u0131z olarak geli\u015ftirilmesini, \u00f6l\u00e7eklenmesini ve g\u00fcncellenmesini sa\u011flayabilirsiniz. Bu da daha esnek, dayan\u0131kl\u0131 ve y\u00f6netilebilir sistemler olu\u015fturman\u0131za yard\u0131mc\u0131 olur. Kaynak verimlili\u011fi a\u00e7\u0131s\u0131ndan da Docker olduk\u00e7a etkilidir. Konteynerler, sanal makinelere k\u0131yasla \u00e7ok daha az bellek ve i\u015flemci kullan\u0131r, bu da ayn\u0131 donan\u0131m \u00fczerinde daha fazla uygulaman\u0131n \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131na olanak tan\u0131r ve altyap\u0131 maliyetlerini d\u00fc\u015f\u00fcr\u00fcr. G\u00fcvenlik taraf\u0131nda ise, her konteynerin izole bir ortamda \u00e7al\u0131\u015fmas\u0131, bir konteynerdeki sorunun di\u011ferlerini etkilemesini engeller. Bu nedenlerle, Docker, modern yaz\u0131l\u0131m geli\u015ftiricileri, DevOps m\u00fchendisleri ve sistem y\u00f6neticileri i\u00e7in vazge\u00e7ilmez bir ara\u00e7 haline gelmi\u015ftir. Debian gibi kararl\u0131 ve g\u00fcvenilir bir i\u015fletim sistemi \u00fczerinde Docker kullanmak, bu avantajlar\u0131 sa\u011flam bir temel \u00fczerine in\u015fa etmek anlam\u0131na gelir.<\/p>\n<h2>Docker ve Konteynerle\u015fme Nedir? Temel Kavramlara H\u0131zl\u0131 Bir Bak\u0131\u015f<\/h2>\n<p>Docker&#8217;\u0131 etkin bir \u015fekilde kullanabilmek i\u00e7in, \u00f6ncelikle konteynerle\u015fme felsefesini ve Docker ekosisteminin temel bile\u015fenlerini anlamak hayati \u00f6nem ta\u015f\u0131r. Konteynerle\u015fme, bir uygulamay\u0131 ve onun t\u00fcm ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 (kod, \u00e7al\u0131\u015fma zaman\u0131 ortam\u0131, sistem ara\u00e7lar\u0131, k\u00fct\u00fcphaneler ve ayarlar) izole edilmi\u015f bir ortamda paketleme s\u00fcrecidir. Bu sayede uygulama, farkl\u0131 bilgisayarlar veya sunucular aras\u0131nda tutarl\u0131 bir \u015fekilde \u00e7al\u0131\u015fabilir. Docker, bu konteynerle\u015fme teknolojisinin en pop\u00fcler ve yayg\u0131n kullan\u0131lan platformudur. Sanal makinelerden farkl\u0131 olarak, Docker konteynerleri t\u00fcm bir i\u015fletim sistemini sanalla\u015ft\u0131rmak yerine, ana bilgisayar\u0131n (host) i\u015fletim sistemi \u00e7ekirde\u011fini payla\u015f\u0131r. Bu &#8220;payla\u015f\u0131lan \u00e7ekirdek&#8221; yakla\u015f\u0131m\u0131, konteynerlerin \u00e7ok daha hafif, h\u0131zl\u0131 ba\u015flat\u0131labilir ve kaynak a\u00e7\u0131s\u0131ndan verimli olmas\u0131n\u0131 sa\u011flar. Sanal makineler gigabaytlarca yer kaplarken ve dakikalarca a\u00e7\u0131l\u0131rken, Docker konteynerleri megabaytlarca yer kaplayabilir ve saniyeler i\u00e7inde \u00e7al\u0131\u015fmaya ba\u015flayabilir.<\/p>\n<p>Docker ekosisteminde birka\u00e7 temel kavram bulunmaktad\u0131r:<\/p>\n<ul>\n<li><strong>Docker Engine:<\/strong> Docker&#8217;\u0131n kalbidir. Konteynerleri olu\u015fturan, \u00e7al\u0131\u015ft\u0131ran, durduran ve y\u00f6neten arka plan servisi (daemon) ve komut sat\u0131r\u0131 aray\u00fcz\u00fcnden (CLI) olu\u015fur.<\/li>\n<li><strong>Docker \u0130maj\u0131 (Image):<\/strong> Bir konteyner \u00e7al\u0131\u015ft\u0131rmak i\u00e7in gerekli t\u00fcm uygulama kodunu, k\u00fct\u00fcphaneleri, ba\u011f\u0131ml\u0131l\u0131klar\u0131 ve \u00e7al\u0131\u015fma zaman\u0131 ayarlar\u0131n\u0131 i\u00e7eren salt okunur bir \u015fablondur. \u0130majlar, bir uygulaman\u0131n &#8220;kal\u0131b\u0131&#8221; gibidir. \u00d6rne\u011fin, bir Nginx web sunucusu imaj\u0131, Nginx&#8217;i \u00e7al\u0131\u015ft\u0131rmak i\u00e7in gereken her \u015feyi i\u00e7erir.<\/li>\n<li><strong>Dockerfile:<\/strong> Bir Docker imaj\u0131n\u0131 otomatik olarak olu\u015fturmak i\u00e7in kullan\u0131lan talimatlar\u0131 i\u00e7eren basit bir metin dosyas\u0131d\u0131r. Bu dosya, temel bir imaj se\u00e7mekten, uygulama kodunu eklemeye, ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00fcklemeye ve uygulama ba\u015flatma komutunu tan\u0131mlamaya kadar t\u00fcm ad\u0131mlar\u0131 i\u00e7erir. Geli\u015ftiriciler, Dockerfile&#8217;\u0131 kullanarak uygulamalar\u0131n\u0131n imajlar\u0131n\u0131 kolayca olu\u015fturabilir ve s\u00fcr\u00fcm kontrol\u00fc alt\u0131nda tutabilirler.<\/li>\n<li><strong>Docker Konteyneri (Container):<\/strong> Bir Docker imaj\u0131n\u0131n \u00e7al\u0131\u015ft\u0131r\u0131labilir bir \u00f6rne\u011fidir. \u0130maj salt okunurken, konteynerler \u00e7al\u0131\u015ft\u0131r\u0131labilir ve \u00fczerinde de\u011fi\u015fiklikler yap\u0131labilir (ancak bu de\u011fi\u015fiklikler varsay\u0131lan olarak kal\u0131c\u0131 de\u011fildir). Konteynerler, izole edilmi\u015f bir ortamda \u00e7al\u0131\u015fan uygulamalard\u0131r.<\/li>\n<li><strong>Docker Hub:<\/strong> Docker imajlar\u0131 i\u00e7in herkese a\u00e7\u0131k bir bulut tabanl\u0131 depodur (registry). Geli\u015ftiriciler kendi imajlar\u0131n\u0131 Docker Hub&#8217;a y\u00fckleyebilir veya ba\u015fkalar\u0131 taraf\u0131ndan olu\u015fturulmu\u015f binlerce haz\u0131r imaj\u0131 (\u00f6rne\u011fin Ubuntu, Nginx, MySQL gibi) \u00e7ekip kullanabilirler. Bu, imaj payla\u015f\u0131m\u0131n\u0131 ve yeniden kullan\u0131m\u0131 kolayla\u015ft\u0131r\u0131r.<\/li>\n<\/ul>\n<p>Bu temel kavramlar, Docker&#8217;\u0131n g\u00fcc\u00fcn\u00fc ve esnekli\u011fini anlamak i\u00e7in bir ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r. Konteynerle\u015fme, uygulamalar\u0131n geli\u015ftirilme, test edilme ve \u00fcretim ortamlar\u0131na da\u011f\u0131t\u0131lma \u015feklini k\u00f6kten de\u011fi\u015ftirerek, ekiplerin daha verimli \u00e7al\u0131\u015fmas\u0131n\u0131 ve daha h\u0131zl\u0131 inovasyon yapmas\u0131n\u0131 sa\u011flam\u0131\u015ft\u0131r. Debian gibi sa\u011flam bir temel \u00fczerinde bu teknolojiyi kullanmak, altyap\u0131n\u0131z\u0131n hem g\u00fcvenilir hem de modern olmas\u0131n\u0131 garanti eder.<\/p>\n<h2>Debian \u00dczerine Docker Kurulumu \u00d6ncesi Haz\u0131rl\u0131klar Nelerdir?<\/h2>\n<p>Debian \u00fczerine Docker kurmaya ba\u015flamadan \u00f6nce, sorunsuz bir kurulum s\u00fcreci i\u00e7in baz\u0131 \u00f6n haz\u0131rl\u0131klar yapmam\u0131z gerekmektedir. Bu ad\u0131mlar, sisteminizin Docker i\u00e7in uygun oldu\u011fundan emin olman\u0131z\u0131 ve olas\u0131 \u00e7ak\u0131\u015fmalar\u0131 \u00f6nlemenizi sa\u011flayacakt\u0131r. \u00d6ncelikle, Debian i\u015fletim sisteminizin g\u00fcncel oldu\u011fundan emin olmal\u0131y\u0131z. G\u00fcncel olmayan paketler veya sistem bile\u015fenleri, Docker kurulumu s\u0131ras\u0131nda veya sonras\u0131nda beklenmedik sorunlara yol a\u00e7abilir. Terminali a\u00e7\u0131n ve a\u015fa\u011f\u0131daki komutlar\u0131 \u00e7al\u0131\u015ft\u0131rarak paket listelerinizi g\u00fcncelleyin ve y\u00fckl\u00fc paketleri y\u00fckseltin:<\/p>\n<div class=\"code-container\">\n<pre><code>sudo apt update\nsudo apt upgrade -y<\/code><\/pre>\n<\/div>\n<p>Bu komutlar, sisteminizdeki mevcut t\u00fcm paketleri en son s\u00fcr\u00fcmlerine g\u00fcncelleyecektir. \u0130\u015flem tamamland\u0131\u011f\u0131nda, baz\u0131 \u00e7ekirdek (kernel) g\u00fcncellemeleri yap\u0131lm\u0131\u015fsa sisteminizi yeniden ba\u015flatman\u0131z \u00f6nerilir. Docker, Linux \u00e7ekirde\u011finin belirli \u00f6zelliklerini kulland\u0131\u011f\u0131 i\u00e7in, g\u00fcncel bir \u00e7ekirdek s\u00fcr\u00fcm\u00fcne sahip olmak \u00f6nemlidir.<\/p>\n<p>\u0130kinci olarak, daha \u00f6nce sisteminizde Docker&#8217;\u0131n eski veya farkl\u0131 bir s\u00fcr\u00fcm\u00fc y\u00fckl\u00fcyse, bu kurulumlar\u0131 tamamen kald\u0131rman\u0131z gerekmektedir. Eski kurulumlar, yeni kurulumla \u00e7ak\u0131\u015fabilir ve beklenmedik davran\u0131\u015flara neden olabilir. A\u015fa\u011f\u0131daki komutlar\u0131 kullanarak eski Docker paketlerini kald\u0131rabilirsiniz:<\/p>\n<div class=\"code-container\">\n<pre><code>sudo apt remove docker docker-engine docker.io containerd runc\nsudo apt autoremove -y<\/code><\/pre>\n<\/div>\n<p>Bu komutlar, Docker ile ili\u015fkili olabilecek t\u00fcm ana paketleri kald\u0131racakt\u0131r. E\u011fer bu komutlar &#8220;paket bulunamad\u0131&#8221; gibi bir hata verirse endi\u015felenmeyin, bu sadece sisteminizde zaten bir Docker kurulumu olmad\u0131\u011f\u0131n\u0131 g\u00f6sterir. Ayr\u0131ca, Docker&#8217;\u0131n yap\u0131land\u0131rma dosyalar\u0131 veya konteyner verileri gibi kal\u0131nt\u0131lar\u0131 da temizlemek isteyebilirsiniz. Bu genellikle <code>\/var\/lib\/docker<\/code> dizininde bulunur. E\u011fer bu dizini temizlemek isterseniz, dikkatli olun, \u00e7\u00fcnk\u00fc bu i\u015flem mevcut t\u00fcm Docker imajlar\u0131n\u0131z\u0131, konteynerlerinizi ve birimlerinizi (volumes) silecektir:<\/p>\n<div class=\"code-container\">\n<pre><code>sudo rm -rf \/var\/lib\/docker<\/code><\/pre>\n<\/div>\n<p>Son olarak, Docker&#8217;\u0131n HTTPS \u00fczerinden g\u00fcvenli bir \u015fekilde paket indirmesi i\u00e7in gerekli olan baz\u0131 ba\u011f\u0131ml\u0131l\u0131k paketlerini y\u00fcklememiz gerekmektedir. Bu paketler, sertifikalar\u0131 y\u00f6netmeye ve Docker deposuna g\u00fcvenli bir ba\u011flant\u0131 kurmaya yard\u0131mc\u0131 olur:<\/p>\n<div class=\"code-container\">\n<pre><code>sudo apt install ca-certificates curl gnupg lsb-release -y<\/code><\/pre>\n<\/div>\n<ul>\n<li><code>ca-certificates<\/code>: G\u00fcvenilir sertifika yetkililerinin (CA) sertifikalar\u0131n\u0131 i\u00e7erir.<\/li>\n<li><code>curl<\/code>: \u0130nternet \u00fczerinden veri aktar\u0131m\u0131 i\u00e7in kullan\u0131lan bir ara\u00e7t\u0131r. Docker&#8217;\u0131n GPG anahtar\u0131n\u0131 indirmek i\u00e7in kullan\u0131lacakt\u0131r.<\/li>\n<li><code>gnupg<\/code>: GPG anahtarlar\u0131n\u0131 y\u00f6netmek ve paket b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc do\u011frulamak i\u00e7in kullan\u0131l\u0131r.<\/li>\n<li><code>lsb-release<\/code>: \u0130\u015fletim sisteminin da\u011f\u0131t\u0131m bilgilerini (\u00f6rne\u011fin, Debian s\u00fcr\u00fcm ad\u0131) sa\u011flar, bu da do\u011fru Docker deposu URL&#8217;sini olu\u015fturmak i\u00e7in gereklidir.<\/li>\n<\/ul>\n<p>Bu haz\u0131rl\u0131k ad\u0131mlar\u0131 tamamland\u0131ktan sonra, Debian sisteminiz Docker Engine&#8217;i kurmaya tamamen haz\u0131r hale gelmi\u015f demektir. G\u00fcvenli ve sorunsuz bir kurulum i\u00e7in bu ad\u0131mlar\u0131 atlamamak \u00f6nemlidir.<\/p>\n<h2>Ad\u0131m Ad\u0131m Debian&#8217;a Docker Engine Nas\u0131l Kurulur?<\/h2>\n<p>Debian sisteminiz Docker kurulumu i\u00e7in haz\u0131rland\u0131\u011f\u0131na g\u00f6re, art\u0131k Docker Engine&#8217;i kurma i\u015flemine ge\u00e7ebiliriz. Bu s\u00fcre\u00e7, Docker&#8217;\u0131n resmi deposunu sisteminize eklemeyi ve ard\u0131ndan gerekli paketleri y\u00fcklemeyi i\u00e7erir. Ad\u0131mlar\u0131 dikkatlice takip ederek, Debian&#8217;\u0131n\u0131zda g\u00fcvenilir bir Docker kurulumuna sahip olacaks\u0131n\u0131z.<\/p>\n<h3>1. Docker&#8217;\u0131n GPG Anahtar\u0131n\u0131 Ekleme<\/h3>\n<p>Docker, paketlerinin b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc ve orijinalli\u011fini do\u011frulamak i\u00e7in GPG (GNU Privacy Guard) anahtarlar\u0131 kullan\u0131r. Bu anahtar\u0131 sistemimize eklemek, indirece\u011fimiz paketlerin g\u00fcvenilir oldu\u011funu garantiler. \u0130lk olarak, anahtar\u0131 indirip sistemimize kaydetmek i\u00e7in a\u015fa\u011f\u0131daki komutlar\u0131 kullanaca\u011f\u0131z:<\/p>\n<div class=\"code-container\">\n<pre><code>sudo install -m 0755 -d \/etc\/apt\/keyrings\ncurl -fsSL https:\/\/download.docker.com\/linux\/debian\/gpg | sudo gpg --dearmor -o \/etc\/apt\/keyrings\/docker.gpg<\/code><\/pre>\n<\/div>\n<p>\u0130lk komut, GPG anahtarlar\u0131n\u0131 depolamak i\u00e7in bir dizin olu\u015fturur ve gerekli izinleri verir. \u0130kinci komut ise Docker&#8217;\u0131n resmi GPG anahtar\u0131n\u0131 indirir ve <code>\/etc\/apt\/keyrings\/docker.gpg<\/code> dosyas\u0131na kaydeder. <code>--dearmor<\/code> se\u00e7ene\u011fi, anahtar\u0131 ASCII z\u0131rhl\u0131 bi\u00e7imden ikili bi\u00e7ime d\u00f6n\u00fc\u015ft\u00fcr\u00fcr.<\/p>\n<h3>2. Docker Deposunu APT Kaynaklar\u0131na Ekleme<\/h3>\n<p>GPG anahtar\u0131n\u0131 ekledikten sonra, APT paket y\u00f6neticimizin Docker paketlerini bulabilmesi i\u00e7in Docker&#8217;\u0131n resmi deposunu sistemimizin kaynak listesine eklememiz gerekir. Bu sayede, Docker paketlerini di\u011fer Debian paketleri gibi <code>apt<\/code> komutuyla kolayca y\u00f6netebiliriz:<\/p>\n<div class=\"code-container\">\n<pre><code>echo \\\n  \"deb [arch=$(dpkg --print-architecture) signed-by=\/etc\/apt\/keyrings\/docker.gpg] https:\/\/download.docker.com\/linux\/debian \\\n  $(lsb_release -cs) stable\" | sudo tee \/etc\/apt\/sources.list.d\/docker.list > \/dev\/null<\/code><\/pre>\n<\/div>\n<p>Bu uzun komut, sisteminizin mimarisine (<code>arch=$(dpkg --print-architecture)<\/code>) ve Debian s\u00fcr\u00fcm\u00fcne (<code>$(lsb_release -cs)<\/code>) uygun Docker deposu URL&#8217;sini otomatik olarak olu\u015fturur ve <code>\/etc\/apt\/sources.list.d\/docker.list<\/code> dosyas\u0131na yazar. <code>signed-by<\/code> parametresi, paketlerin az \u00f6nce ekledi\u011fimiz GPG anahtar\u0131 ile imzaland\u0131\u011f\u0131n\u0131 belirtir, b\u00f6ylece APT bu depoyu g\u00fcvenilir kabul eder.<\/p>\n<h3>3. APT Paket Listesini G\u00fcncelleme<\/h3>\n<p>Yeni depoyu ekledikten sonra, APT&#8217;nin yeni kaynaklar\u0131 tan\u0131mas\u0131 i\u00e7in paket listesini g\u00fcncellememiz gerekir:<\/p>\n<div class=\"code-container\">\n<pre><code>sudo apt update<\/code><\/pre>\n<\/div>\n<p>Bu komut, Docker deposundaki mevcut paketlerin listesini sisteminize \u00e7ekecektir.<\/p>\n<h3>4. Docker Engine&#8217;i Y\u00fckleme<\/h3>\n<p>Art\u0131k Docker Engine&#8217;i, Docker CLI&#8217;y\u0131 (komut sat\u0131r\u0131 aray\u00fcz\u00fc) ve containerd&#8217;yi (konteyner \u00e7al\u0131\u015fma zaman\u0131) y\u00fcklemeye haz\u0131r\u0131z. Ayr\u0131ca, Docker Buildx ve Docker Compose eklentilerini de y\u00fckleyerek daha geli\u015fmi\u015f \u00f6zelliklere sahip olaca\u011f\u0131z:<\/p>\n<div class=\"code-container\">\n<pre><code>sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y<\/code><\/pre>\n<\/div>\n<ul>\n<li><code>docker-ce<\/code>: Docker Community Edition (Topluluk S\u00fcr\u00fcm\u00fc) motorudur.<\/li>\n<li><code>docker-ce-cli<\/code>: Docker komut sat\u0131r\u0131 aray\u00fcz\u00fcd\u00fcr.<\/li>\n<li><code>containerd.io<\/code>: Konteynerleri y\u00f6netmek i\u00e7in end\u00fcstri standard\u0131 bir \u00e7al\u0131\u015fma zaman\u0131d\u0131r.<\/li>\n<li><code>docker-buildx-plugin<\/code>: Docker&#8217;\u0131n \u00e7oklu mimari imajlar\u0131 olu\u015fturmak i\u00e7in kullan\u0131lan bir eklentisidir.<\/li>\n<li><code>docker-compose-plugin<\/code>: Birden fazla konteyneri tek bir komutla y\u00f6netmek i\u00e7in Docker Compose eklentisidir.<\/li>\n<\/ul>\n<h3>5. Kurulumu Do\u011frulama<\/h3>\n<p>Docker&#8217;\u0131n do\u011fru bir \u015fekilde kurulup kurulmad\u0131\u011f\u0131n\u0131 kontrol etmek i\u00e7in, basit bir &#8220;hello-world&#8221; konteynerini \u00e7al\u0131\u015ft\u0131rabiliriz:<\/p>\n<div class=\"code-container\">\n<pre><code>sudo docker run hello-world<\/code><\/pre>\n<\/div>\n<p>E\u011fer kurulum ba\u015far\u0131l\u0131ysa, terminalde &#8220;Hello from Docker!&#8221; mesaj\u0131n\u0131 ve Docker&#8217;\u0131n nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131na dair k\u0131sa bir a\u00e7\u0131klama g\u00f6receksiniz. Bu, Docker Engine&#8217;in d\u00fczg\u00fcn \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6sterir.<\/p>\n<h3>6. Docker Komutlar\u0131n\u0131 Sudo Olmadan \u00c7al\u0131\u015ft\u0131rma (\u0130ste\u011fe Ba\u011fl\u0131 ama \u00d6nerilen)<\/h3>\n<p>Varsay\u0131lan olarak, Docker komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in <code>sudo<\/code> kullanman\u0131z gerekir. Ancak, kullan\u0131c\u0131n\u0131z\u0131 <code>docker<\/code> grubuna ekleyerek bu gereklili\u011fi ortadan kald\u0131rabilirsiniz. Bu, g\u00fcnl\u00fck kullan\u0131mda \u00e7ok daha pratik bir yakla\u015f\u0131md\u0131r:<\/p>\n<div class=\"code-container\">\n<pre><code>sudo usermod -aG docker $USER<\/code><\/pre>\n<\/div>\n<p>Bu komut, mevcut kullan\u0131c\u0131n\u0131z\u0131 (<code>$USER<\/code> de\u011fi\u015fkeni ile temsil edilen) <code>docker<\/code> grubuna ekler. Bu de\u011fi\u015fikli\u011fin etkili olmas\u0131 i\u00e7in oturumu kapat\u0131p tekrar a\u00e7man\u0131z veya sisteminizi yeniden ba\u015flatman\u0131z gerekmektedir. Oturumunuzu yeniden ba\u015flatt\u0131ktan sonra, <code>sudo<\/code> kullanmadan Docker komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rabilirsiniz:<\/p>\n<div class=\"code-container\">\n<pre><code>docker run hello-world<\/code><\/pre>\n<\/div>\n<p>Bu ad\u0131mlar\u0131 tamamlad\u0131ktan sonra, Debian sisteminizde tam i\u015flevsel bir Docker kurulumuna sahip olacaks\u0131n\u0131z. Art\u0131k konteynerler olu\u015fturmaya, \u00e7al\u0131\u015ft\u0131rmaya ve y\u00f6netmeye haz\u0131rs\u0131n\u0131z!<\/p>\n<h2>Docker ile \u0130lk Konteynerinizi \u00c7al\u0131\u015ft\u0131rma ve Y\u00f6netme: Pratik Uygulamalar<\/h2>\n<p>Docker Engine&#8217;i Debian sisteminize ba\u015far\u0131yla kurdu\u011funuza g\u00f6re, \u015fimdi s\u0131ra Docker&#8217;\u0131n temel g\u00fcc\u00fcn\u00fc deneyimlemeye geldi: Konteynerleri \u00e7al\u0131\u015ft\u0131rmak ve y\u00f6netmek. Bu b\u00f6l\u00fcmde, Docker&#8217;\u0131n en yayg\u0131n kullan\u0131lan komutlar\u0131n\u0131 \u00f6\u011frenecek ve basit bir web sunucusundan kendi uygulaman\u0131za kadar farkl\u0131 senaryolar\u0131 nas\u0131l konteynerle\u015ftirece\u011finizi g\u00f6receksiniz. Docker&#8217;\u0131n mant\u0131\u011f\u0131n\u0131 kavramak i\u00e7in pratik yapmak \u00e7ok \u00f6nemlidir.<\/p>\n<h3>Temel Docker Komutlar\u0131<\/h3>\n<p>Docker ile \u00e7al\u0131\u015f\u0131rken s\u0131kl\u0131kla kullanaca\u011f\u0131n\u0131z birka\u00e7 temel komut bulunmaktad\u0131r:<\/p>\n<ul>\n<li><code>docker pull [imaj_ad\u0131]<\/code>: Bir imaj\u0131 Docker Hub&#8217;dan veya ba\u015fka bir depodan yerel makinenize indirir.<\/li>\n<li><code>docker run [imaj_ad\u0131]<\/code>: Bir imajdan yeni bir konteyner olu\u015fturur ve \u00e7al\u0131\u015ft\u0131r\u0131r.<\/li>\n<li><code>docker ps<\/code>: \u00c7al\u0131\u015fan t\u00fcm konteynerleri listeler. <code>-a<\/code> parametresi ile durdurulmu\u015f konteynerleri de g\u00f6rebilirsiniz.<\/li>\n<li><code>docker stop [konteyner_ad\u0131_veya_ID]<\/code>: \u00c7al\u0131\u015fan bir konteyneri durdurur.<\/li>\n<li><code>docker start [konteyner_ad\u0131_veya_ID]<\/code>: Durdurulmu\u015f bir konteyneri ba\u015flat\u0131r.<\/li>\n<li><code>docker rm [konteyner_ad\u0131_veya_ID]<\/code>: Bir konteyneri siler (\u00f6nce durdurulmu\u015f olmal\u0131d\u0131r).<\/li>\n<li><code>docker rmi [imaj_ad\u0131_veya_ID]<\/code>: Bir imaj\u0131 yerel depodan siler.<\/li>\n<li><code>docker logs [konteyner_ad\u0131_veya_ID]<\/code>: Bir konteynerin loglar\u0131n\u0131 (g\u00fcnl\u00fcklerini) g\u00f6sterir.<\/li>\n<\/ul>\n<h3>\u00d6rnek 1: Basit Bir Nginx Web Sunucusu \u00c7al\u0131\u015ft\u0131rma<\/h3>\n<p>Hemen pratik bir \u00f6rnekle ba\u015flayal\u0131m. Pop\u00fcler web sunucusu Nginx&#8217;i bir Docker konteynerinde nas\u0131l \u00e7al\u0131\u015ft\u0131raca\u011f\u0131n\u0131z\u0131 g\u00f6relim:<\/p>\n<div class=\"code-container\">\n<pre><code>docker run --name my-nginx -p 8080:80 -d nginx<\/code><\/pre>\n<\/div>\n<p>Bu komutu inceleyelim:<\/p>\n<ul>\n<li><code>docker run<\/code>: Yeni bir konteyner olu\u015ftur ve \u00e7al\u0131\u015ft\u0131r.<\/li>\n<li><code>--name my-nginx<\/code>: Konteynerimize okunabilir bir isim veririz (<code>my-nginx<\/code>).<\/li>\n<li><code>-p 8080:80<\/code>: Bu, &#8220;port e\u015fleme&#8221; (port mapping) olarak bilinir. Ana bilgisayar\u0131m\u0131z\u0131n 8080 portunu, konteynerin i\u00e7indeki 80 portuna e\u015fler. B\u00f6ylece ana makinenizin <code>http:\/\/localhost:8080<\/code> adresinden Nginx&#8217;e eri\u015febilirsiniz.<\/li>\n<li><code>-d<\/code>: Konteyneri arka planda (detached mode) \u00e7al\u0131\u015ft\u0131r\u0131r, b\u00f6ylece terminaliniz serbest kal\u0131r.<\/li>\n<li><code>nginx<\/code>: Kullan\u0131lacak imaj\u0131n ad\u0131d\u0131r. Docker Hub&#8217;dan otomatik olarak en son Nginx imaj\u0131n\u0131 \u00e7ekecektir.<\/li>\n<\/ul>\n<p>\u015eimdi taray\u0131c\u0131n\u0131zdan <code>http:\/\/localhost:8080<\/code> adresine giderek Nginx&#8217;in varsay\u0131lan &#8220;Welcome to Nginx!&#8221; sayfas\u0131n\u0131 g\u00f6rmelisiniz. \u00c7al\u0131\u015fan konteynerinizi g\u00f6rmek i\u00e7in:<\/p>\n<div class=\"code-container\">\n<pre><code>docker ps<\/code><\/pre>\n<\/div>\n<p>Konteyneri durdurmak ve silmek i\u00e7in:<\/p>\n<div class=\"code-container\">\n<pre><code>docker stop my-nginx\ndocker rm my-nginx<\/code><\/pre>\n<\/div>\n<h3>\u00d6rnek 2: Kendi Python Flask Uygulaman\u0131z\u0131 Konteynerle\u015ftirme<\/h3>\n<p>\u015eimdi daha ger\u00e7ek\u00e7i bir senaryoya ge\u00e7elim: Basit bir Python Flask uygulamas\u0131n\u0131 Docker ile nas\u0131l aya\u011fa kald\u0131raca\u011f\u0131n\u0131z\u0131 g\u00f6rece\u011fiz. \u00d6ncelikle, uygulama dosyalar\u0131m\u0131z\u0131 olu\u015ftural\u0131m. Bir dizin olu\u015fturun (\u00f6rne\u011fin <code>my_flask_app<\/code>) ve i\u00e7ine <code>app.py<\/code> ve <code>requirements.txt<\/code> ad\u0131nda iki dosya ekleyin:<\/p>\n<div class=\"code-container\">\n<pre><code># app.py\nfrom flask import Flask\napp = Flask(__name__)\n\n@app.route('\/')\ndef hello():\n    return \"Merhaba Docker ve Debian! Bu benim Flask uygulamam.\"\n\nif __name__ == '__main__':\n    app.run(host='0.0.0.0', port=5000)<\/code><\/pre>\n<\/div>\n<div class=\"code-container\">\n<pre><code># requirements.txt\nFlask==2.3.2<\/code><\/pre>\n<\/div>\n<p>\u015eimdi bu uygulamay\u0131 konteynerle\u015ftirmek i\u00e7in bir <code>Dockerfile<\/code> olu\u015ftural\u0131m (ayn\u0131 dizinde):<\/p>\n<div class=\"code-container\">\n<pre><code># Dockerfile\n# Resmi Python 3.9 imaj\u0131n\u0131 temel al\nFROM python:3.9-slim-buster\n\n# \u00c7al\u0131\u015fma dizinini ayarla\nWORKDIR \/app\n\n# Ba\u011f\u0131ml\u0131l\u0131klar\u0131 kopyala ve y\u00fckle\nCOPY requirements.txt .\nRUN pip install --no-cache-dir -r requirements.txt\n\n# Uygulama kodunu kopyala\nCOPY . .\n\n# Uygulaman\u0131n \u00e7al\u0131\u015faca\u011f\u0131 portu belirt\nEXPOSE 5000\n\n# Uygulamay\u0131 ba\u015flat\nCMD [\"python\", \"app.py\"]<\/code><\/pre>\n<\/div>\n<p>Bu <code>Dockerfile<\/code>, uygulaman\u0131z i\u00e7in bir imaj olu\u015fturma ad\u0131mlar\u0131n\u0131 tan\u0131mlar. \u015eimdi imaj\u0131 olu\u015ftural\u0131m:<\/p>\n<div class=\"code-container\">\n<pre><code>docker build -t my-flask-app .<\/code><\/pre>\n<\/div>\n<p><code>-t my-flask-app<\/code> imaja bir etiket (tag) verirken, <code>.<\/code> mevcut dizindeki <code>Dockerfile<\/code>&#8216;\u0131 kullanmas\u0131n\u0131 s\u00f6yler. \u0130maj olu\u015fturulduktan sonra, uygulamay\u0131 bir konteynerde \u00e7al\u0131\u015ft\u0131rabiliriz:<\/p>\n<div class=\"code-container\">\n<pre><code>docker run --name flask-web -p 5000:5000 -d my-flask-app<\/code><\/pre>\n<\/div>\n<p>Art\u0131k taray\u0131c\u0131n\u0131zdan <code>http:\/\/localhost:5000<\/code> adresine giderek Flask uygulaman\u0131z\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6rebilirsiniz. Bu \u00f6rnekler, Docker&#8217;\u0131n nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131na dair pratik bir bak\u0131\u015f sunar ve uygulamalar\u0131n\u0131z\u0131 konteynerle\u015ftirme yolculu\u011funuzda size rehberlik eder. Konteynerlerin izole yap\u0131s\u0131 sayesinde, farkl\u0131 uygulamalar\u0131n\u0131z\u0131 veya ayn\u0131 uygulaman\u0131n farkl\u0131 versiyonlar\u0131n\u0131 ayn\u0131 Debian sunucusu \u00fczerinde \u00e7ak\u0131\u015fma olmadan \u00e7al\u0131\u015ft\u0131rabilirsiniz.<\/p>\n<h2>Docker Compose ile \u00c7oklu Konteyner Uygulamalar\u0131 Nas\u0131l Y\u00f6netilir?<\/h2>\n<p>Tek bir konteyner \u00e7al\u0131\u015ft\u0131rmak nispeten basit olsa da, \u00e7o\u011fu modern uygulama birden fazla servisten olu\u015fur. \u00d6rne\u011fin, bir web uygulamas\u0131 genellikle bir web sunucusu (Nginx veya Apache), bir uygulama sunucusu (Python Flask\/Django, Node.js, PHP-FPM) ve bir veritaban\u0131 (PostgreSQL, MySQL, MongoDB) gibi farkl\u0131 bile\u015fenleri i\u00e7erir. Bu bile\u015fenlerin her birini ayr\u0131 Docker komutlar\u0131yla y\u00f6netmek karma\u015f\u0131k ve hata yapmaya a\u00e7\u0131k olabilir. \u0130\u015fte bu noktada Docker Compose devreye girer. Docker Compose, \u00e7oklu konteyner Docker uygulamalar\u0131n\u0131 tan\u0131mlamak ve \u00e7al\u0131\u015ft\u0131rmak i\u00e7in bir ara\u00e7t\u0131r. Tek bir YAML dosyas\u0131 kullanarak uygulaman\u0131z\u0131n t\u00fcm servislerini, a\u011flar\u0131n\u0131 ve birimlerini (volumes) yap\u0131land\u0131rabilir ve ard\u0131ndan tek bir komutla t\u00fcm uygulamay\u0131 aya\u011fa kald\u0131rabilir veya durdurabilirsiniz.<\/p>\n<p>Docker Compose&#8217;un temel amac\u0131, birden fazla servisten olu\u015fan uygulamalar i\u00e7in geli\u015ftirme, test ve hatta k\u00fc\u00e7\u00fck \u00f6l\u00e7ekli \u00fcretim ortamlar\u0131n\u0131 kolayca y\u00f6netmektir. Docker Engine kurulumu s\u0131ras\u0131nda <code>docker-compose-plugin<\/code> paketini zaten y\u00fckledi\u011fimiz i\u00e7in, Docker Compose komutlar\u0131n\u0131 do\u011frudan <code>docker compose<\/code> \u015feklinde kullanabiliriz (eski s\u00fcr\u00fcmlerde <code>docker-compose<\/code> ayr\u0131 bir komuttu).<\/p>\n<h3>Docker Compose ile WordPress Kurulumu Vaka Analizi<\/h3>\n<p>En pop\u00fcler i\u00e7erik y\u00f6netim sistemlerinden biri olan WordPress&#8217;i Docker Compose ile nas\u0131l kuraca\u011f\u0131m\u0131z\u0131 inceleyelim. WordPress, bir web sunucusu (genellikle Apache veya Nginx) ve bir veritaban\u0131 (MySQL veya MariaDB) gerektiren tipik bir \u00e7oklu servis uygulamas\u0131d\u0131r. A\u015fa\u011f\u0131daki ad\u0131mlar\u0131 takip ederek bu kurulumu ger\u00e7ekle\u015ftirebiliriz:<\/p>\n<h4>1. Proje Dizini Olu\u015fturma<\/h4>\n<p>\u00d6ncelikle, WordPress projemiz i\u00e7in bir dizin olu\u015ftural\u0131m ve i\u00e7ine girelim:<\/p>\n<div class=\"code-container\">\n<pre><code>mkdir wordpress-app\ncd wordpress-app<\/code><\/pre>\n<\/div>\n<h4>2. docker-compose.yml Dosyas\u0131 Olu\u015fturma<\/h4>\n<p>Bu dizinde, <code>docker-compose.yml<\/code> ad\u0131nda bir dosya olu\u015fturaca\u011f\u0131z ve i\u00e7ine a\u015fa\u011f\u0131daki i\u00e7eri\u011fi yap\u0131\u015ft\u0131raca\u011f\u0131z:<\/p>\n<div class=\"code-container\">\n<pre><code>version: '3.8'\n\nservices:\n  db:\n    image: mysql:8.0\n    container_name: wordpress_db\n    environment:\n      MYSQL_ROOT_PASSWORD: your_root_password_here # G\u00fc\u00e7l\u00fc bir \u015fifre belirleyin!\n      MYSQL_DATABASE: wordpress\n      MYSQL_USER: wordpress\n      MYSQL_PASSWORD: your_wordpress_password_here # G\u00fc\u00e7l\u00fc bir \u015fifre belirleyin!\n    volumes:\n      - db_data:\/var\/lib\/mysql\n    restart: always\n\n  wordpress:\n    depends_on:\n      - db\n    image: wordpress:latest\n    container_name: my_wordpress_site\n    ports:\n      - \"80:80\"\n    environment:\n      WORDPRESS_DB_HOST: db:3306\n      WORDPRESS_DB_USER: wordpress\n      WORDPRESS_DB_PASSWORD: your_wordpress_password_here\n      WORDPRESS_DB_NAME: wordpress\n    volumes:\n      - wordpress_data:\/var\/www\/html\n    restart: always\n\nvolumes:\n  db_data:\n  wordpress_data:<\/code><\/pre>\n<\/div>\n<p>Bu <code>docker-compose.yml<\/code> dosyas\u0131 iki ana servis tan\u0131mlar:<\/p>\n<ul>\n<li><code>db<\/code> servisi: MySQL 8.0 imaj\u0131n\u0131 kullan\u0131r. Ortam de\u011fi\u015fkenleri ile veritaban\u0131 ad\u0131, kullan\u0131c\u0131 ad\u0131 ve \u015fifreleri belirlenir. <code>db_data<\/code> ad\u0131nda bir birim (volume) kullanarak veritaban\u0131 verilerinin kal\u0131c\u0131 olmas\u0131n\u0131 sa\u011flar.<\/li>\n<li><code>wordpress<\/code> servisi: En son WordPress imaj\u0131n\u0131 kullan\u0131r. <code>depends_on: - db<\/code> ile MySQL servisi \u00e7al\u0131\u015fana kadar ba\u015flamamas\u0131n\u0131 sa\u011flar. Ana bilgisayar\u0131n 80 portunu konteynerin 80 portuna e\u015fler. Ortam de\u011fi\u015fkenleri ile WordPress&#8217;in veritaban\u0131 ba\u011flant\u0131 bilgilerini yap\u0131land\u0131r\u0131r. <code>wordpress_data<\/code> ad\u0131nda bir birim kullanarak WordPress dosyalar\u0131n\u0131n kal\u0131c\u0131 olmas\u0131n\u0131 sa\u011flar.<\/li>\n<\/ul>\n<p><code>volumes<\/code> b\u00f6l\u00fcm\u00fc, veritaban\u0131 ve WordPress dosyalar\u0131 i\u00e7in kal\u0131c\u0131 depolama alanlar\u0131 tan\u0131mlar. Bu sayede konteynerler silinse bile verileriniz kaybolmaz.<\/p>\n<h4>3. Uygulamay\u0131 Ba\u015flatma<\/h4>\n<p><code>docker-compose.yml<\/code> dosyas\u0131n\u0131 kaydettikten sonra, t\u00fcm uygulamay\u0131 tek bir komutla ba\u015flatabilirsiniz:<\/p>\n<div class=\"code-container\">\n<pre><code>docker compose up -d<\/code><\/pre>\n<\/div>\n<p>Bu komut, <code>db<\/code> ve <code>wordpress<\/code> servislerinin imajlar\u0131n\u0131 \u00e7ekecek (e\u011fer yerelde yoksa), konteynerleri olu\u015fturacak, a\u011flar\u0131 yap\u0131land\u0131racak ve arka planda (<code>-d<\/code>) \u00e7al\u0131\u015ft\u0131racakt\u0131r. Birka\u00e7 dakika i\u00e7inde WordPress siteniz haz\u0131r olacakt\u0131r. Taray\u0131c\u0131n\u0131zdan Debian sunucunuzun IP adresine veya <code>localhost<\/code>&#8216;a (e\u011fer yerel makinede \u00e7al\u0131\u015ft\u0131r\u0131yorsan\u0131z) giderek WordPress kurulum sihirbaz\u0131n\u0131 g\u00f6rebilirsiniz.<\/p>\n<h4>4. Konteynerleri Durdurma ve Silme<\/h4>\n<p>Uygulamay\u0131 durdurmak ve t\u00fcm servisleri kapatmak i\u00e7in:<\/p>\n<div class=\"code-container\">\n<pre><code>docker compose down<\/code><\/pre>\n<\/div>\n<p>Bu komut, <code>docker-compose.yml<\/code> dosyas\u0131nda tan\u0131mlanan t\u00fcm konteynerleri durdurur ve siler. Ancak, birimler (volumes) varsay\u0131lan olarak silinmez. Verileri de silmek isterseniz <code>-v<\/code> parametresini kullanabilirsiniz:<\/p>\n<div class=\"code-container\">\n<pre><code>docker compose down -v<\/code><\/pre>\n<\/div>\n<p>Docker Compose, \u00f6zellikle mikroservis tabanl\u0131 uygulamalar veya karma\u015f\u0131k geli\u015ftirme ortamlar\u0131 i\u00e7in vazge\u00e7ilmez bir ara\u00e7t\u0131r. Bir uygulaman\u0131n t\u00fcm ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 tek bir dosyada tan\u0131mlayarak, geli\u015ftirme ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerini b\u00fcy\u00fck \u00f6l\u00e7\u00fcde basitle\u015ftirir ve tutarl\u0131l\u0131k sa\u011flar. Bu sayede, ekiplerin daha h\u0131zl\u0131 ve daha verimli \u00e7al\u0131\u015fmas\u0131na olanak tan\u0131r.<\/p>\n<h2>\u0130leri D\u00fczey Docker Kullan\u0131m\u0131 ve En \u0130yi Uygulamalar<\/h2>\n<p>Docker&#8217;\u0131n temel kurulumunu ve basit uygulamalar\u0131n\u0131 \u00f6\u011frendikten sonra, \u015fimdi daha karma\u015f\u0131k senaryolar i\u00e7in ileri d\u00fczey Docker \u00f6zelliklerine ve en iyi uygulamalara g\u00f6z atal\u0131m. Bu bilgiler, Docker&#8217;\u0131 \u00fcretim ortamlar\u0131nda daha verimli, g\u00fcvenli ve y\u00f6netilebilir bir \u015fekilde kullanman\u0131za yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<h3>Docker A\u011flar\u0131 (Networking)<\/h3>\n<p>Konteynerler aras\u0131nda ve konteynerler ile ana bilgisayar aras\u0131nda ileti\u015fimi sa\u011flamak i\u00e7in Docker \u00e7e\u015fitli a\u011f s\u00fcr\u00fcc\u00fcleri (network drivers) sunar:<\/p>\n<ul>\n<li><strong>Bridge (K\u00f6pr\u00fc) A\u011f\u0131:<\/strong> Varsay\u0131lan a\u011f s\u00fcr\u00fcc\u00fcs\u00fcd\u00fcr. Yeni olu\u015fturulan her konteyner, bu k\u00f6pr\u00fc a\u011f\u0131na ba\u011flan\u0131r ve kendi \u00f6zel IP adresini al\u0131r. Konteynerler bu a\u011f \u00fczerinden birbirleriyle ileti\u015fim kurabilir. D\u0131\u015far\u0131dan eri\u015fim i\u00e7in port e\u015fleme (<code>-p<\/code>) gereklidir.<\/li>\n<li><strong>Host (Ana Bilgisayar) A\u011f\u0131:<\/strong> Konteyner, a\u011f y\u0131\u011f\u0131n\u0131n\u0131 ana bilgisayarla payla\u015f\u0131r. Bu, konteynerin do\u011frudan ana bilgisayar\u0131n a\u011f aray\u00fczlerini kullanmas\u0131 anlam\u0131na gelir. Performans avantaj\u0131 sa\u011flayabilir ancak a\u011f izolasyonunu ortadan kald\u0131r\u0131r.<\/li>\n<li><strong>Overlay (Katmanl\u0131) A\u011f\u0131:<\/strong> Birden fazla Docker daemon&#8217;\u0131 (Swarm modu) aras\u0131nda \u00e7al\u0131\u015fan konteynerlerin ileti\u015fim kurmas\u0131n\u0131 sa\u011flar. Da\u011f\u0131t\u0131lm\u0131\u015f uygulamalar i\u00e7in kullan\u0131l\u0131r.<\/li>\n<li><strong>None (Yok) A\u011f\u0131:<\/strong> Konteyner i\u00e7in herhangi bir a\u011f aray\u00fcz\u00fc olu\u015fturulmaz. Konteyner tamamen izole olur ve d\u0131\u015f d\u00fcnyayla ileti\u015fim kuramaz.<\/li>\n<\/ul>\n<p>Kendi \u00f6zel bridge a\u011flar\u0131n\u0131z\u0131 olu\u015fturmak, uygulamalar\u0131n\u0131z i\u00e7in daha iyi izolasyon ve isim \u00e7\u00f6z\u00fcmlemesi (name resolution) sa\u011flar. \u00d6rne\u011fin, bir web uygulamas\u0131 ve veritaban\u0131 i\u00e7in \u00f6zel bir a\u011f olu\u015fturabilirsiniz:<\/p>\n<div class=\"code-container\">\n<pre><code>docker network create my-app-network\ndocker run --name my-db --network my-app-network -e MYSQL_ROOT_PASSWORD=secret -d mysql\ndocker run --name my-web --network my-app-network -p 80:80 -d nginx<\/code><\/pre>\n<\/div>\n<p>Bu senaryoda, <code>my-web<\/code> konteyneri, <code>my-db<\/code> konteynerine do\u011frudan <code>my-db<\/code> ismiyle eri\u015febilir, IP adresi bilmeye gerek kalmaz.<\/p>\n<h3>Docker Depolama (Storage)<\/h3>\n<p>Konteynerler varsay\u0131lan olarak durumsuz (stateless) ve ge\u00e7icidir. Bir konteyner silindi\u011finde, i\u00e7indeki t\u00fcm veriler de kaybolur. Verileri kal\u0131c\u0131 hale getirmek i\u00e7in Docker \u00e7e\u015fitli depolama se\u00e7enekleri sunar:<\/p>\n<ul>\n<li><strong>Volumes (Birimler):<\/strong> Docker taraf\u0131ndan y\u00f6netilen, ana bilgisayar\u0131n dosya sisteminde \u00f6zel olarak olu\u015fturulan veri alanlar\u0131d\u0131r. Konteynerler aras\u0131nda veri payla\u015f\u0131m\u0131 ve kal\u0131c\u0131 depolama i\u00e7in en \u00e7ok \u00f6nerilen y\u00f6ntemdir. Birimleri olu\u015fturmak ve konteynere ba\u011flamak kolayd\u0131r.<\/li>\n<li><strong>Bind Mounts (Ba\u011flama Noktalar\u0131):<\/strong> Ana bilgisayar\u0131n dosya sistemindeki belirli bir dizini veya dosyay\u0131 do\u011frudan bir konteynere ba\u011flar. Geli\u015ftirme s\u0131ras\u0131nda kod dosyalar\u0131n\u0131 konteyner ile senkronize etmek i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<\/li>\n<li><strong>Tmpfs Mounts:<\/strong> Konteynerin belle\u011finde ge\u00e7ici depolama alan\u0131 olu\u015fturur. Kal\u0131c\u0131 olmayan, hassas veriler veya performans gerektiren ge\u00e7ici dosyalar i\u00e7in idealdir.<\/li>\n<\/ul>\n<p>\u00d6rnek bir volume kullan\u0131m\u0131:<\/p>\n<div class=\"code-container\">\n<pre><code>docker volume create my-data\ndocker run -d --name my-app -v my-data:\/app\/data my-custom-image<\/code><\/pre>\n<\/div>\n<h3>Dockerfile Optimizasyonu ve En \u0130yi Uygulamalar<\/h3>\n<p>Etkili ve k\u00fc\u00e7\u00fck Docker imajlar\u0131 olu\u015fturmak i\u00e7in Dockerfile&#8217;\u0131n\u0131z\u0131 optimize etmek \u00f6nemlidir:<\/p>\n<ul>\n<li><strong>K\u00fc\u00e7\u00fck Temel \u0130majlar Kullan\u0131n:<\/strong> <code>alpine<\/code> veya <code>slim<\/code> etiketli imajlar (\u00f6rne\u011fin <code>python:3.9-alpine<\/code>) daha az yer kaplar ve g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 azalt\u0131r.<\/li>\n<li><strong>\u00c7ok A\u015famal\u0131 Derlemeler (Multi-Stage Builds):<\/strong> Uygulaman\u0131z\u0131 derlemek i\u00e7in bir a\u015fama, ard\u0131ndan nihai, daha k\u00fc\u00e7\u00fck bir \u00e7al\u0131\u015fma zaman\u0131 imaj\u0131 i\u00e7in ba\u015fka bir a\u015fama kullan\u0131n. Bu, derleme ara\u00e7lar\u0131n\u0131 ve ge\u00e7ici dosyalar\u0131 nihai imajdan d\u0131\u015far\u0131da b\u0131rak\u0131r.<\/li>\n<li><strong>Katman \u00d6nbellekleme (Layer Caching):<\/strong> Docker, her <code>RUN<\/code>, <code>COPY<\/code> veya <code>ADD<\/code> komutunu bir katman olarak \u00f6nbelle\u011fe al\u0131r. S\u0131k de\u011fi\u015fen komutlar\u0131 (\u00f6rne\u011fin uygulama kodunu kopyalama) Dockerfile&#8217;\u0131n alt k\u0131s\u0131mlar\u0131na yerle\u015ftirerek, daha az de\u011fi\u015fen ba\u011f\u0131ml\u0131l\u0131k katmanlar\u0131n\u0131n \u00f6nbellekten kullan\u0131lmas\u0131n\u0131 sa\u011flay\u0131n.<\/li>\n<li><strong>Gereksiz Ba\u011f\u0131ml\u0131l\u0131klar\u0131 Kald\u0131r\u0131n:<\/strong> \u0130maj\u0131n\u0131z\u0131 olu\u015fturduktan sonra art\u0131k ihtiyac\u0131n\u0131z olmayan paketleri ve ba\u011f\u0131ml\u0131l\u0131klar\u0131 temizleyin. \u00d6rne\u011fin, <code>apt clean<\/code> veya <code>rm -rf \/var\/lib\/apt\/lists\/*<\/code> gibi komutlar kullan\u0131n.<\/li>\n<li><strong>Root Olmayan Kullan\u0131c\u0131 Kullan\u0131n:<\/strong> G\u00fcvenlik nedeniyle, konteyner i\u00e7inde uygulamay\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in root olmayan bir kullan\u0131c\u0131 olu\u015fturun ve kullan\u0131n.<\/li>\n<\/ul>\n<h3>G\u00fcvenlik \u0130pu\u00e7lar\u0131<\/h3>\n<ul>\n<li><strong>Minimum Yetki Prensibi:<\/strong> Konteynerlerinize yaln\u0131zca ihtiya\u00e7 duyduklar\u0131 izinleri verin.<\/li>\n<li><strong>\u0130maj Tarama Ara\u00e7lar\u0131:<\/strong> G\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 tespit etmek i\u00e7in Docker imajlar\u0131n\u0131z\u0131 d\u00fczenli olarak taray\u0131n (\u00f6rne\u011fin Clair, Trivy).<\/li>\n<li><strong>G\u00fcncel \u0130majlar Kullan\u0131n:<\/strong> Temel imajlar\u0131n\u0131z\u0131 ve uygulama ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131z\u0131 d\u00fczenli olarak g\u00fcncelleyin.<\/li>\n<li><strong>Ortam De\u011fi\u015fkenlerinde Hassas Bilgileri Saklamay\u0131n:<\/strong> Veritaban\u0131 \u015fifreleri gibi hassas bilgileri Docker Secrets veya Kubernetes Secrets gibi ara\u00e7larla y\u00f6netin.<\/li>\n<\/ul>\n<p>Bu ileri d\u00fczey konular ve en iyi uygulamalar, Docker altyap\u0131n\u0131z\u0131 daha sa\u011flam, g\u00fcvenli ve performansl\u0131 hale getirmenize yard\u0131mc\u0131 olacakt\u0131r. Debian \u00fczerinde bu pratikleri uygulamak, kararl\u0131 ve g\u00fcvenilir bir temel \u00fczerinde modern bir konteyner ortam\u0131 olu\u015fturman\u0131z\u0131 sa\u011flar.<\/p>\n<h2>Sonu\u00e7: Gelece\u011fin Geli\u015ftirme Pratikleri \u0130\u00e7in Docker&#8217;\u0131 Benimseyin<\/h2>\n<p>Bu kapsaml\u0131 rehber boyunca, Debian i\u015fletim sistemi \u00fczerine Docker Engine&#8217;in nas\u0131l kurulaca\u011f\u0131n\u0131, temelden ileri d\u00fczeye kadar ad\u0131m ad\u0131m inceledik. Konteynerle\u015fmenin ne oldu\u011fundan, Docker&#8217;\u0131n temel bile\u015fenlerine, basit bir Nginx sunucusundan karma\u015f\u0131k bir WordPress uygulamas\u0131na kadar bir\u00e7ok pratik senaryoyu ele ald\u0131k. Ayr\u0131ca, Docker a\u011flar\u0131, depolama, Dockerfile optimizasyonu ve g\u00fcvenlik gibi ileri d\u00fczey konulara da de\u011finerek, Docker&#8217;\u0131 daha verimli ve g\u00fcvenli bir \u015fekilde kullanman\u0131za yard\u0131mc\u0131 olacak bilgiler sunduk.<\/p>\n<p>Docker, g\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen yaz\u0131l\u0131m d\u00fcnyas\u0131nda geli\u015ftiriciler ve operasyon ekipleri i\u00e7in vazge\u00e7ilmez bir ara\u00e7 haline gelmi\u015ftir. Uygulamalar\u0131n geli\u015ftirme, test ve \u00fcretim ortamlar\u0131 aras\u0131nda tutarl\u0131 bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flayarak &#8220;benim makinemde \u00e7al\u0131\u015f\u0131yor&#8221; sorununu ortadan kald\u0131r\u0131r. Bu tutarl\u0131l\u0131k, da\u011f\u0131t\u0131m s\u00fcre\u00e7lerini h\u0131zland\u0131r\u0131r, hata oranlar\u0131n\u0131 azalt\u0131r ve ekipler aras\u0131 i\u015f birli\u011fini geli\u015ftirir. Kaynak verimlili\u011fi sayesinde altyap\u0131 maliyetlerini d\u00fc\u015f\u00fcr\u00fcrken, mikroservis mimarileri i\u00e7in ideal bir platform sunarak daha esnek ve \u00f6l\u00e7eklenebilir sistemler in\u015fa etmenize olanak tan\u0131r. Debian gibi sa\u011flam ve g\u00fcvenilir bir i\u015fletim sistemi \u00fczerinde Docker kullanmak, bu avantajlar\u0131 sa\u011flam bir temel \u00fczerine in\u015fa etmek anlam\u0131na gelir.<\/p>\n<p>Art\u0131k Debian sunucunuzda Docker&#8217;\u0131 ba\u015far\u0131yla kurdu\u011funuza ve temel komutlara hakim oldu\u011funuza g\u00f6re, konteynerle\u015fme yolculu\u011funuzda bir sonraki ad\u0131mlar\u0131 atmaya haz\u0131rs\u0131n\u0131z. Kendi uygulamalar\u0131n\u0131z\u0131 konteynerle\u015ftirin, farkl\u0131 servisleri Docker Compose ile bir araya getirin ve DevOps pratiklerinizi Docker ile g\u00fc\u00e7lendirin. Unutmay\u0131n, Docker ekosistemi s\u00fcrekli geli\u015fiyor; bu y\u00fczden \u00f6\u011frenmeye ve yeni \u00f6zellikleri ke\u015ffetmeye devam edin. Konteynerle\u015fmenin g\u00fcc\u00fcyle, gelece\u011fin yaz\u0131l\u0131m geli\u015ftirme ve da\u011f\u0131t\u0131m pratiklerine \u015fimdiden adapte olmu\u015f olacaks\u0131n\u0131z.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<ol>\n<li>\n        <strong>Docker ve sanal makine aras\u0131ndaki temel fark nedir?<\/strong><\/p>\n<p>Temel fark, sanalla\u015ft\u0131rma seviyesindedir. Sanal makineler (VM&#8217;ler), ana bilgisayar\u0131n donan\u0131m\u0131n\u0131 sanalla\u015ft\u0131r\u0131r ve her bir VM, kendi tam i\u015fletim sistemine (kernel dahil) sahiptir. Bu, onlar\u0131 daha b\u00fcy\u00fck ve daha yava\u015f hale getirir. Docker konteynerleri ise ana bilgisayar\u0131n i\u015fletim sistemi \u00e7ekirde\u011fini payla\u015f\u0131r ve sadece uygulama ile ilgili ba\u011f\u0131ml\u0131l\u0131klar\u0131 i\u00e7erir. Bu, konteynerleri \u00e7ok daha hafif, h\u0131zl\u0131 ba\u015flat\u0131labilir ve kaynak a\u00e7\u0131s\u0131ndan daha verimli k\u0131lar.<\/p>\n<\/li>\n<li>\n        <strong>Debian&#8217;da Docker kurarken yayg\u0131n kar\u015f\u0131la\u015f\u0131lan sorunlar nelerdir ve nas\u0131l \u00e7\u00f6z\u00fcl\u00fcr?<\/strong><\/p>\n<p>En yayg\u0131n sorunlardan biri, kullan\u0131c\u0131 izinleri nedeniyle Docker komutlar\u0131n\u0131 <code>sudo<\/code> olmadan \u00e7al\u0131\u015ft\u0131ramamakt\u0131r. Bu, kullan\u0131c\u0131n\u0131z\u0131 <code>docker<\/code> grubuna ekleyip oturumu yeniden ba\u015flatarak \u00e7\u00f6z\u00fcl\u00fcr (<code>sudo usermod -aG docker $USER<\/code>). Di\u011fer bir sorun, eski Docker s\u00fcr\u00fcmlerinin kal\u0131nt\u0131lar\u0131n\u0131n yeni kurulumla \u00e7ak\u0131\u015fmas\u0131d\u0131r. Bu durumda, \u00f6nceki b\u00f6l\u00fcmde belirtildi\u011fi gibi eski paketleri ve <code>\/var\/lib\/docker<\/code> dizinini temizlemek gerekir. Ayr\u0131ca, yanl\u0131\u015f GPG anahtar\u0131 veya depo URL&#8217;si de kurulum hatalar\u0131na yol a\u00e7abilir; bu ad\u0131mlar\u0131 dikkatlice kontrol etmek \u00f6nemlidir.<\/p>\n<\/li>\n<li>\n        <strong>Docker imajlar\u0131n\u0131 nereden bulabilirim ve kendi imaj\u0131m\u0131 nas\u0131l olu\u015ftururum?<\/strong><\/p>\n<p>Docker imajlar\u0131n\u0131 genellikle Docker Hub&#8217;dan bulabilirsiniz (hub.docker.com). Burada binlerce resmi ve topluluk taraf\u0131ndan olu\u015fturulmu\u015f imaj mevcuttur. Kendi imaj\u0131n\u0131z\u0131 olu\u015fturmak i\u00e7in, uygulaman\u0131z\u0131n ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 ve \u00e7al\u0131\u015fma zaman\u0131 ad\u0131mlar\u0131n\u0131 tan\u0131mlayan bir <code>Dockerfile<\/code> yazman\u0131z gerekir. Ard\u0131ndan, <code>docker build -t my-custom-image .<\/code> komutunu kullanarak bu Dockerfile&#8217;dan bir imaj olu\u015fturabilirsiniz.<\/p>\n<\/li>\n<li>\n        <strong>Docker konteynerlerindeki verilerimi nas\u0131l kal\u0131c\u0131 hale getirebilirim?<\/strong><\/p>\n<p>Konteynerler ge\u00e7ici oldu\u011fu i\u00e7in, verileri kal\u0131c\u0131 hale getirmek i\u00e7in &#8220;volumes&#8221; (birimler) veya &#8220;bind mounts&#8221; (ba\u011flama noktalar\u0131) kullanman\u0131z gerekir. Volumes, Docker taraf\u0131ndan y\u00f6netilen depolama alanlar\u0131d\u0131r ve genellikle en \u00e7ok \u00f6nerilen y\u00f6ntemdir. Bind mounts ise ana bilgisayar\u0131n dosya sistemindeki belirli bir dizini do\u011frudan konteynere ba\u011flar. Her ikisi de <code>-v<\/code> parametresi ile <code>docker run<\/code> komutunda veya <code>docker-compose.yml<\/code> dosyas\u0131nda tan\u0131mlan\u0131r.<\/p>\n<\/li>\n<li>\n        <strong>\u00dcretim ortam\u0131nda Docker kullan\u0131rken nelere dikkat etmeliyim?<\/strong><\/p>\n<p>\u00dcretim ortam\u0131nda Docker kullan\u0131rken g\u00fcvenlik, performans ve y\u00f6netilebilirlik \u00f6n planda olmal\u0131d\u0131r. G\u00fcvenlik i\u00e7in, k\u00fc\u00e7\u00fck temel imajlar kullan\u0131n, root olmayan kullan\u0131c\u0131larla \u00e7al\u0131\u015ft\u0131r\u0131n, imajlar\u0131 taray\u0131n ve hassas bilgileri Docker Secrets gibi ara\u00e7larla y\u00f6netin. Performans i\u00e7in, Dockerfile&#8217;\u0131n\u0131z\u0131 optimize edin, yeterli kaynak tahsisi yap\u0131n ve uygun a\u011f s\u00fcr\u00fcc\u00fclerini kullan\u0131n. Y\u00f6netilebilirlik i\u00e7in, konteynerleri izlemek (monitoring), loglar\u0131 toplamak (logging) ve otomatik da\u011f\u0131t\u0131m (CI\/CD) s\u00fcre\u00e7lerini entegre etmek \u00f6nemlidir. Ayr\u0131ca, y\u00fcksek eri\u015filebilirlik ve \u00f6l\u00e7eklenebilirlik i\u00e7in Docker Swarm veya Kubernetes gibi konteyner orkestrasyon ara\u00e7lar\u0131n\u0131 de\u011ferlendirebilirsiniz.<\/p>\n<\/li>\n<\/ol>\n<p>#Docker #Debian #Konteynerle\u015fme #DevOps #Yaz\u0131l\u0131mGeli\u015ftirme #SistemY\u00f6netimi<\/p>\n<div class=\"github-example-link\"><strong>\u00d6rnek kod:<\/strong> <a href=\"https:\/\/github.com\/fatihsoysalcom\/run-simple-web-app-docker\" target=\"_blank\" rel=\"noopener noreferrer\">github.com\/fatihsoysalcom\/run-simple-web-app-docker<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"G\u00fcn\u00fcm\u00fcz yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinde kar\u015f\u0131la\u015f\u0131lan en b\u00fcy\u00fck zorluklardan biri, uygulamalar\u0131n farkl\u0131 ortamlarda (geli\u015ftirme, test, \u00fcretim) tutarl\u0131 bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flamakt\u0131r.","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":[241],"tags":[],"class_list":{"0":"post-44885","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-linux","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>Debian \u00dczerine Docker Kurulumu: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber - 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\/debian-uzerine-docker-kurulumu-adim-adim-kapsamli-rehber\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Debian \u00dczerine Docker Kurulumu: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber\" \/>\n<meta property=\"og:description\" content=\"G\u00fcn\u00fcm\u00fcz yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinde kar\u015f\u0131la\u015f\u0131lan en b\u00fcy\u00fck zorluklardan biri, uygulamalar\u0131n farkl\u0131 ortamlarda (geli\u015ftirme, test, \u00fcretim) tutarl\u0131 bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flamakt\u0131r.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/debian-uzerine-docker-kurulumu-adim-adim-kapsamli-rehber\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-25T06:05:29+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-25T06:06:24+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=\"27 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/debian-uzerine-docker-kurulumu-adim-adim-kapsamli-rehber\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/debian-uzerine-docker-kurulumu-adim-adim-kapsamli-rehber\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Debian \u00dczerine Docker Kurulumu: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber\",\"datePublished\":\"2026-09-25T06:05:29+00:00\",\"dateModified\":\"2026-09-25T06:06:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/debian-uzerine-docker-kurulumu-adim-adim-kapsamli-rehber\/\"},\"wordCount\":4938,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Linux\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/debian-uzerine-docker-kurulumu-adim-adim-kapsamli-rehber\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/debian-uzerine-docker-kurulumu-adim-adim-kapsamli-rehber\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/debian-uzerine-docker-kurulumu-adim-adim-kapsamli-rehber\/\",\"name\":\"Debian \u00dczerine Docker Kurulumu: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-09-25T06:05:29+00:00\",\"dateModified\":\"2026-09-25T06:06:24+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/debian-uzerine-docker-kurulumu-adim-adim-kapsamli-rehber\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/debian-uzerine-docker-kurulumu-adim-adim-kapsamli-rehber\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/debian-uzerine-docker-kurulumu-adim-adim-kapsamli-rehber\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Debian \u00dczerine Docker Kurulumu: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber\"}]},{\"@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":"Debian \u00dczerine Docker Kurulumu: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber - 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\/debian-uzerine-docker-kurulumu-adim-adim-kapsamli-rehber\/","og_locale":"tr_TR","og_type":"article","og_title":"Debian \u00dczerine Docker Kurulumu: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber","og_description":"G\u00fcn\u00fcm\u00fcz yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinde kar\u015f\u0131la\u015f\u0131lan en b\u00fcy\u00fck zorluklardan biri, uygulamalar\u0131n farkl\u0131 ortamlarda (geli\u015ftirme, test, \u00fcretim) tutarl\u0131 bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flamakt\u0131r.","og_url":"https:\/\/fatihsoysal.com\/blog\/debian-uzerine-docker-kurulumu-adim-adim-kapsamli-rehber\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-09-25T06:05:29+00:00","article_modified_time":"2026-09-25T06:06:24+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"27 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/debian-uzerine-docker-kurulumu-adim-adim-kapsamli-rehber\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/debian-uzerine-docker-kurulumu-adim-adim-kapsamli-rehber\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Debian \u00dczerine Docker Kurulumu: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber","datePublished":"2026-09-25T06:05:29+00:00","dateModified":"2026-09-25T06:06:24+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/debian-uzerine-docker-kurulumu-adim-adim-kapsamli-rehber\/"},"wordCount":4938,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Linux"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/debian-uzerine-docker-kurulumu-adim-adim-kapsamli-rehber\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/debian-uzerine-docker-kurulumu-adim-adim-kapsamli-rehber\/","url":"https:\/\/fatihsoysal.com\/blog\/debian-uzerine-docker-kurulumu-adim-adim-kapsamli-rehber\/","name":"Debian \u00dczerine Docker Kurulumu: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-09-25T06:05:29+00:00","dateModified":"2026-09-25T06:06:24+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/debian-uzerine-docker-kurulumu-adim-adim-kapsamli-rehber\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/debian-uzerine-docker-kurulumu-adim-adim-kapsamli-rehber\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/debian-uzerine-docker-kurulumu-adim-adim-kapsamli-rehber\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Debian \u00dczerine Docker Kurulumu: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber"}]},{"@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\/44885","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=44885"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/44885\/revisions"}],"predecessor-version":[{"id":44886,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/44885\/revisions\/44886"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=44885"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=44885"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=44885"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}