{"id":38099,"date":"2026-01-23T12:21:16","date_gmt":"2026-01-23T09:21:16","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/docker-nedir-ve-neden-ubuntuda-kullanmalisiniz-konteynerlesmenin-gucu\/"},"modified":"2026-01-23T12:21:16","modified_gmt":"2026-01-23T09:21:16","slug":"docker-nedir-ve-neden-ubuntuda-kullanmalisiniz-konteynerlesmenin-gucu","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/docker-nedir-ve-neden-ubuntuda-kullanmalisiniz-konteynerlesmenin-gucu\/","title":{"rendered":"Docker Nedir ve Neden Ubuntu&#8217;da Kullanmal\u0131s\u0131n\u0131z? Konteynerle\u015fmenin G\u00fcc\u00fc"},"content":{"rendered":"<h1>Ubuntu&#8217;ya Docker Kurulumu: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber<\/h1>\n<p>Modern yaz\u0131l\u0131m geli\u015ftirme ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinde devrim yaratan Docker, uygulamalar\u0131 izole edilmi\u015f, ta\u015f\u0131nabilir ve tutarl\u0131 ortamlarda \u00e7al\u0131\u015ft\u0131rman\u0131n anahtar\u0131d\u0131r. Peki, bu g\u00fc\u00e7l\u00fc arac\u0131 pop\u00fcler i\u015fletim sistemi Ubuntu&#8217;nuza nas\u0131l kurars\u0131n\u0131z? Bu kapsaml\u0131 rehberde, Docker&#8217;\u0131 Ubuntu sisteminize ad\u0131m ad\u0131m kurmay\u0131, temel komutlar\u0131 \u00f6\u011frenmeyi ve hatta ileri d\u00fczey kullan\u0131m ipu\u00e7lar\u0131n\u0131 ke\u015ffetmeyi \u00f6\u011freneceksiniz.<\/p>\n<h2>Docker Nedir ve Neden Ubuntu&#8217;da Kullanmal\u0131s\u0131n\u0131z? Konteynerle\u015fmenin G\u00fcc\u00fc<\/h2>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen teknoloji d\u00fcnyas\u0131nda, yaz\u0131l\u0131m geli\u015ftiricilerin ve sistem y\u00f6neticilerinin kar\u015f\u0131la\u015ft\u0131\u011f\u0131 en b\u00fcy\u00fck zorluklardan biri, uygulamalar\u0131n farkl\u0131 ortamlarda tutarl\u0131 bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flamakt\u0131r. &#8220;Benim makinemde \u00e7al\u0131\u015f\u0131yordu!&#8221; c\u00fcmlesi, bu sorunun klasik bir ifadesidir. \u0130\u015fte tam bu noktada Docker devreye girer. Docker, uygulamalar\u0131 ba\u011f\u0131ml\u0131l\u0131klar\u0131yla birlikte &#8220;konteyner&#8221; ad\u0131 verilen hafif, ta\u015f\u0131nabilir ve izole edilmi\u015f birimlerde paketlemeye yarayan a\u00e7\u0131k kaynakl\u0131 bir platformdur. Geleneksel sanal makinelerin (VM) aksine, Docker konteynerleri ana i\u015fletim sisteminin \u00e7ekirde\u011fini payla\u015f\u0131r. Bu sayede, VM&#8217;lere g\u00f6re \u00e7ok daha az kaynak t\u00fcketirler, daha h\u0131zl\u0131 ba\u015flarlar ve daha verimlidirler.<\/p>\n<p>Peki, Docker&#8217;\u0131 neden \u00f6zellikle Ubuntu&#8217;da kullanmal\u0131s\u0131n\u0131z? Ubuntu, sunucu ortamlar\u0131nda ve geli\u015ftirme i\u015f istasyonlar\u0131nda en yayg\u0131n kullan\u0131lan Linux da\u011f\u0131t\u0131mlar\u0131ndan biridir. Geni\u015f topluluk deste\u011fi, g\u00fcncel paket depolar\u0131 ve g\u00fc\u00e7l\u00fc komut sat\u0131r\u0131 ara\u00e7lar\u0131 sayesinde Docker ile m\u00fckemmel bir uyum i\u00e7indedir. Bir\u00e7ok geli\u015ftirici ve DevOps m\u00fchendisi, Ubuntu&#8217;yu hem yerel geli\u015ftirme ortam\u0131 olarak hem de bulut sunucular\u0131nda tercih eder. Bu durum, Docker&#8217;\u0131n Ubuntu \u00fczerinde kurulumunu ve y\u00f6netimini olduk\u00e7a kolay ve sorunsuz hale getirir. Ayr\u0131ca, Docker&#8217;\u0131n resmi dok\u00fcmantasyonu ve topluluk kaynaklar\u0131 genellikle Ubuntu odakl\u0131 \u00f6rnekler i\u00e7erir, bu da sorun giderme ve \u00f6\u011frenme s\u00fcre\u00e7lerini h\u0131zland\u0131r\u0131r. Konteynerle\u015fme sayesinde, geli\u015ftirme ortam\u0131n\u0131zda bir PHP uygulamas\u0131n\u0131, test ortam\u0131n\u0131zda bir Node.js uygulamas\u0131n\u0131 ve \u00fcretimde bir Python mikroservisini ayn\u0131 Ubuntu sunucusu \u00fczerinde, birbirlerini etkilemeden \u00e7al\u0131\u015ft\u0131rabilirsiniz. Bu esneklik, \u00f6zellikle karma\u015f\u0131k ve \u00e7ok dilli projelerde paha bi\u00e7ilmezdir.<\/p>\n<div class=\"case-study\">\n  <strong>Vaka Analizi: Mikroservis Mimarisine Ge\u00e7i\u015f<\/strong><\/p>\n<p>Bir e-ticaret \u015firketi, monolitik bir uygulamadan mikroservis mimarisine ge\u00e7i\u015f yapmaya karar verdi. Bu ge\u00e7i\u015f, farkl\u0131 programlama dillerinde yaz\u0131lm\u0131\u015f bir\u00e7ok ba\u011f\u0131ms\u0131z servisin (\u00f6deme, \u00fcr\u00fcn katalo\u011fu, kullan\u0131c\u0131 y\u00f6netimi vb.) bir arada \u00e7al\u0131\u015fmas\u0131n\u0131 gerektiriyordu. Her servisin kendine \u00f6zg\u00fc ba\u011f\u0131ml\u0131l\u0131klar\u0131 ve \u00e7al\u0131\u015fma zaman\u0131 gereksinimleri vard\u0131. Ubuntu sunucular\u0131nda Docker&#8217;\u0131 kullanarak, her mikroservisi kendi izole konteynerinde \u00e7al\u0131\u015ft\u0131rd\u0131lar. Bu yakla\u015f\u0131m, her servisin ba\u011f\u0131ms\u0131z olarak geli\u015ftirilmesini, test edilmesini ve da\u011f\u0131t\u0131lmas\u0131n\u0131 sa\u011flad\u0131. Ayr\u0131ca, kaynaklar\u0131 daha verimli kullanabildiler ve bir servisteki hata di\u011ferlerini etkilemeden izole edilebildi. Docker&#8217;\u0131n Ubuntu \u00fczerindeki tutarl\u0131 performans\u0131 ve kolay y\u00f6netilebilirli\u011fi, bu karma\u015f\u0131k ge\u00e7i\u015fin ba\u015far\u0131yla tamamlanmas\u0131nda kritik bir rol oynad\u0131.<\/p>\n<\/div>\n<h2>Docker Kurulumuna Ba\u015flamadan \u00d6nce: \u00d6n Haz\u0131rl\u0131klar ve Sistem Gereksinimleri<\/h2>\n<p>Herhangi bir yaz\u0131l\u0131m kurulumuna ba\u015flamadan \u00f6nce, sisteminizin gerekli \u00f6n ko\u015fullar\u0131 kar\u015f\u0131lad\u0131\u011f\u0131ndan emin olmak \u00f6nemlidir. Bu, potansiyel sorunlar\u0131 \u00f6nler ve kurulum s\u00fcrecini \u00e7ok daha p\u00fcr\u00fczs\u00fcz hale getirir. Ubuntu&#8217;ya Docker kurarken dikkat etmeniz gereken ilk ve en \u00f6nemli ad\u0131m, sisteminizi g\u00fcncel tutmakt\u0131r. G\u00fcncel olmayan paketler veya eski \u00e7ekirdek s\u00fcr\u00fcmleri, Docker&#8217;\u0131n d\u00fczg\u00fcn \u00e7al\u0131\u015fmas\u0131n\u0131 engelleyebilir veya g\u00fcvenlik a\u00e7\u0131klar\u0131 olu\u015fturabilir. Bu nedenle, terminali a\u00e7arak a\u015fa\u011f\u0131daki komutlar\u0131 \u00e7al\u0131\u015ft\u0131rmal\u0131s\u0131n\u0131z:<\/p>\n<pre><code>\nsudo apt update\nsudo apt upgrade -y\n<\/code><\/pre>\n<p>Bu komutlar, sisteminizdeki paket listelerini g\u00fcnceller ve mevcut t\u00fcm y\u00fckl\u00fc paketleri en son s\u00fcr\u00fcmlerine y\u00fckseltir. <code class=\"language-\">sudo apt upgrade -y<\/code> komutundaki <code class=\"language-\">-y<\/code> bayra\u011f\u0131, t\u00fcm y\u00fckseltme onay sorular\u0131na otomatik olarak &#8220;evet&#8221; yan\u0131t\u0131 vermenizi sa\u011flar. Bu i\u015flem biraz zaman alabilir, bu y\u00fczden sab\u0131rl\u0131 olun. Y\u00fckseltme tamamland\u0131ktan sonra, baz\u0131 durumlarda \u00e7ekirdek g\u00fcncellemeleri i\u00e7in sisteminizi yeniden ba\u015flatman\u0131z gerekebilir. E\u011fer \u00e7ekirdek g\u00fcncellendiyse, <code class=\"language-\">sudo reboot<\/code> komutu ile sisteminizi yeniden ba\u015flatman\u0131z \u015fiddetle tavsiye edilir.<\/p>\n<p>Docker kurulumu i\u00e7in bir di\u011fer \u00f6nemli \u00f6n haz\u0131rl\u0131k, daha \u00f6nce sisteminizde kurulu olabilecek eski Docker s\u00fcr\u00fcmlerini kald\u0131rmakt\u0131r. E\u011fer daha \u00f6nce Docker&#8217;\u0131n test veya beta s\u00fcr\u00fcmlerini denediyseniz veya farkl\u0131 bir kurulum y\u00f6ntemi kulland\u0131ysan\u0131z, bu eski paketler yeni kurulumla \u00e7ak\u0131\u015fabilir. Eski Docker paketlerini kald\u0131rmak i\u00e7in a\u015fa\u011f\u0131daki komutlar\u0131 kullanabilirsiniz:<\/p>\n<pre><code>\nfor pkg in docker.io docker-doc docker-compose docker-ce docker-ce-cli containerd.io docker-compose-plugin; do sudo apt remove $pkg; done\nsudo apt autoremove -y\n<\/code><\/pre>\n<p>Bu komutlar, bilinen t\u00fcm Docker ile ilgili paketleri sisteminizden kald\u0131r\u0131r ve ard\u0131ndan gereksiz ba\u011f\u0131ml\u0131l\u0131klar\u0131 temizler. Bu ad\u0131m\u0131 atlamak, \u00f6zellikle farkl\u0131 kaynaklardan y\u00fcklenmi\u015f Docker bile\u015fenleri varsa, beklenmedik hatalara yol a\u00e7abilir. Son olarak, Docker&#8217;\u0131n resmi deposunu ekleyebilmek ve g\u00fcvenli bir \u015fekilde paketleri indirebilmek i\u00e7in baz\u0131 temel ba\u011f\u0131ml\u0131l\u0131k paketlerine ihtiyac\u0131m\u0131z var. Bu paketler genellikle modern Ubuntu sistemlerinde mevcut olsa da, her ihtimale kar\u015f\u0131 kurmakta fayda var:<\/p>\n<pre><code>\nsudo apt install apt-transport-https ca-certificates curl gnupg lsb-release -y\n<\/code><\/pre>\n<p><code class=\"language-\">apt-transport-https<\/code> paketi, APT&#8217;nin HTTPS \u00fczerinden paket depolar\u0131na eri\u015fmesini sa\u011flar. <code class=\"language-\">ca-certificates<\/code> paketi, SSL\/TLS sertifikalar\u0131n\u0131 do\u011frulamak i\u00e7in gereklidir. <code class=\"language-\">curl<\/code>, URL&#8217;lerden veri transferi i\u00e7in kullan\u0131lan g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r ve <code class=\"language-\">gnupg<\/code> ise GPG anahtarlar\u0131n\u0131 y\u00f6netmek i\u00e7in kullan\u0131l\u0131r. <code class=\"language-\">lsb-release<\/code> ise i\u015fletim sistemi da\u011f\u0131t\u0131m bilgilerini sorgulamak i\u00e7in kullan\u0131l\u0131r ve Docker deposunu do\u011fru \u015fekilde yap\u0131land\u0131rmak i\u00e7in gereklidir. T\u00fcm bu \u00f6n haz\u0131rl\u0131k ad\u0131mlar\u0131n\u0131 tamamlad\u0131ktan sonra, Docker Engine&#8217;in Ubuntu sisteminize sorunsuz bir \u015fekilde kurulmas\u0131na haz\u0131rs\u0131n\u0131z demektir.<\/p>\n<div class=\"expert-tip\">\n  Uzman \u0130pucu: Sisteminizin g\u00fcncel olmas\u0131 ve eski Docker bile\u015fenlerinin temizlenmesi, olas\u0131 uyumluluk sorunlar\u0131n\u0131n \u00f6n\u00fcne ge\u00e7menin ve g\u00fcvenli bir kurulum sa\u011flaman\u0131n ilk ve en kritik ad\u0131m\u0131d\u0131r. Bu ad\u0131mlar\u0131 atlamak, ileride zaman kaybettirici sorunlara yol a\u00e7abilir.\n<\/div>\n<h2>Ubuntu&#8217;ya Docker Engine Nas\u0131l Kurulur? Resmi Y\u00f6ntem Ad\u0131m Ad\u0131m<\/h2>\n<p>Docker&#8217;\u0131 Ubuntu&#8217;ya kurman\u0131n en g\u00fcvenli ve \u00f6nerilen yolu, Docker&#8217;\u0131n resmi deposunu kullanmakt\u0131r. Bu y\u00f6ntem, her zaman en g\u00fcncel ve kararl\u0131 Docker s\u00fcr\u00fcm\u00fcn\u00fc alman\u0131z\u0131 sa\u011flar. \u0130\u015fte ad\u0131m ad\u0131m kurulum s\u00fcreci:<\/p>\n<h3>1. Docker&#8217;\u0131n Resmi GPG Anahtar\u0131n\u0131 Ekleme<\/h3>\n<p>G\u00fcvenlik nedeniyle, indirilen paketlerin orijinalli\u011fini do\u011frulamak i\u00e7in Docker&#8217;\u0131n resmi GPG anahtar\u0131n\u0131 sisteminize eklemeniz gerekir. Bu, indirdi\u011finiz paketlerin ger\u00e7ekten Docker taraf\u0131ndan yay\u0131nland\u0131\u011f\u0131n\u0131 ve de\u011fi\u015ftirilmedi\u011fini garanti eder.<\/p>\n<pre><code>\ncurl -fsSL https:\/\/download.docker.com\/linux\/ubuntu\/gpg | sudo gpg --dearmor -o \/usr\/share\/keyrings\/docker-archive-keyring.gpg\n<\/code><\/pre>\n<p>Bu komut, <code class=\"language-\">curl<\/code> kullanarak Docker&#8217;\u0131n GPG anahtar\u0131n\u0131 indirir ve <code class=\"language-\">gpg --dearmor<\/code> ile anahtar\u0131 uygun bir formata d\u00f6n\u00fc\u015ft\u00fcrerek <code class=\"language-\">\/usr\/share\/keyrings\/docker-archive-keyring.gpg<\/code> konumuna kaydeder. <code class=\"language-\">sudo<\/code> kullanmam\u0131z\u0131n nedeni, bu dizinin k\u00f6k kullan\u0131c\u0131 yetkileri gerektirmesidir. Bu anahtar, daha sonra ekleyece\u011fimiz Docker deposundan gelen paketlerin do\u011frulanmas\u0131nda kullan\u0131lacakt\u0131r.<\/p>\n<h3>2. Docker Deposunu APT Kaynaklar\u0131na Ekleme<\/h3>\n<p>GPG anahtar\u0131n\u0131 ekledikten sonra, APT paket y\u00f6neticinizin Docker paketlerini nereden indirece\u011fini bilmesi i\u00e7in Docker deposunu sisteminize eklemelisiniz. Bu ad\u0131m, Ubuntu s\u00fcr\u00fcm\u00fcn\u00fcze ve sistem mimarinize uygun Docker paketlerini alman\u0131z\u0131 sa\u011flar.<\/p>\n<pre><code>\necho \"deb [arch=$(dpkg --print-architecture) signed-by=\/usr\/share\/keyrings\/docker-archive-keyring.gpg] https:\/\/download.docker.com\/linux\/ubuntu $(lsb_release -cs) stable\" | sudo tee \/etc\/apt\/sources.list.d\/docker.list > \/dev\/null\n<\/code><\/pre>\n<p>Bu karma\u015f\u0131k g\u00f6r\u00fcnen komut asl\u0131nda olduk\u00e7a basittir:<\/p>\n<ul>\n<li><code class=\"language-\">$(dpkg --print-architecture)<\/code>: Sisteminizin mimarisini (\u00f6rne\u011fin, <code class=\"language-\">amd64<\/code> veya <code class=\"language-\">arm64<\/code>) otomatik olarak alg\u0131lar.<\/li>\n<li><code class=\"language-\">signed-by=\/usr\/share\/keyrings\/docker-archive-keyring.gpg<\/code>: Depodan indirilecek paketlerin, daha \u00f6nce ekledi\u011fimiz GPG anahtar\u0131 ile imzalanm\u0131\u015f olmas\u0131 gerekti\u011fini belirtir.<\/li>\n<li><code class=\"language-\">https:\/\/download.docker.com\/linux\/ubuntu<\/code>: Docker&#8217;\u0131n Ubuntu i\u00e7in resmi deposunun URL&#8217;sidir.<\/li>\n<li><code class=\"language-\">$(lsb_release -cs)<\/code>: Ubuntu s\u00fcr\u00fcm\u00fcn\u00fcz\u00fcn kod ad\u0131n\u0131 (\u00f6rne\u011fin, <code class=\"language-\">focal<\/code> veya <code class=\"language-\">jammy<\/code>) otomatik olarak alg\u0131lar. Bu, do\u011fru depoyu hedeflememizi sa\u011flar.<\/li>\n<li><code class=\"language-\">stable<\/code>: Kararl\u0131 (stable) Docker s\u00fcr\u00fcm\u00fcn\u00fc kullanaca\u011f\u0131m\u0131z\u0131 belirtir. \u0130sterseniz <code class=\"language-\">test<\/code> veya <code class=\"language-\">nightly<\/code> gibi ba\u015fka kanallar\u0131 da kullanabilirsiniz, ancak genellikle <code class=\"language-\">stable<\/code> tercih edilir.<\/li>\n<li><code class=\"language-\">sudo tee \/etc\/apt\/sources.list.d\/docker.list<\/code>: Bu sat\u0131r\u0131 <code class=\"language-\">\/etc\/apt\/sources.list.d\/docker.list<\/code> dosyas\u0131na yazar. Bu dosya, APT&#8217;nin ek paket depolar\u0131n\u0131 tan\u0131mlad\u0131\u011f\u0131 yerdir.<\/li>\n<li><code class=\"language-\">> \/dev\/null<\/code>: <code class=\"language-\">tee<\/code> komutunun \u00e7\u0131kt\u0131s\u0131n\u0131 terminalde g\u00f6stermemesini sa\u011flar.<\/li>\n<\/ul>\n<h3>3. APT Paket Listesini G\u00fcncelleme<\/h3>\n<p>Yeni depoyu ekledikten sonra, APT&#8217;nin bu depoyu tan\u0131mas\u0131 ve paket listesini g\u00fcncellemesi gerekir:<\/p>\n<pre><code>\nsudo apt update\n<\/code><\/pre>\n<p>Bu komut, yeni ekledi\u011finiz Docker deposundaki paket bilgilerini de indirir ve yerel paket \u00f6nbelle\u011finizi g\u00fcnceller.<\/p>\n<h3>4. Docker Engine&#8217;i Kurma<\/h3>\n<p>Art\u0131k Docker Engine&#8217;i ve ilgili bile\u015fenleri kurmaya haz\u0131rs\u0131n\u0131z. A\u015fa\u011f\u0131daki komut, Docker Engine, CLI (Komut Sat\u0131r\u0131 Aray\u00fcz\u00fc), containerd (konteyner \u00e7al\u0131\u015fma zaman\u0131) ve Docker Compose eklentisini kuracakt\u0131r:<\/p>\n<pre><code>\nsudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y\n<\/code><\/pre>\n<p>Bu komut, Docker ekosisteminin temel bile\u015fenlerini sisteminize kurar. <code class=\"language-\">docker-ce<\/code> Docker Engine&#8217;in kendisidir (Community Edition), <code class=\"language-\">docker-ce-cli<\/code> Docker komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in kullan\u0131lan komut sat\u0131r\u0131 aray\u00fcz\u00fcd\u00fcr, <code class=\"language-\">containerd.io<\/code> konteynerleri y\u00f6neten d\u00fc\u015f\u00fck seviyeli bir \u00e7al\u0131\u015fma zaman\u0131d\u0131r ve <code class=\"language-\">docker-compose-plugin<\/code> ise Docker Compose&#8217;un yeni nesil versiyonudur.<\/p>\n<h3>5. Kurulumu Do\u011frulama<\/h3>\n<p>Kurulumun ba\u015far\u0131l\u0131 olup olmad\u0131\u011f\u0131n\u0131 kontrol etmek i\u00e7in Docker servisinin durumunu kontrol edebilir ve bir test konteyneri \u00e7al\u0131\u015ft\u0131rabilirsiniz:<\/p>\n<pre><code>\nsudo systemctl status docker\n<\/code><\/pre>\n<p>Bu komut, Docker servisinin aktif (running) olup olmad\u0131\u011f\u0131n\u0131 g\u00f6sterir. \u00c7\u0131kt\u0131da <code class=\"language-\">Active: active (running)<\/code> ifadesini g\u00f6rmelisiniz. Ard\u0131ndan, Docker&#8217;\u0131n do\u011fru \u015fekilde \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 test etmek i\u00e7in &#8220;hello-world&#8221; imaj\u0131n\u0131 \u00e7al\u0131\u015ft\u0131ral\u0131m:<\/p>\n<pre><code>\nsudo docker run hello-world\n<\/code><\/pre>\n<p>E\u011fer her \u015fey yolundaysa, bu komut Docker&#8217;\u0131n &#8220;hello-world&#8221; imaj\u0131n\u0131 indirir (e\u011fer yoksa) ve bir konteyner i\u00e7inde \u00e7al\u0131\u015ft\u0131r\u0131r. Terminalde &#8220;Hello from Docker!&#8221; mesaj\u0131n\u0131 i\u00e7eren bir \u00e7\u0131kt\u0131 g\u00f6rmelisiniz. Bu mesaj, Docker kurulumunuzun ba\u015far\u0131yla tamamland\u0131\u011f\u0131n\u0131 g\u00f6sterir. Art\u0131k Ubuntu sisteminizde Docker&#8217;\u0131 kullanmaya haz\u0131rs\u0131n\u0131z!<\/p>\n<h3>Kullan\u0131c\u0131y\u0131 Docker Grubuna Ekleme: sudo Kullanmadan Docker \u00c7al\u0131\u015ft\u0131rma<\/h3>\n<p>Yukar\u0131daki ad\u0131mlar\u0131 tamamlad\u0131ktan sonra Docker komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in her seferinde <code class=\"language-\">sudo<\/code> kullanmak zorunda kalacaks\u0131n\u0131z. Bu, geli\u015ftirme s\u00fcre\u00e7lerinde veya s\u0131k kullan\u0131lan komutlarda pratik olmayabilir. <code class=\"language-\">sudo<\/code> kullanmadan Docker komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rabilmek i\u00e7in, mevcut kullan\u0131c\u0131n\u0131z\u0131 <code class=\"language-\">docker<\/code> grubuna eklemeniz gerekir. Docker kurulumu s\u0131ras\u0131nda otomatik olarak <code class=\"language-\">docker<\/code> ad\u0131nda bir Unix grubu olu\u015fturulur ve bu gruba ait kullan\u0131c\u0131lar, Docker daemon&#8217;u ile do\u011frudan etkile\u015fime girebilir.<\/p>\n<p>Kullan\u0131c\u0131n\u0131z\u0131 <code class=\"language-\">docker<\/code> grubuna eklemek i\u00e7in a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code>\nsudo usermod -aG docker $USER\n<\/code><\/pre>\n<p>Burada:<\/p>\n<ul>\n<li><code class=\"language-\">sudo usermod<\/code>: Bir kullan\u0131c\u0131n\u0131n \u00f6zelliklerini de\u011fi\u015ftirmek i\u00e7in kullan\u0131lan komuttur.<\/li>\n<li><code class=\"language-\">-aG<\/code>: Kullan\u0131c\u0131y\u0131 belirtilen gruba ekler (<code class=\"language-\">-a<\/code> append, <code class=\"language-\">-G<\/code> group).<\/li>\n<li><code class=\"language-\">docker<\/code>: Kullan\u0131c\u0131n\u0131n eklenece\u011fi grubun ad\u0131d\u0131r.<\/li>\n<li><code class=\"language-\">$USER<\/code>: Mevcut oturum a\u00e7m\u0131\u015f kullan\u0131c\u0131n\u0131z\u0131n ad\u0131n\u0131 otomatik olarak al\u0131r.<\/li>\n<\/ul>\n<p>Bu komutu \u00e7al\u0131\u015ft\u0131rd\u0131ktan sonra, de\u011fi\u015fikli\u011fin etkili olmas\u0131 i\u00e7in oturumu kapat\u0131p tekrar a\u00e7man\u0131z veya a\u015fa\u011f\u0131daki komutu kullanarak grup \u00fcyeli\u011finizi yenilemeniz gerekir:<\/p>\n<pre><code>\nnewgrp docker\n<\/code><\/pre>\n<p>Art\u0131k <code class=\"language-\">sudo<\/code> kullanmadan Docker komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rabilmelisiniz. Bunu test etmek i\u00e7in tekrar <code class=\"language-\">hello-world<\/code> konteynerini \u00e7al\u0131\u015ft\u0131rabilirsiniz:<\/p>\n<pre><code>\ndocker run hello-world\n<\/code><\/pre>\n<p>E\u011fer hala <code class=\"language-\">sudo<\/code> hatas\u0131 al\u0131yorsan\u0131z, sisteminizi tamamen yeniden ba\u015flatman\u0131z gerekebilir. Bu ad\u0131m, Docker ile daha rahat ve verimli bir \u00e7al\u0131\u015fma deneyimi i\u00e7in olduk\u00e7a \u00f6nemlidir.<\/p>\n<h2>Docker ile \u00c7al\u0131\u015fmaya Ba\u015flama: Temel Komutlar ve \u0130lk Konteyneriniz<\/h2>\n<p>Docker&#8217;\u0131 ba\u015far\u0131yla kurdu\u011funuza g\u00f6re, art\u0131k konteyner d\u00fcnyas\u0131na ilk ad\u0131mlar\u0131n\u0131z\u0131 atabilirsiniz. Docker ile etkile\u015fim kurmak i\u00e7in kullan\u0131lan temel komutlar, imajlar\u0131 indirme, konteynerleri \u00e7al\u0131\u015ft\u0131rma, listeleme, durdurma ve silme gibi i\u015flemleri kapsar. Bu b\u00f6l\u00fcmde, Docker&#8217;\u0131n temel komutlar\u0131n\u0131 ve nas\u0131l kullan\u0131lacaklar\u0131n\u0131 pratik \u00f6rneklerle \u00f6\u011frenece\u011fiz.<\/p>\n<h3>1. Docker \u0130majlar\u0131n\u0131 \u00c7ekme (Pull)<\/h3>\n<p>Bir konteyner \u00e7al\u0131\u015ft\u0131rmadan \u00f6nce, ona temel olu\u015fturacak bir &#8220;imaj&#8221;a ihtiyac\u0131n\u0131z vard\u0131r. Docker imajlar\u0131, bir uygulaman\u0131n \u00e7al\u0131\u015fmas\u0131 i\u00e7in gerekli t\u00fcm kod, \u00e7al\u0131\u015fma zaman\u0131, sistem ara\u00e7lar\u0131, k\u00fct\u00fcphaneler ve ayarlar\u0131 i\u00e7eren salt okunur \u015fablonlard\u0131r. \u0130majlar\u0131 genellikle Docker Hub gibi herkese a\u00e7\u0131k depolardan \u00e7ekeriz.<\/p>\n<pre><code>\ndocker pull ubuntu:latest\n<\/code><\/pre>\n<p>Bu komut, Docker Hub&#8217;dan en son Ubuntu i\u015fletim sistemi imaj\u0131n\u0131 indirir. <code class=\"language-\">:latest<\/code> etiketi, imaj\u0131n en g\u00fcncel s\u00fcr\u00fcm\u00fcn\u00fc ifade eder. Farkl\u0131 bir s\u00fcr\u00fcm \u00e7ekmek isterseniz, \u00f6rne\u011fin <code class=\"language-\">ubuntu:20.04<\/code> gibi bir etiket belirtebilirsiniz. \u0130maj indirme i\u015flemi, internet h\u0131z\u0131n\u0131za ba\u011fl\u0131 olarak biraz zaman alabilir.<\/p>\n<h3>2. Konteyner \u00c7al\u0131\u015ft\u0131rma (Run)<\/h3>\n<p>Bir imaj\u0131 indirdikten sonra, bu imajdan bir veya daha fazla &#8220;konteyner&#8221; olu\u015fturup \u00e7al\u0131\u015ft\u0131rabilirsiniz. Konteyner, imaj\u0131n \u00e7al\u0131\u015ft\u0131r\u0131labilir bir \u00f6rne\u011fidir. A\u015fa\u011f\u0131daki komut, indirdi\u011fimiz Ubuntu imaj\u0131ndan bir konteyner ba\u015flat\u0131r ve i\u00e7inde interaktif bir kabuk (shell) a\u00e7ar:<\/p>\n<pre><code>\ndocker run -it ubuntu \/bin\/bash\n<\/code><\/pre>\n<p>Bu komuttaki parametreleri inceleyelim:<\/p>\n<ul>\n<li><code class=\"language-\">-i<\/code>: \u0130nteraktif (interactive) modu etkinle\u015ftirir, b\u00f6ylece konteynerin standart giri\u015fini a\u00e7\u0131k tutar.<\/li>\n<li><code class=\"language-\">-t<\/code>: Bir sahte TTY (terminal) tahsis eder. Bu iki parametre (<code class=\"language-\">-it<\/code>), konteyner i\u00e7inde bir kabuk a\u00e7\u0131p komutlar\u0131 girmenizi sa\u011flar.<\/li>\n<li><code class=\"language-\">ubuntu<\/code>: \u00c7al\u0131\u015ft\u0131r\u0131lacak imaj\u0131n ad\u0131d\u0131r.<\/li>\n<li><code class=\"language-\">\/bin\/bash<\/code>: Konteyner ba\u015flat\u0131ld\u0131\u011f\u0131nda \u00e7al\u0131\u015ft\u0131r\u0131lacak komuttur. Bu durumda, Ubuntu konteynerinin i\u00e7inde bir Bash kabu\u011fu a\u00e7ar.<\/li>\n<\/ul>\n<p>Bu komutu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda, terminaliniz konteynerin kabu\u011funa ge\u00e7ecek ve komut istemi de\u011fi\u015fecektir (\u00f6rne\u011fin, <code class=\"language-\">root@<konteyner_id>:\/#<\/code>). Art\u0131k bu konteyner i\u00e7inde Ubuntu&#8217;ya \u00f6zg\u00fc komutlar\u0131 \u00e7al\u0131\u015ft\u0131rabilirsiniz. Konteynerden \u00e7\u0131kmak i\u00e7in <code class=\"language-\">exit<\/code> yaz\u0131p Enter tu\u015funa basman\u0131z yeterlidir. Konteynerden \u00e7\u0131kt\u0131\u011f\u0131n\u0131zda, konteyner otomatik olarak durdurulur.<\/p>\n<h3>3. \u00c7al\u0131\u015fan ve Durmu\u015f Konteynerleri Listeleme (ps)<\/h3>\n<p>Hangi konteynerlerin \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 veya daha \u00f6nce \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131\u011f\u0131n\u0131 g\u00f6rmek i\u00e7in <code class=\"language-\">docker ps<\/code> komutunu kullanabilirsiniz:<\/p>\n<pre><code>\ndocker ps          # Sadece \u00e7al\u0131\u015fan konteynerleri listeler\ndocker ps -a       # T\u00fcm konteynerleri (\u00e7al\u0131\u015fan ve durmu\u015f) listeler\n<\/code><\/pre>\n<p><code class=\"language-\">docker ps -a<\/code> \u00e7\u0131kt\u0131s\u0131nda, her konteynerin ID&#8217;si, kulland\u0131\u011f\u0131 imaj, \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131 komut, olu\u015fturulma zaman\u0131, durumu ve rastgele atanan bir ad\u0131 gibi bilgiler yer al\u0131r.<\/p>\n<h3>4. Konteynerleri Durdurma (Stop)<\/h3>\n<p>\u00c7al\u0131\u015fan bir konteyneri durdurmak i\u00e7in konteyner ID&#8217;sini veya ad\u0131n\u0131 kullanabilirsiniz:<\/p>\n<pre><code>\ndocker stop <konteyner_id_veya_ad\u0131>\n<\/code><\/pre>\n<p>\u00d6rne\u011fin, <code class=\"language-\">docker ps<\/code> \u00e7\u0131kt\u0131s\u0131nda <code class=\"language-\">upbeat_shannon<\/code> ad\u0131nda bir konteyneriniz varsa, <code class=\"language-\">docker stop upbeat_shannon<\/code> komutunu kullanabilirsiniz.<\/p>\n<h3>5. Konteynerleri Silme (Remove)<\/h3>\n<p>Durdurulmu\u015f bir konteyneri sisteminizden kald\u0131rmak i\u00e7in <code class=\"language-\">docker rm<\/code> komutunu kullan\u0131n:<\/p>\n<pre><code>\ndocker rm <konteyner_id_veya_ad\u0131>\n<\/code><\/pre>\n<p>E\u011fer \u00e7al\u0131\u015fan bir konteyneri silmeye \u00e7al\u0131\u015f\u0131rsan\u0131z, Docker size hata verecektir. \u00d6nce konteyneri durdurman\u0131z veya <code class=\"language-\">-f<\/code> (force) bayra\u011f\u0131n\u0131 kullanarak zorla silmeniz gerekir (ancak bu genellikle \u00f6nerilmez): <code class=\"language-\">docker rm -f <konteyner_id_veya_ad\u0131><\/code>.<\/p>\n<h3>6. \u0130majlar\u0131 Silme (Rmi)<\/h3>\n<p>\u0130htiya\u00e7 duymad\u0131\u011f\u0131n\u0131z imajlar\u0131 sisteminizden kald\u0131rmak i\u00e7in <code class=\"language-\">docker rmi<\/code> komutunu kullanabilirsiniz:<\/p>\n<pre><code>\ndocker rmi ubuntu:latest\n<\/code><\/pre>\n<p>Bir imaj\u0131 silmeden \u00f6nce, o imajdan olu\u015fturulmu\u015f hi\u00e7bir konteynerin \u00e7al\u0131\u015fmad\u0131\u011f\u0131ndan veya var olmad\u0131\u011f\u0131ndan emin olmal\u0131s\u0131n\u0131z. Aksi takdirde, Docker imaj\u0131 silmenize izin vermeyecektir.<\/p>\n<div class=\"expert-tip\">\n  Uzman \u0130pucu: Docker komutlar\u0131n\u0131 \u00f6\u011frenirken, her komutun ne i\u015fe yarad\u0131\u011f\u0131n\u0131 ve hangi parametreleri ald\u0131\u011f\u0131n\u0131 anlamak i\u00e7in <code class=\"language-\">docker <komut> --help<\/code> komutunu kullanmaktan \u00e7ekinmeyin. \u00d6rne\u011fin, <code class=\"language-\">docker run --help<\/code> size <code class=\"language-\">run<\/code> komutu hakk\u0131nda detayl\u0131 bilgi verecektir. Bu, \u00f6\u011frenme s\u00fcrecinizi h\u0131zland\u0131racakt\u0131r.\n<\/div>\n<h2>Docker Compose ile \u00c7oklu Konteyner Uygulamalar\u0131n\u0131 Y\u00f6netme<\/h2>\n<p>Ger\u00e7ek d\u00fcnya uygulamalar\u0131 genellikle tek bir konteynerden olu\u015fmaz; bir web sunucusu, bir veritaban\u0131, bir \u00f6nbellek servisi ve belki de bir mesaj kuyru\u011fu gibi birden fazla servisin bir araya gelmesiyle \u00e7al\u0131\u015f\u0131r. Bu t\u00fcr \u00e7oklu konteyner uygulamalar\u0131n\u0131 manuel olarak y\u00f6netmek (her bir konteyneri ayr\u0131 ayr\u0131 ba\u015flatmak, a\u011flar\u0131n\u0131 yap\u0131land\u0131rmak vb.) olduk\u00e7a zahmetli ve hataya a\u00e7\u0131k bir s\u00fcre\u00e7tir. \u0130\u015fte bu noktada Docker Compose devreye girer. Docker Compose, birden fazla Docker konteynerini i\u00e7eren uygulamalar\u0131 tan\u0131mlamak ve \u00e7al\u0131\u015ft\u0131rmak i\u00e7in kullan\u0131lan bir ara\u00e7t\u0131r. Tek bir YAML dosyas\u0131 (<code class=\"language-\">docker-compose.yml<\/code>) kullanarak uygulaman\u0131z\u0131n t\u00fcm servislerini, a\u011flar\u0131n\u0131 ve volume&#8217;lerini yap\u0131land\u0131rabilir ve tek bir komutla (<code>docker compose up<\/code>) t\u00fcm uygulamay\u0131 ba\u015flatabilirsiniz.<\/p>\n<p>Docker Compose&#8217;un temel avantajlar\u0131 \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>Kolay Tan\u0131mlama<\/strong>: T\u00fcm uygulama y\u0131\u011f\u0131n\u0131n\u0131z\u0131 tek bir YAML dosyas\u0131nda tan\u0131mlayarak karma\u015f\u0131kl\u0131\u011f\u0131 azalt\u0131r.<\/li>\n<li><strong>Tek Komutla Ba\u015flatma<\/strong>: T\u00fcm servisleri tek bir komutla ba\u015flatabilir, durdurabilir ve yeniden olu\u015fturabilirsiniz.<\/li>\n<li><strong>\u0130zole Ortamlar<\/strong>: Her servis kendi konteynerinde \u00e7al\u0131\u015f\u0131r ve varsay\u0131lan olarak birbirleriyle ileti\u015fim kurabilirler.<\/li>\n<li><strong>Ta\u015f\u0131nabilirlik<\/strong>: <code class=\"language-\">docker-compose.yml<\/code> dosyas\u0131, uygulaman\u0131z\u0131n farkl\u0131 ortamlarda (geli\u015ftirme, test, \u00fcretim) tutarl\u0131 bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar.<\/li>\n<\/ul>\n<p>\u015eimdi, basit bir Nginx web sunucusu ve PostgreSQL veritaban\u0131ndan olu\u015fan bir uygulamay\u0131 Docker Compose ile nas\u0131l y\u00f6netece\u011fimize dair bir \u00f6rnek olu\u015ftural\u0131m. \u0130lk olarak, projeniz i\u00e7in bir dizin olu\u015fturun ve i\u00e7ine <code class=\"language-\">docker-compose.yml<\/code> ad\u0131nda bir dosya yarat\u0131n:<\/p>\n<pre><code>\nmkdir my_web_app\ncd my_web_app\ntouch docker-compose.yml\n<\/code><\/pre>\n<p>Ard\u0131ndan, <code class=\"language-\">docker-compose.yml<\/code> dosyas\u0131n\u0131 favori metin d\u00fczenleyicinizle a\u00e7\u0131n ve a\u015fa\u011f\u0131daki i\u00e7eri\u011fi yap\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code>\n# docker-compose.yml \u00f6rne\u011fi\nversion: '3.8' # Docker Compose dosya format\u0131n\u0131n versiyonu\n\nservices: # Uygulamam\u0131zdaki servisleri tan\u0131mlad\u0131\u011f\u0131m\u0131z b\u00f6l\u00fcm\n  web: # Nginx web sunucusu servisi\n    image: nginx:latest # Kullan\u0131lacak Nginx imaj\u0131\n    ports:\n      - \"80:80\" # Ana makinenin 80. portunu konteynerin 80. portuna y\u00f6nlendir\n    volumes:\n      - .\/nginx.conf:\/etc\/nginx\/nginx.conf # Ana makinedeki nginx.conf dosyas\u0131n\u0131 konteyner i\u00e7ine ba\u011fla\n    depends_on: # Bu servisin ba\u015flamadan \u00f6nce db servisinin ba\u015flamas\u0131n\u0131 bekle\n      - db\n\n  db: # PostgreSQL veritaban\u0131 servisi\n    image: postgres:13 # Kullan\u0131lacak PostgreSQL imaj\u0131 (versiyon 13)\n    environment: # Konteyner i\u00e7in ortam de\u011fi\u015fkenleri\n      POSTGRES_DB: mydatabase # Veritaban\u0131 ad\u0131\n      POSTGRES_USER: user # Veritaban\u0131 kullan\u0131c\u0131 ad\u0131\n      POSTGRES_PASSWORD: password # Veritaban\u0131 parolas\u0131\n    volumes:\n      - db_data:\/var\/lib\/postgresql\/data # Veritaban\u0131 verilerini kal\u0131c\u0131 olarak depolamak i\u00e7in volume kullan\n    healthcheck: # Veritaban\u0131 servisinin haz\u0131r olup olmad\u0131\u011f\u0131n\u0131 kontrol et\n      test: [\"CMD-SHELL\", \"pg_isready -U user -d mydatabase\"]\n      interval: 5s\n      timeout: 5s\n      retries: 5\n\nvolumes: # Tan\u0131mlanan volume'leri belirt\n  db_data: # db_data ad\u0131nda bir volume olu\u015fturulacak\n<\/code><\/pre>\n<p>Bu <code class=\"language-\">docker-compose.yml<\/code> dosyas\u0131 iki servisi tan\u0131mlar: <code class=\"language-\">web<\/code> (Nginx) ve <code class=\"language-\">db<\/code> (PostgreSQL). <code class=\"language-\">web<\/code> servisi, ana makinenin 80. portunu konteynerin 80. portuna ba\u011flar ve bir Nginx yap\u0131land\u0131rma dosyas\u0131n\u0131 konteyner i\u00e7ine mount eder. <code class=\"language-\">db<\/code> servisi ise veritaban\u0131 ad\u0131n\u0131, kullan\u0131c\u0131 ad\u0131n\u0131 ve parolas\u0131n\u0131 ortam de\u011fi\u015fkenleri olarak ayarlar ve veritaban\u0131 verileri i\u00e7in kal\u0131c\u0131 bir volume kullan\u0131r. <code class=\"language-\">depends_on<\/code> anahtar kelimesi, <code class=\"language-\">web<\/code> servisinin <code class=\"language-\">db<\/code> servisi ba\u015flamadan \u00f6nce ba\u015flat\u0131lmamas\u0131n\u0131 sa\u011flar. Ayr\u0131ca <code class=\"language-\">healthcheck<\/code> ile veritaban\u0131n\u0131n ger\u00e7ekten kullan\u0131ma haz\u0131r olup olmad\u0131\u011f\u0131n\u0131 kontrol ediyoruz.<\/p>\n<p>Nginx i\u00e7in \u00f6zel bir yap\u0131land\u0131rma dosyas\u0131 da olu\u015ftural\u0131m. <code class=\"language-\">my_web_app<\/code> dizininin i\u00e7ine <code class=\"language-\">nginx.conf<\/code> ad\u0131nda bir dosya olu\u015fturun ve i\u00e7ine basit bir Nginx yap\u0131land\u0131rmas\u0131 ekleyin:<\/p>\n<pre><code>\n# nginx.conf \u00f6rne\u011fi\nevents {\n    worker_connections 1024;\n}\n\nhttp {\n    server {\n        listen 80;\n        location \/ {\n            return 200 \"Merhaba Docker Compose!\\n\";\n            add_header Content-Type text\/plain;\n        }\n    }\n}\n<\/code><\/pre>\n<p>Bu Nginx yap\u0131land\u0131rmas\u0131, gelen t\u00fcm istekleri &#8220;Merhaba Docker Compose!&#8221; metniyle yan\u0131tlayacakt\u0131r.<\/p>\n<p>\u015eimdi, bu uygulamay\u0131 ba\u015flatmak i\u00e7in <code class=\"language-\">my_web_app<\/code> dizininde a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code>\ndocker compose up -d\n<\/code><\/pre>\n<p>Buradaki <code class=\"language-\">-d<\/code> bayra\u011f\u0131, konteynerleri arka planda (detached mode) \u00e7al\u0131\u015ft\u0131rman\u0131z\u0131 sa\u011flar, b\u00f6ylece terminaliniz serbest kal\u0131r. Docker Compose, gerekli imajlar\u0131 indirecek (e\u011fer yoksa), servisleri olu\u015fturacak ve ba\u015flatacakt\u0131r. Servislerin durumunu g\u00f6rmek i\u00e7in <code class=\"language-\">docker compose ps<\/code> komutunu kullanabilirsiniz. Uygulaman\u0131z\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 do\u011frulamak i\u00e7in web taray\u0131c\u0131n\u0131zdan <code class=\"language-\">http:\/\/localhost<\/code> adresine gidin. &#8220;Merhaba Docker Compose!&#8221; mesaj\u0131n\u0131 g\u00f6rmelisiniz.<\/p>\n<p>Uygulamay\u0131 durdurmak ve t\u00fcm servis konteynerlerini kald\u0131rmak i\u00e7in (volume&#8217;lar hari\u00e7):<\/p>\n<pre><code>\ndocker compose down\n<\/code><\/pre>\n<p>E\u011fer volume&#8217;lar\u0131 da kald\u0131rmak isterseniz: <code class=\"language-\">docker compose down --volumes<\/code>. Docker Compose, karma\u015f\u0131k uygulamalar\u0131 y\u00f6netmeyi inan\u0131lmaz derecede kolayla\u015ft\u0131ran g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r ve modern geli\u015ftirme i\u015f ak\u0131\u015flar\u0131n\u0131n vazge\u00e7ilmez bir par\u00e7as\u0131d\u0131r.<\/p>\n<h2>\u0130leri Seviye Docker Kullan\u0131m\u0131 ve \u0130pu\u00e7lar\u0131: Performans ve G\u00fcvenlik<\/h2>\n<p>Docker&#8217;\u0131 kurup temel komutlar\u0131 \u00f6\u011frendikten sonra, daha verimli ve g\u00fcvenli bir \u015fekilde kullanmak i\u00e7in baz\u0131 ileri seviye konulara ve ipu\u00e7lar\u0131na de\u011finmek faydal\u0131 olacakt\u0131r. Bu b\u00f6l\u00fcmde, kal\u0131c\u0131 veri depolama, a\u011f yap\u0131land\u0131rmas\u0131, Dockerfile en iyi uygulamalar\u0131 ve g\u00fcvenlik konular\u0131n\u0131 ele alaca\u011f\u0131z.<\/p>\n<h3>1. Kal\u0131c\u0131 Veri Depolama (Volumes ve Bind Mounts)<\/h3>\n<p>Varsay\u0131lan olarak, bir Docker konteyneri silindi\u011finde, i\u00e7inde olu\u015fturdu\u011fu t\u00fcm veriler de kaybolur. Bu durum, veritabanlar\u0131 veya kullan\u0131c\u0131 taraf\u0131ndan y\u00fcklenen dosyalar gibi kal\u0131c\u0131 olmas\u0131 gereken veriler i\u00e7in bir sorun te\u015fkil eder. Docker, bu sorunu \u00e7\u00f6zmek i\u00e7in iki ana mekanizma sunar: <strong>Volumes<\/strong> ve <strong>Bind Mounts<\/strong>.<\/p>\n<ul>\n<li><strong>Volumes<\/strong>: Docker taraf\u0131ndan y\u00f6netilen, ana makine \u00fczerinde \u00f6zel bir alanda depolanan veri birimleridir. Konteynerler aras\u0131nda kolayca ta\u015f\u0131nabilir, yedeklenebilir ve y\u00f6netilebilirler. Genellikle veritaban\u0131 verileri gibi kritik veriler i\u00e7in tercih edilirler.<\/li>\n<li><strong>Bind Mounts<\/strong>: Ana makine \u00fczerindeki belirli bir dizini do\u011frudan konteyner i\u00e7ine ba\u011flar. Bu, geli\u015ftirme s\u0131ras\u0131nda kod dosyalar\u0131n\u0131 konteynere aktarmak veya yap\u0131land\u0131rma dosyalar\u0131n\u0131 y\u00f6netmek i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<\/li>\n<\/ul>\n<p>Bir volume olu\u015fturmak ve kullanmak i\u00e7in:<\/p>\n<pre><code>\ndocker volume create my_data_volume\ndocker run -d --name my_db_container -v my_data_volume:\/var\/lib\/mysql mysql:latest\n<\/code><\/pre>\n<p>Bu \u00f6rnekte, <code class=\"language-\">my_data_volume<\/code> ad\u0131nda bir volume olu\u015fturulur ve <code class=\"language-\">my_db_container<\/code> adl\u0131 MySQL konteynerinin <code class=\"language-\">\/var\/lib\/mysql<\/code> dizinine ba\u011flan\u0131r. B\u00f6ylece konteyner silinse bile veritaban\u0131 verileri <code class=\"language-\">my_data_volume<\/code> i\u00e7inde kal\u0131c\u0131 olarak saklan\u0131r.<\/p>\n<h3>2. A\u011f Yap\u0131land\u0131rmas\u0131 (Networking)<\/h3>\n<p>Docker, konteynerler aras\u0131nda ve konteynerler ile ana makine aras\u0131nda ileti\u015fimi sa\u011flamak i\u00e7in g\u00fc\u00e7l\u00fc a\u011f \u00f6zelliklerine sahiptir. Varsay\u0131lan olarak, Docker \u00fc\u00e7 ana a\u011f s\u00fcr\u00fcc\u00fcs\u00fc sunar:<\/p>\n<ul>\n<li><strong>Bridge<\/strong>: Konteynerler i\u00e7in \u00f6zel, dahili bir a\u011f olu\u015fturur ve konteynerlerin birbirleriyle ve ana makineyle ileti\u015fim kurmas\u0131n\u0131 sa\u011flar. (<code class=\"language-\">docker run<\/code> komutunda varsay\u0131lan a\u011fd\u0131r.)<\/li>\n<li><strong>Host<\/strong>: Konteynerin a\u011f y\u0131\u011f\u0131n\u0131n\u0131 do\u011frudan ana makinenin a\u011f y\u0131\u011f\u0131n\u0131yla payla\u015fmas\u0131n\u0131 sa\u011flar. Bu, en iyi performans\u0131 sunar ancak izolasyonu azalt\u0131r.<\/li>\n<li><strong>None<\/strong>: Konteynerin hi\u00e7bir a\u011f aray\u00fcz\u00fcne sahip olmamas\u0131n\u0131 sa\u011flar.<\/li>\n<\/ul>\n<p>Kendi \u00f6zel a\u011flar\u0131n\u0131z\u0131 olu\u015fturarak konteynerlerinizi daha iyi izole edebilir ve y\u00f6netebilirsiniz:<\/p>\n<pre><code>\ndocker network create my_custom_network\ndocker run -d --name web_server --network my_custom_network nginx:latest\ndocker run -d --name app_server --network my_custom_network my_app_image\n<\/code><\/pre>\n<p>Bu sayede <code class=\"language-\">web_server<\/code> ve <code class=\"language-\">app_server<\/code> konteynerleri <code class=\"language-\">my_custom_network<\/code> a\u011f\u0131 \u00fczerinden birbirleriyle isimleriyle ileti\u015fim kurabilirler (\u00f6rne\u011fin, <code class=\"language-\">app_server<\/code> konteynerinden <code class=\"language-\">web_server<\/code>&#8216;a <code class=\"language-\">ping web_server<\/code> yapabilirsiniz).<\/p>\n<h3>3. Dockerfile En \u0130yi Uygulamalar\u0131<\/h3>\n<p>Kendi \u00f6zel imajlar\u0131n\u0131z\u0131 olu\u015fturmak i\u00e7in Dockerfile&#8217;lar kullan\u0131rs\u0131n\u0131z. Verimli, g\u00fcvenli ve k\u00fc\u00e7\u00fck imajlar olu\u015fturmak i\u00e7in baz\u0131 en iyi uygulamalar \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>\u00c7ok A\u015famal\u0131 Yap\u0131land\u0131rmalar (Multi-stage builds)<\/strong>: Geli\u015ftirme ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 ve ara dosyalar\u0131 nihai imajdan ay\u0131rarak imaj boyutunu k\u00fc\u00e7\u00fclt\u00fcn.<\/li>\n<li><strong>\u00d6nbellekleme Katmanlar\u0131n\u0131 Kullanma<\/strong>: <code class=\"language-\">Dockerfile<\/code> komutlar\u0131n\u0131 de\u011fi\u015ftirme olas\u0131l\u0131\u011f\u0131 en d\u00fc\u015f\u00fck olandan en y\u00fckse\u011fe do\u011fru s\u0131ralay\u0131n (\u00f6rne\u011fin, ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00fcklemeden \u00f6nce uygulama kodunu kopyalay\u0131n).<\/li>\n<li><strong>En Az Yetki Prensibi<\/strong>: Konteyner i\u00e7inde root kullan\u0131c\u0131s\u0131 yerine \u00f6zel, yetkisiz bir kullan\u0131c\u0131 olu\u015fturun ve uygulamay\u0131 bu kullan\u0131c\u0131yla \u00e7al\u0131\u015ft\u0131r\u0131n.<\/li>\n<li><strong>K\u00fc\u00e7\u00fck Temel \u0130majlar<\/strong>: <code class=\"language-\">alpine<\/code> gibi daha k\u00fc\u00e7\u00fck temel imajlar\u0131 tercih edin.<\/li>\n<li><strong>Gereksiz Dosyalar\u0131 Hari\u00e7 Tutma (.dockerignore)<\/strong>: <code class=\"language-\">.dockerignore<\/code> dosyas\u0131 kullanarak <code class=\"language-\">node_modules<\/code>, <code class=\"language-\">.git<\/code> gibi gereksiz dosyalar\u0131n imaja kopyalanmas\u0131n\u0131 engelleyin.<\/li>\n<\/ul>\n<pre><code>\n# \u00c7ok a\u015famal\u0131 Dockerfile \u00f6rne\u011fi\n# A\u015fama 1: Uygulamay\u0131 olu\u015ftur\nFROM node:18-alpine AS builder\nWORKDIR \/app\nCOPY package.json package-lock.json .\/\nRUN npm install\nCOPY . .\nRUN npm run build\n\n# A\u015fama 2: Sadece \u00e7al\u0131\u015fan uygulamay\u0131 i\u00e7eren nihai imaj\u0131 olu\u015ftur\nFROM node:18-alpine\nWORKDIR \/app\nCOPY --from=builder \/app\/build .\/build\nCOPY --from=builder \/app\/node_modules .\/node_modules\nCOPY package.json .\/\nCMD [\"node\", \"build\/index.js\"]\n<\/code><\/pre>\n<h3>4. G\u00fcvenlik \u0130pu\u00e7lar\u0131<\/h3>\n<p>Docker ortam\u0131n\u0131z\u0131 g\u00fcvende tutmak i\u00e7in dikkat etmeniz gerekenler:<\/p>\n<ul>\n<li><strong>\u0130maj Kaynaklar\u0131<\/strong>: Yaln\u0131zca g\u00fcvenilir ve do\u011frulanm\u0131\u015f imajlar\u0131 kullan\u0131n. Bilinmeyen kaynaklardan imaj \u00e7ekmekten ka\u00e7\u0131n\u0131n.<\/li>\n<li><strong>En Az Yetki<\/strong>: Konteynerleri m\u00fcmk\u00fcn olan en az yetkiyle \u00e7al\u0131\u015ft\u0131r\u0131n. <code class=\"language-\">CAP_NET_ADMIN<\/code> gibi \u00f6zel yetkileri yaln\u0131zca ger\u00e7ekten gerekliyse verin.<\/li>\n<li><strong>Portlar\u0131 K\u0131s\u0131tla<\/strong>: Yaln\u0131zca uygulaman\u0131z\u0131n ihtiya\u00e7 duydu\u011fu portlar\u0131 a\u00e7\u0131n. <code class=\"language-\">docker run -p<\/code> ile port y\u00f6nlendirmelerini dikkatlice yap\u0131land\u0131r\u0131n.<\/li>\n<li><strong>G\u00fcvenlik Taray\u0131c\u0131lar\u0131<\/strong>: Docker imajlar\u0131n\u0131 ve \u00e7al\u0131\u015fan konteynerleri g\u00fcvenlik a\u00e7\u0131klar\u0131 i\u00e7in d\u00fczenli olarak taray\u0131n.<\/li>\n<li><strong>Sistem Temizli\u011fi<\/strong>: Kullan\u0131lmayan imajlar\u0131, konteynerleri ve volume&#8217;leri d\u00fczenli olarak temizleyin. Bu, hem disk alan\u0131n\u0131 bo\u015falt\u0131r hem de potansiyel g\u00fcvenlik risklerini azalt\u0131r.<\/li>\n<\/ul>\n<pre><code>\ndocker system prune -a --volumes\n<\/code><\/pre>\n<p>Bu komut, durmu\u015f t\u00fcm konteynerleri, kullan\u0131lmayan a\u011flar\u0131, dangling (etiketsiz) imajlar\u0131 ve iste\u011fe ba\u011fl\u0131 olarak kullan\u0131lmayan volume&#8217;leri temizler. Bu, Docker ortam\u0131n\u0131z\u0131 d\u00fczenli ve g\u00fcvenli tutmak i\u00e7in harika bir yoldur.<\/p>\n<div class=\"expert-tip\">\n  Uzman \u0130pucu: Konteynerlerinizi her zaman en az yetki prensibiyle \u00e7al\u0131\u015ft\u0131r\u0131n. K\u00f6k kullan\u0131c\u0131 yerine \u00f6zel bir kullan\u0131c\u0131 olu\u015fturmak, g\u00fcvenlik risklerini \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131r. Ayr\u0131ca, gereksiz portlar\u0131 a\u00e7maktan ka\u00e7\u0131n\u0131n ve <code class=\"language-\">docker system prune<\/code> komutunu d\u00fczenli olarak kullanarak sisteminizi temiz tutun.\n<\/div>\n<h2>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h2>\n<ul>\n<li><strong>Docker nedir ve neden kullanmal\u0131y\u0131m?<\/strong><br \/>Docker, uygulamalar\u0131 ba\u011f\u0131ml\u0131l\u0131klar\u0131yla birlikte &#8220;konteyner&#8221; ad\u0131 verilen izole ortamlarda paketlemeye yarayan bir platformdur. Geli\u015ftirme, test ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerini standartla\u015ft\u0131r\u0131r, &#8220;benim makinemde \u00e7al\u0131\u015f\u0131yordu&#8221; sorununu ortadan kald\u0131r\u0131r ve kaynak kullan\u0131m\u0131n\u0131 optimize eder. Geli\u015ftiriciler i\u00e7in tutarl\u0131 ortamlar sa\u011flarken, operasyon ekipleri i\u00e7in da\u011f\u0131t\u0131m\u0131 ve y\u00f6netimi kolayla\u015ft\u0131r\u0131r.<\/li>\n<li><strong>Docker ve sanal makineler (VM) aras\u0131ndaki fark nedir?<\/strong><br \/>Sanal makineler (VM&#8217;ler), ana donan\u0131m \u00fczerinde \u00e7al\u0131\u015fan bir hiperviz\u00f6r arac\u0131l\u0131\u011f\u0131yla her VM i\u00e7in tam bir i\u015fletim sistemi (\u00e7ekirdek dahil) sanalla\u015ft\u0131r\u0131r. Docker konteynerleri ise ana i\u015fletim sisteminin \u00e7ekirde\u011fini payla\u015f\u0131r ve sadece uygulama ile ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 paketler. Bu, konteynerlerin VM&#8217;lere g\u00f6re \u00e7ok daha hafif, h\u0131zl\u0131, kaynak dostu olmas\u0131n\u0131 ve daha az ba\u015flatma s\u00fcresine sahip olmas\u0131n\u0131 sa\u011flar.<\/li>\n<li><strong>Docker kurulumu sonras\u0131 <code class=\"language-\">sudo<\/code> kullanmak zorunda m\u0131y\u0131m?<\/strong><br \/>Hay\u0131r, kurulumdan sonra kullan\u0131c\u0131n\u0131z\u0131 <code class=\"language-\">docker<\/code> grubuna ekleyerek <code class=\"language-\">sudo<\/code> kullanmadan Docker komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rabilirsiniz. Bunun i\u00e7in <code class=\"language-\">sudo usermod -aG docker $USER<\/code> komutunu \u00e7al\u0131\u015ft\u0131r\u0131p oturumu kapat\u0131p a\u00e7man\u0131z veya <code class=\"language-\">newgrp docker<\/code> komutunu kullanman\u0131z yeterlidir. Bu, g\u00fcnl\u00fck kullan\u0131mda b\u00fcy\u00fck kolayl\u0131k sa\u011flar.<\/li>\n<li><strong>Docker konteynerleri kal\u0131c\u0131 veri depolayabilir mi?<\/strong><br \/>Evet, Docker konteynerleri varsay\u0131lan olarak kal\u0131c\u0131 de\u011fildir (silindiklerinde i\u00e7indeki veriler de gider). Ancak, &#8220;volume&#8221; veya &#8220;bind mount&#8221; kullanarak ana makinedeki dizinleri konteynerlere ba\u011flayarak veya Docker taraf\u0131ndan y\u00f6netilen volume&#8217;lar olu\u015fturarak kal\u0131c\u0131 veri depolama sa\u011flayabilirsiniz. Bu y\u00f6ntemler, veritabanlar\u0131 veya kullan\u0131c\u0131 dosyalar\u0131 gibi \u00f6nemli verilerin korunmas\u0131n\u0131 sa\u011flar.<\/li>\n<li><strong>Docker Compose ne i\u015fe yarar?<\/strong><br \/>Docker Compose, birden fazla Docker konteynerini i\u00e7eren karma\u015f\u0131k uygulamalar\u0131 tan\u0131mlamak ve \u00e7al\u0131\u015ft\u0131rmak i\u00e7in kullan\u0131lan bir ara\u00e7t\u0131r. Bir YAML dosyas\u0131 (<code class=\"language-\">docker-compose.yml<\/code>) ile uygulaman\u0131z\u0131n t\u00fcm servislerini (web sunucusu, veritaban\u0131, \u00f6nbellek vb.), a\u011flar\u0131n\u0131 ve volume&#8217;lerini tek bir komutla (<code class=\"language-\">docker compose up<\/code>) y\u00f6netmenizi sa\u011flar. Bu, \u00e7oklu servisli uygulamalar\u0131n kurulumunu ve y\u00f6netimini b\u00fcy\u00fck \u00f6l\u00e7\u00fcde basitle\u015ftirir.<\/li>\n<\/ul>\n<h2>Sonu\u00e7: Ubuntu&#8217;da Docker ile G\u00fc\u00e7l\u00fc Bir Ba\u015flang\u0131\u00e7<\/h2>\n<p>Bu kapsaml\u0131 rehberde, Ubuntu sisteminize Docker&#8217;\u0131 ad\u0131m ad\u0131m nas\u0131l kuraca\u011f\u0131n\u0131z\u0131, temel Docker komutlar\u0131n\u0131 kullanarak konteynerlerle nas\u0131l etkile\u015fim kuraca\u011f\u0131n\u0131z\u0131 ve hatta Docker Compose ile \u00e7oklu konteyner uygulamalar\u0131n\u0131 nas\u0131l y\u00f6netece\u011finizi \u00f6\u011frendiniz. Ayr\u0131ca, Docker kullan\u0131m\u0131n\u0131z\u0131 daha verimli ve g\u00fcvenli hale getirecek ileri seviye ipu\u00e7lar\u0131na da de\u011findik. Konteynerle\u015fme, modern yaz\u0131l\u0131m geli\u015ftirme ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinin vazge\u00e7ilmez bir par\u00e7as\u0131 haline gelmi\u015ftir ve Docker bu alandaki en pop\u00fcler ara\u00e7lardan biridir. Ubuntu gibi g\u00fc\u00e7l\u00fc ve esnek bir i\u015fletim sistemi \u00fczerinde Docker kullanmak, size uygulamalar\u0131n\u0131z\u0131 geli\u015ftirme, test etme ve da\u011f\u0131tma konusunda e\u015fsiz bir kontrol ve esneklik sunar.<\/p>\n<p>Art\u0131k Docker&#8217;\u0131n temel prensiplerine ve kurulumuna hakimsiniz. Bu bilgilerle, kendi konteynerlerinizi olu\u015fturmaya, mevcut imajlar\u0131 kullanmaya ve hatta karma\u015f\u0131k \u00e7oklu servis uygulamalar\u0131n\u0131 Docker Compose ile y\u00f6netmeye ba\u015flayabilirsiniz. Unutmay\u0131n, Docker ekosistemi s\u00fcrekli geli\u015fmektedir ve en g\u00fcncel bilgilere ula\u015fmak i\u00e7in Docker&#8217;\u0131n resmi dok\u00fcmantasyonunu ve topluluk kaynaklar\u0131n\u0131 d\u00fczenli olarak takip etmek \u00f6nemlidir. Ubuntu&#8217;da Docker ile yapabileceklerinizin s\u0131n\u0131r\u0131 neredeyse yok. Bu g\u00fc\u00e7l\u00fc arac\u0131 ke\u015ffetmeye devam edin ve geli\u015ftirme i\u015f ak\u0131\u015flar\u0131n\u0131z\u0131 bir \u00fcst seviyeye ta\u015f\u0131y\u0131n!<\/p>\n<style>\n  \/* Basic CSS for responsiveness - Example only *\/\n  body {\n    font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n    line-height: 1.7;\n    margin: 0 auto;\n    max-width: 1000px;\n    padding: 20px;\n    color: #333;\n    background-color: #fcfcfc;\n  }\n  h1 {\n    color: #0056b3;\n    text-align: center;\n    margin-bottom: 30px;\n    font-size: 2.5em;\n  }\n  h2 {\n    color: #007bff;\n    margin-top: 40px;\n    margin-bottom: 20px;\n    padding-bottom: 10px;\n    border-bottom: 2px solid #e9ecef;\n    font-size: 1.8em;\n  }\n  h3 {\n    color: #0069d9;\n    margin-top: 30px;\n    margin-bottom: 15px;\n    font-size: 1.4em;\n  }\n  p {\n    margin-bottom: 15px;\n    text-align: justify;\n  }\n  pre {\n    background-color: #f8f9fa;\n    border: 1px solid #e9ecef;\n    padding: 15px;\n    border-radius: 8px;\n    overflow-x: auto;\n    margin-bottom: 20px;\n  }\n  code {\n    font-family: 'Consolas', 'Monaco', 'Lucida Console', monospace;\n    color: #e83e8c; \/* Pink for inline code *\/\n    background-color: #e9ecef;\n    padding: 2px 5px;\n    border-radius: 4px;\n  }\n  pre code {\n    color: #212529; \/* Darker for block code *\/\n    background-color: transparent;\n    padding: 0;\n  }\n  ul {\n    list-style-type: disc;\n    margin-left: 20px;\n    margin-bottom: 15px;\n  }\n  ol {\n    list-style-type: decimal;\n    margin-left: 20px;\n    margin-bottom: 15px;\n  }\n  li {\n    margin-bottom: 8px;\n  }\n  .expert-tip, .case-study {\n    background-color: #e6f7ff;\n    border-left: 5px solid #007bff;\n    padding: 15px 20px;\n    margin: 25px 0;\n    border-radius: 8px;\n  }\n  .expert-tip strong, .case-study strong {\n    color: #0056b3;\n    display: block;\n    margin-bottom: 10px;\n  }\n  .case-study {\n    background-color: #fff3cd;\n    border-left: 5px solid #ffc107;\n  }\n  .case-study strong {\n    color: #856404;\n  }<\/p>\n<p>  \/* Media Queries for responsiveness *\/\n  @media (max-width: 768px) {\n    body {\n      padding: 15px;\n    }\n    h1 {\n      font-size: 2em;\n    }\n    h2 {\n      font-size: 1.6em;\n    }\n    h3 {\n      font-size: 1.3em;\n    }\n    pre {\n      padding: 10px;\n    }\n    .expert-tip, .case-study {\n      padding: 10px 15px;\n      margin: 20px 0;\n    }\n  }<\/p>\n<p>  @media (max-width: 480px) {\n    body {\n      padding: 10px;\n    }\n    h1 {\n      font-size: 1.8em;\n    }\n    h2 {\n      font-size: 1.4em;\n    }\n    h3 {\n      font-size: 1.2em;\n    }\n    ul, ol {\n      margin-left: 15px;\n    }\n    .expert-tip, .case-study {\n      padding: 8px 12px;\n      font-size: 0.9em;\n    }\n  }\n<\/style>\n","protected":false},"excerpt":{"rendered":"Ubuntu&#8217;ya Docker Kurulumu: Ad\u0131m Ad\u0131m Kapsaml\u0131 Rehber Modern yaz\u0131l\u0131m geli\u015ftirme ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinde devrim yaratan Docker, uygulamalar\u0131 izole&hellip;","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-38099","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>Docker Nedir ve Neden Ubuntu&#039;da Kullanmal\u0131s\u0131n\u0131z? Konteynerle\u015fmenin G\u00fcc\u00fc<\/title>\n<meta name=\"description\" content=\"Modern yaz\u0131l\u0131m geli\u015ftirme ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinde devrim yaratan Docker, uygulamalar\u0131 izole edilmi\u015f, ta\u015f\u0131nabilir ve tutarl\u0131 ortamlarda \u00e7al\u0131\u015ft\u0131rman\u0131n anahtar\u0131d\u0131r. Peki, bu g\u00fc\u00e7l\u00fc arac\u0131 pop\u00fcler i\u015fletim sistemi Ubuntu&#039;nuza nas\u0131l kurars\u0131n\u0131z? Bu kapsaml\u0131 rehberde, Docker&#039;\u0131 Ubuntu sisteminize ad\u0131m ad\u0131m kurmay\u0131, temel komutlar\u0131 \u00f6\u011frenmeyi ve hatta ileri d\u00fczey kullan\u0131m ipu\u00e7lar\u0131n\u0131 ke\u015ffetmeyi \u00f6\u011freneceksiniz.\" \/>\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\/docker-nedir-ve-neden-ubuntuda-kullanmalisiniz-konteynerlesmenin-gucu\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Docker Nedir ve Neden Ubuntu&#039;da Kullanmal\u0131s\u0131n\u0131z? Konteynerle\u015fmenin G\u00fcc\u00fc\" \/>\n<meta property=\"og:description\" content=\"Modern yaz\u0131l\u0131m geli\u015ftirme ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinde devrim yaratan Docker, uygulamalar\u0131 izole edilmi\u015f, ta\u015f\u0131nabilir ve tutarl\u0131 ortamlarda \u00e7al\u0131\u015ft\u0131rman\u0131n anahtar\u0131d\u0131r. Peki, bu g\u00fc\u00e7l\u00fc arac\u0131 pop\u00fcler i\u015fletim sistemi Ubuntu&#039;nuza nas\u0131l kurars\u0131n\u0131z? Bu kapsaml\u0131 rehberde, Docker&#039;\u0131 Ubuntu sisteminize ad\u0131m ad\u0131m kurmay\u0131, temel komutlar\u0131 \u00f6\u011frenmeyi ve hatta ileri d\u00fczey kullan\u0131m ipu\u00e7lar\u0131n\u0131 ke\u015ffetmeyi \u00f6\u011freneceksiniz.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/docker-nedir-ve-neden-ubuntuda-kullanmalisiniz-konteynerlesmenin-gucu\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-23T09:21:16+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=\"25 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-nedir-ve-neden-ubuntuda-kullanmalisiniz-konteynerlesmenin-gucu\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-nedir-ve-neden-ubuntuda-kullanmalisiniz-konteynerlesmenin-gucu\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Docker Nedir ve Neden Ubuntu&#8217;da Kullanmal\u0131s\u0131n\u0131z? Konteynerle\u015fmenin G\u00fcc\u00fc\",\"datePublished\":\"2026-01-23T09:21:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-nedir-ve-neden-ubuntuda-kullanmalisiniz-konteynerlesmenin-gucu\/\"},\"wordCount\":4321,\"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\/docker-nedir-ve-neden-ubuntuda-kullanmalisiniz-konteynerlesmenin-gucu\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-nedir-ve-neden-ubuntuda-kullanmalisiniz-konteynerlesmenin-gucu\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/docker-nedir-ve-neden-ubuntuda-kullanmalisiniz-konteynerlesmenin-gucu\/\",\"name\":\"Docker Nedir ve Neden Ubuntu'da Kullanmal\u0131s\u0131n\u0131z? Konteynerle\u015fmenin G\u00fcc\u00fc\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-01-23T09:21:16+00:00\",\"description\":\"Modern yaz\u0131l\u0131m geli\u015ftirme ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinde devrim yaratan Docker, uygulamalar\u0131 izole edilmi\u015f, ta\u015f\u0131nabilir ve tutarl\u0131 ortamlarda \u00e7al\u0131\u015ft\u0131rman\u0131n anahtar\u0131d\u0131r. Peki, bu g\u00fc\u00e7l\u00fc arac\u0131 pop\u00fcler i\u015fletim sistemi Ubuntu'nuza nas\u0131l kurars\u0131n\u0131z? Bu kapsaml\u0131 rehberde, Docker'\u0131 Ubuntu sisteminize ad\u0131m ad\u0131m kurmay\u0131, temel komutlar\u0131 \u00f6\u011frenmeyi ve hatta ileri d\u00fczey kullan\u0131m ipu\u00e7lar\u0131n\u0131 ke\u015ffetmeyi \u00f6\u011freneceksiniz.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-nedir-ve-neden-ubuntuda-kullanmalisiniz-konteynerlesmenin-gucu\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/docker-nedir-ve-neden-ubuntuda-kullanmalisiniz-konteynerlesmenin-gucu\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-nedir-ve-neden-ubuntuda-kullanmalisiniz-konteynerlesmenin-gucu\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Docker Nedir ve Neden Ubuntu&#8217;da Kullanmal\u0131s\u0131n\u0131z? Konteynerle\u015fmenin G\u00fcc\u00fc\"}]},{\"@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":"Docker Nedir ve Neden Ubuntu'da Kullanmal\u0131s\u0131n\u0131z? Konteynerle\u015fmenin G\u00fcc\u00fc","description":"Modern yaz\u0131l\u0131m geli\u015ftirme ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinde devrim yaratan Docker, uygulamalar\u0131 izole edilmi\u015f, ta\u015f\u0131nabilir ve tutarl\u0131 ortamlarda \u00e7al\u0131\u015ft\u0131rman\u0131n anahtar\u0131d\u0131r. Peki, bu g\u00fc\u00e7l\u00fc arac\u0131 pop\u00fcler i\u015fletim sistemi Ubuntu'nuza nas\u0131l kurars\u0131n\u0131z? Bu kapsaml\u0131 rehberde, Docker'\u0131 Ubuntu sisteminize ad\u0131m ad\u0131m kurmay\u0131, temel komutlar\u0131 \u00f6\u011frenmeyi ve hatta ileri d\u00fczey kullan\u0131m ipu\u00e7lar\u0131n\u0131 ke\u015ffetmeyi \u00f6\u011freneceksiniz.","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\/docker-nedir-ve-neden-ubuntuda-kullanmalisiniz-konteynerlesmenin-gucu\/","og_locale":"tr_TR","og_type":"article","og_title":"Docker Nedir ve Neden Ubuntu'da Kullanmal\u0131s\u0131n\u0131z? Konteynerle\u015fmenin G\u00fcc\u00fc","og_description":"Modern yaz\u0131l\u0131m geli\u015ftirme ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinde devrim yaratan Docker, uygulamalar\u0131 izole edilmi\u015f, ta\u015f\u0131nabilir ve tutarl\u0131 ortamlarda \u00e7al\u0131\u015ft\u0131rman\u0131n anahtar\u0131d\u0131r. Peki, bu g\u00fc\u00e7l\u00fc arac\u0131 pop\u00fcler i\u015fletim sistemi Ubuntu'nuza nas\u0131l kurars\u0131n\u0131z? Bu kapsaml\u0131 rehberde, Docker'\u0131 Ubuntu sisteminize ad\u0131m ad\u0131m kurmay\u0131, temel komutlar\u0131 \u00f6\u011frenmeyi ve hatta ileri d\u00fczey kullan\u0131m ipu\u00e7lar\u0131n\u0131 ke\u015ffetmeyi \u00f6\u011freneceksiniz.","og_url":"https:\/\/fatihsoysal.com\/blog\/docker-nedir-ve-neden-ubuntuda-kullanmalisiniz-konteynerlesmenin-gucu\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-01-23T09:21:16+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"25 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/docker-nedir-ve-neden-ubuntuda-kullanmalisiniz-konteynerlesmenin-gucu\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/docker-nedir-ve-neden-ubuntuda-kullanmalisiniz-konteynerlesmenin-gucu\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Docker Nedir ve Neden Ubuntu&#8217;da Kullanmal\u0131s\u0131n\u0131z? Konteynerle\u015fmenin G\u00fcc\u00fc","datePublished":"2026-01-23T09:21:16+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/docker-nedir-ve-neden-ubuntuda-kullanmalisiniz-konteynerlesmenin-gucu\/"},"wordCount":4321,"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\/docker-nedir-ve-neden-ubuntuda-kullanmalisiniz-konteynerlesmenin-gucu\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/docker-nedir-ve-neden-ubuntuda-kullanmalisiniz-konteynerlesmenin-gucu\/","url":"https:\/\/fatihsoysal.com\/blog\/docker-nedir-ve-neden-ubuntuda-kullanmalisiniz-konteynerlesmenin-gucu\/","name":"Docker Nedir ve Neden Ubuntu'da Kullanmal\u0131s\u0131n\u0131z? Konteynerle\u015fmenin G\u00fcc\u00fc","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-01-23T09:21:16+00:00","description":"Modern yaz\u0131l\u0131m geli\u015ftirme ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinde devrim yaratan Docker, uygulamalar\u0131 izole edilmi\u015f, ta\u015f\u0131nabilir ve tutarl\u0131 ortamlarda \u00e7al\u0131\u015ft\u0131rman\u0131n anahtar\u0131d\u0131r. Peki, bu g\u00fc\u00e7l\u00fc arac\u0131 pop\u00fcler i\u015fletim sistemi Ubuntu'nuza nas\u0131l kurars\u0131n\u0131z? Bu kapsaml\u0131 rehberde, Docker'\u0131 Ubuntu sisteminize ad\u0131m ad\u0131m kurmay\u0131, temel komutlar\u0131 \u00f6\u011frenmeyi ve hatta ileri d\u00fczey kullan\u0131m ipu\u00e7lar\u0131n\u0131 ke\u015ffetmeyi \u00f6\u011freneceksiniz.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/docker-nedir-ve-neden-ubuntuda-kullanmalisiniz-konteynerlesmenin-gucu\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/docker-nedir-ve-neden-ubuntuda-kullanmalisiniz-konteynerlesmenin-gucu\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/docker-nedir-ve-neden-ubuntuda-kullanmalisiniz-konteynerlesmenin-gucu\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Docker Nedir ve Neden Ubuntu&#8217;da Kullanmal\u0131s\u0131n\u0131z? Konteynerle\u015fmenin G\u00fcc\u00fc"}]},{"@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\/38099","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=38099"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38099\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=38099"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=38099"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=38099"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}