{"id":32372,"date":"2025-10-21T01:01:50","date_gmt":"2025-10-20T22:01:50","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/kapsayicilastirma-neden-bu-kadar-onemli-temel-kavramlara-giris\/"},"modified":"2025-10-21T01:01:50","modified_gmt":"2025-10-20T22:01:50","slug":"kapsayicilastirma-neden-bu-kadar-onemli-temel-kavramlara-giris","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/kapsayicilastirma-neden-bu-kadar-onemli-temel-kavramlara-giris\/","title":{"rendered":"Kapsay\u0131c\u0131la\u015ft\u0131rma Neden Bu Kadar \u00d6nemli? Temel Kavramlara Giri\u015f"},"content":{"rendered":"<p><H1>\u00d6zel Docker G\u00f6r\u00fcnt\u00fcs\u00fc Olu\u015fturma ve Azure&#8217;da Da\u011f\u0131tma Rehberi<\/H1><\/p>\n<p>Modern uygulama geli\u015ftirme s\u00fcre\u00e7lerinde konteynerizasyon, yaz\u0131l\u0131mlar\u0131n da\u011f\u0131t\u0131m\u0131n\u0131, y\u00f6netimini ve \u00f6l\u00e7eklendirilmesini kolayla\u015ft\u0131ran devrim niteli\u011finde bir teknolojidir. Peki, kendi \u00f6zel Docker g\u00f6r\u00fcnt\u00fcn\u00fcz\u00fc olu\u015fturup bunu Azure Container Registry&#8217;de g\u00fcvenle depolayarak Azure Container Instances \u00fczerinde nas\u0131l h\u0131zl\u0131 ve maliyet etkin bir \u015fekilde \u00e7al\u0131\u015ft\u0131rabilirsiniz? Bu kapsaml\u0131 rehberde, bu sorular\u0131n yan\u0131tlar\u0131n\u0131 ad\u0131m ad\u0131m ke\u015ffedecek, bulut tabanl\u0131 konteyner da\u011f\u0131t\u0131m\u0131n\u0131n temel prensiplerini ve pratik uygulamalar\u0131n\u0131 derinlemesine inceleyece\u011fiz.<\/p>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn rekabet\u00e7i teknoloji d\u00fcnyas\u0131nda, geli\u015ftiriciler ve operasyon ekipleri, uygulamalar\u0131 daha h\u0131zl\u0131 bir \u015fekilde pazara sunmak ve tutarl\u0131 bir ortamda \u00e7al\u0131\u015ft\u0131rmak i\u00e7in s\u00fcrekli yeni yollar ar\u0131yorlar. Geleneksel da\u011f\u0131t\u0131m y\u00f6ntemleri, &#8220;ortam ba\u011f\u0131ml\u0131l\u0131klar\u0131&#8221; ve &#8220;makinemde \u00e7al\u0131\u015f\u0131yor&#8221; gibi sorunlarla dolu olabilirken, Docker gibi konteyner teknolojileri bu zorluklar\u0131n \u00fcstesinden gelmek i\u00e7in g\u00fc\u00e7l\u00fc bir \u00e7\u00f6z\u00fcm sunar. Microsoft Azure&#8217;\u0131n sundu\u011fu Container Registry (ACR) ve Container Instances (ACI) hizmetleri ise bu konteynerle\u015ftirilmi\u015f uygulamalar\u0131n bulut ortam\u0131nda sorunsuz bir \u015fekilde bar\u0131nd\u0131r\u0131lmas\u0131 ve y\u00f6netilmesi i\u00e7in ideal bir platform sa\u011flar. Bu makalede, hem teorik bilgileri peki\u015ftirecek hem de pratik \u00f6rneklerle kendi \u00f6zel Docker g\u00f6r\u00fcnt\u00fcn\u00fcz\u00fc Azure&#8217;a nas\u0131l ta\u015f\u0131yaca\u011f\u0131n\u0131z\u0131 \u00f6\u011freneceksiniz. Hadi ba\u015flayal\u0131m!<\/p>\n<p>Kapsay\u0131c\u0131la\u015ft\u0131rma, modern yaz\u0131l\u0131m geli\u015ftirme ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinin temel ta\u015flar\u0131ndan biri haline gelmi\u015ftir. Bu teknoloji, bir uygulaman\u0131n t\u00fcm ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 (kod, \u00e7al\u0131\u015fma zaman\u0131, sistem ara\u00e7lar\u0131, k\u00fct\u00fcphaneler vb.) tek bir izole pakette toplamas\u0131n\u0131 sa\u011flar. B\u00f6ylece, uygulaman\u0131n farkl\u0131 ortamlarda (geli\u015ftirme, test, \u00fcretim) tutarl\u0131 bir \u015fekilde \u00e7al\u0131\u015fmas\u0131 garanti alt\u0131na al\u0131n\u0131r. Bu sayede &#8220;Benim makinemde \u00e7al\u0131\u015f\u0131yor ama sunucuda \u00e7al\u0131\u015fm\u0131yor!&#8221; gibi klasik problemlerin \u00f6n\u00fcne ge\u00e7ilir. Peki, kapsay\u0131c\u0131la\u015ft\u0131rman\u0131n arkas\u0131ndaki temel kavramlar nelerdir ve neden bu kadar yayg\u0131n bir \u015fekilde benimsenmi\u015ftir?<\/p>\n<p>\u00d6ncelikle, <strong>Docker<\/strong> kavram\u0131na odaklanal\u0131m. Docker, uygulamalar\u0131 kapsay\u0131c\u0131lar i\u00e7inde geli\u015ftirme, da\u011f\u0131tma ve \u00e7al\u0131\u015ft\u0131rma olana\u011f\u0131 sunan a\u00e7\u0131k kaynakl\u0131 bir platformdur. Bir Docker kapsay\u0131c\u0131s\u0131, hafif, ta\u015f\u0131nabilir ve kendi ba\u011f\u0131ms\u0131z ortam\u0131nda \u00e7al\u0131\u015fan bir yaz\u0131l\u0131m birimidir. Sanal makinelerden farkl\u0131 olarak, kapsay\u0131c\u0131lar ana bilgisayar\u0131n i\u015fletim sistemi \u00e7ekirde\u011fini payla\u015f\u0131r, bu da onlar\u0131 daha hafif ve daha h\u0131zl\u0131 ba\u015flat\u0131labilir k\u0131lar. Bu durum, \u00f6zellikle mikroservis mimarisiyle \u00e7al\u0131\u015fan uygulamalar i\u00e7in b\u00fcy\u00fck avantajlar sunar. Her mikroservis kendi kapsay\u0131c\u0131s\u0131 i\u00e7inde izole bir \u015fekilde \u00e7al\u0131\u015fabilir, bu da ba\u011f\u0131ms\u0131z \u00f6l\u00e7eklenebilirlik ve hata izolasyonu sa\u011flar.<\/p>\n<p>Kapsay\u0131c\u0131la\u015ft\u0131rman\u0131n bir di\u011fer \u00f6nemli bile\u015feni ise <strong>Docker G\u00f6r\u00fcnt\u00fcs\u00fc (Docker Image)<\/strong>&#8216;dir. Docker g\u00f6r\u00fcnt\u00fcs\u00fc, bir uygulaman\u0131n \u00e7al\u0131\u015fmas\u0131 i\u00e7in gereken her \u015feyi i\u00e7eren, \u00e7al\u0131\u015ft\u0131r\u0131labilir, pasif bir \u015fablondur. Bu g\u00f6r\u00fcnt\u00fcler katmanl\u0131 bir yap\u0131ya sahiptir ve bu sayede verimli bir depolama ve da\u011f\u0131t\u0131m mekanizmas\u0131 sunarlar. \u00d6rne\u011fin, bir temel i\u015fletim sistemi g\u00f6r\u00fcnt\u00fcs\u00fc \u00fczerinde bir Python \u00e7al\u0131\u015fma zaman\u0131, onun \u00fczerinde de sizin uygulaman\u0131z\u0131n kodu katmanlar halinde in\u015fa edilebilir. Bu sayede, sadece de\u011fi\u015fen katmanlar g\u00fcncellenerek depolama alan\u0131 ve a\u011f bant geni\u015fli\u011fi tasarrufu sa\u011flan\u0131r.<\/p>\n<p>G\u00f6r\u00fcnt\u00fcler olu\u015fturulduktan sonra, bunlar\u0131n depolanmas\u0131 ve payla\u015f\u0131lmas\u0131 i\u00e7in <strong>Kapsay\u0131c\u0131 Kay\u0131t Defterleri (Container Registries)<\/strong> kullan\u0131l\u0131r. Docker Hub gibi herkese a\u00e7\u0131k kay\u0131t defterleri veya Azure Container Registry (ACR) gibi \u00f6zel, bulut tabanl\u0131 kay\u0131t defterleri, Docker g\u00f6r\u00fcnt\u00fclerinin g\u00fcvenli bir \u015fekilde sakland\u0131\u011f\u0131 ve ekipler aras\u0131nda kolayca payla\u015f\u0131labildi\u011fi depolard\u0131r. ACR, \u00f6zellikle Azure ekosistemi i\u00e7inde \u00e7al\u0131\u015f\u0131yorsan\u0131z, di\u011fer Azure hizmetleriyle entegrasyonu, geli\u015fmi\u015f g\u00fcvenlik \u00f6zellikleri ve \u00f6zel depolama imkanlar\u0131 sayesinde kurumsal uygulamalar i\u00e7in m\u00fckemmel bir se\u00e7imdir. Son olarak, bu kapsay\u0131c\u0131lar\u0131 bulutta \u00e7al\u0131\u015ft\u0131rmak i\u00e7in <strong>Azure Container Instances (ACI)<\/strong> gibi hizmetlere ihtiya\u00e7 duyar\u0131z. ACI, herhangi bir sanal makine veya Kubernetes k\u00fcmesi y\u00f6netimi gerektirmeden kapsay\u0131c\u0131lar\u0131 an\u0131nda \u00e7al\u0131\u015ft\u0131rabilmenizi sa\u011flayan sunucusuz bir PaaS (Platform as a Service) \u00e7\u00f6z\u00fcm\u00fcd\u00fcr. H\u0131zl\u0131 prototipleme, g\u00f6rev tabanl\u0131 i\u015f y\u00fckleri veya burstable (patlay\u0131c\u0131) senaryolar i\u00e7in idealdir. Bu temel kavramlar, kendi \u00f6zel Docker g\u00f6r\u00fcnt\u00fcn\u00fcz\u00fc Azure&#8217;da ba\u015far\u0131l\u0131 bir \u015fekilde da\u011f\u0131tman\u0131z i\u00e7in sa\u011flam bir zemin olu\u015fturur.<\/p>\n<div class=\"uzman-ipucu\">\n  Uzman \u0130pucu: Kapsay\u0131c\u0131la\u015ft\u0131rma, &#8220;bir kez in\u015fa et, her yerde \u00e7al\u0131\u015ft\u0131r&#8221; felsefesiyle tutarl\u0131 bir \u00e7al\u0131\u015fma ortam\u0131 sa\u011flar. Bu tutarl\u0131l\u0131k, da\u011f\u0131t\u0131m s\u00fcre\u00e7lerindeki hatalar\u0131 minimuma indirir ve geli\u015ftirme verimlili\u011fini art\u0131r\u0131r.\n<\/div>\n<p><H2>\u00d6zel Docker G\u00f6r\u00fcnt\u00fcs\u00fc Olu\u015fturma: Ad\u0131m Ad\u0131m Dockerfile Haz\u0131rl\u0131\u011f\u0131<\/H2><\/p>\n<p>Kendi \u00f6zel Docker g\u00f6r\u00fcnt\u00fcn\u00fcz\u00fc olu\u015fturman\u0131n kalbi, bir <code>Dockerfile<\/code> haz\u0131rlamakt\u0131r. <code>Dockerfile<\/code>, Docker&#8217;\u0131n bir g\u00f6r\u00fcnt\u00fcy\u00fc nas\u0131l in\u015fa edece\u011fini ad\u0131m ad\u0131m a\u00e7\u0131klayan bir metin dosyas\u0131d\u0131r. Bu dosya, temel i\u015fletim sisteminden ba\u015flayarak, gerekli ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00fckleme, uygulaman\u0131z\u0131n kodunu kopyalama, portlar\u0131 a\u00e7ma ve uygulaman\u0131z\u0131 ba\u015flatma komutlar\u0131na kadar her \u015feyi i\u00e7erir. Bu b\u00f6l\u00fcmde, basit bir Python web uygulamas\u0131n\u0131 \u00f6rnek alarak bir Dockerfile&#8217;\u0131 nas\u0131l olu\u015fturaca\u011f\u0131m\u0131z\u0131 ve g\u00f6r\u00fcnt\u00fcy\u00fc yerel olarak nas\u0131l test edece\u011fimizi \u00f6\u011frenece\u011fiz.<\/p>\n<p><H3>Kendi Uygulamam\u0131z\u0131 Kapsay\u0131c\u0131la\u015ft\u0131ral\u0131m: Bir \u00d6rnek Uygulama<\/H3><\/p>\n<p>\u00d6rne\u011fimiz i\u00e7in basit bir Flask tabanl\u0131 Python web uygulamas\u0131 kullanaca\u011f\u0131z. Bu uygulama, ana dizine gelen isteklere &#8220;Merhaba, Azure Konteynerlar\u0131!&#8221; mesaj\u0131n\u0131 d\u00f6nd\u00fcrecek. Uygulama dosyam\u0131z\u0131n ad\u0131 <code>app.py<\/code> olacak ve ba\u011f\u0131ml\u0131l\u0131klar\u0131m\u0131z i\u00e7in bir <code>requirements.txt<\/code> dosyas\u0131 kullanaca\u011f\u0131z.<\/p>\n<p>\u00d6ncelikle, projemiz i\u00e7in bir dizin olu\u015ftural\u0131m ve i\u00e7ine <code>app.py<\/code> ve <code>requirements.txt<\/code> dosyalar\u0131n\u0131 ekleyelim:<\/p>\n<pre><code>\n# app.py i\u00e7eri\u011fi\nfrom flask import Flask\n\napp = Flask(__name__)\n\n@app.route('\/')\ndef hello():\n    return \"Merhaba, Azure Konteynerlar\u0131!\"\n\nif __name__ == '__main__':\n    app.run(host='0.0.0.0', port=80)\n<\/pre>\n<p><\/code><\/p>\n<p>Ard\u0131ndan, uygulamam\u0131z\u0131n tek ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 olan Flask'i belirten <code>requirements.txt<\/code> dosyas\u0131n\u0131 olu\u015ftural\u0131m:<\/p>\n<pre><code>\n# requirements.txt i\u00e7eri\u011fi\nFlask==2.0.2\n<\/pre>\n<p><\/code><\/p>\n<p>Bu basit yap\u0131, Dockerfile'\u0131m\u0131z\u0131n temelini olu\u015fturacak. Uygulaman\u0131z daha karma\u015f\u0131k olsa da, kapsay\u0131c\u0131la\u015ft\u0131rma mant\u0131\u011f\u0131 ayn\u0131 kalacakt\u0131r: uygulaman\u0131n \u00e7al\u0131\u015fmas\u0131 i\u00e7in gereken her \u015feyi pakete dahil etmek.<\/p>\n<p><H3>Dockerfile Nedir ve Nas\u0131l Olu\u015fturulur?<\/H3><\/p>\n<p>\u015eimdi, bu uygulamay\u0131 bir Docker g\u00f6r\u00fcnt\u00fcs\u00fcne d\u00f6n\u00fc\u015ft\u00fcrecek <code>Dockerfile<\/code> dosyam\u0131z\u0131 olu\u015ftural\u0131m. Bu dosyay\u0131, <code>app.py<\/code> ve <code>requirements.txt<\/code> ile ayn\u0131 dizine kaydetmelisiniz. Bir <code>Dockerfile<\/code> genellikle a\u015fa\u011f\u0131daki ana komutlar\u0131 i\u00e7erir:<\/p>\n<ul>\n<li><code>FROM<\/code>: G\u00f6r\u00fcnt\u00fcn\u00fcz\u00fcn temelini olu\u015fturacak ana g\u00f6r\u00fcnt\u00fcy\u00fc belirtir (\u00f6rne\u011fin, bir i\u015fletim sistemi veya bir programlama dili \u00e7al\u0131\u015fma zaman\u0131).<\/li>\n<li><code>WORKDIR<\/code>: Kapsay\u0131c\u0131 i\u00e7indeki \u00e7al\u0131\u015fma dizinini ayarlar. Sonraki t\u00fcm komutlar bu dizin i\u00e7inde y\u00fcr\u00fct\u00fcl\u00fcr.<\/li>\n<li><code>COPY<\/code>: Yerel sisteminizden kapsay\u0131c\u0131ya dosya ve dizinleri kopyalar.<\/li>\n<li><code>RUN<\/code>: G\u00f6r\u00fcnt\u00fc olu\u015fturulurken \u00e7al\u0131\u015ft\u0131r\u0131lacak komutlar\u0131 belirtir (\u00f6rne\u011fin, ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00fckleme).<\/li>\n<li><code>EXPOSE<\/code>: Kapsay\u0131c\u0131n\u0131n belirli bir port \u00fczerinden dinleyece\u011fini belirtir. Bu sadece bir belgedir, harici eri\u015fim i\u00e7in port e\u015flemesi ayr\u0131ca yap\u0131lmal\u0131d\u0131r.<\/li>\n<li><code>CMD<\/code>: Kapsay\u0131c\u0131 ba\u015flat\u0131ld\u0131\u011f\u0131nda \u00e7al\u0131\u015ft\u0131r\u0131lacak varsay\u0131lan komutu belirtir. Bir Dockerfile'da genellikle sadece bir <code>CMD<\/code> komutu bulunur.<\/li>\n<\/ul>\n<p>Uygulamam\u0131z i\u00e7in Dockerfile:<\/p>\n<pre><code>\n# Dockerfile i\u00e7eri\u011fi\n# 1. Ad\u0131m: Temel G\u00f6r\u00fcnt\u00fcy\u00fc Se\u00e7me\n# Python 3.9'un slim-buster s\u00fcr\u00fcm\u00fcn\u00fc temel al\u0131yoruz. Bu, daha k\u00fc\u00e7\u00fck bir g\u00f6r\u00fcnt\u00fc boyutu i\u00e7in optimize edilmi\u015ftir.\nFROM python:3.9-slim-buster\n\n# 2. Ad\u0131m: \u00c7al\u0131\u015fma Dizinini Ayarlama\n# Kapsay\u0131c\u0131 i\u00e7inde \/app dizinini \u00e7al\u0131\u015fma dizini olarak belirliyoruz.\nWORKDIR \/app\n\n# 3. Ad\u0131m: Ba\u011f\u0131ml\u0131l\u0131klar\u0131 Kopyalama ve Y\u00fckleme\n# requirements.txt dosyas\u0131n\u0131 \u00e7al\u0131\u015fma dizinine kopyala.\nCOPY requirements.txt .\n\n# Python ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 y\u00fckle. --no-cache-dir, \u00f6nbellek dosyalar\u0131n\u0131n g\u00f6r\u00fcnt\u00fcye eklenmemesini sa\u011flar.\nRUN pip install --no-cache-dir -r requirements.txt\n\n# 4. Ad\u0131m: Uygulama Kodunu Kopyalama\n# Mevcut dizindeki t\u00fcm dosyalar\u0131 (app.py dahil) kapsay\u0131c\u0131daki \/app dizinine kopyala.\nCOPY . .\n\n# 5. Ad\u0131m: Portu Belirtme\n# Uygulamam\u0131z\u0131n 80 numaral\u0131 portu dinleyece\u011fini bildiriyoruz.\nEXPOSE 80\n\n# 6. Ad\u0131m: Uygulamay\u0131 Ba\u015flatma Komutu\n# Kapsay\u0131c\u0131 ba\u015flat\u0131ld\u0131\u011f\u0131nda bu komut \u00e7al\u0131\u015facak. Flask uygulamam\u0131z\u0131n 0.0.0.0 adresinde ve 80 portunda \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011fl\u0131yoruz.\nCMD [\"python\", \"app.py\"]\n<\/pre>\n<p><\/code><\/p>\n<p><H3>Docker G\u00f6r\u00fcnt\u00fcs\u00fcn\u00fc Olu\u015fturma ve Yerel Olarak Test Etme<\/H3><\/p>\n<p><code>Dockerfile<\/code>'\u0131 olu\u015fturduktan sonra, s\u0131ra Docker g\u00f6r\u00fcnt\u00fcs\u00fcn\u00fc in\u015fa etmeye gelir. Komut istemcinizi veya terminalinizi <code>Dockerfile<\/code>'\u0131n bulundu\u011fu dizine getirerek a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code>\ndocker build -t my-custom-app:v1 .\n<\/pre>\n<p><\/code><\/p>\n<p>Bu komutun anlam\u0131 \u015fudur:<\/p>\n<ul>\n<li><code>docker build<\/code>: Bir Docker g\u00f6r\u00fcnt\u00fcs\u00fc olu\u015fturma komutu.<\/li>\n<li><code>-t my-custom-app:v1<\/code>: Olu\u015fturulan g\u00f6r\u00fcnt\u00fcye <code>my-custom-app<\/code> ad\u0131n\u0131 ve <code>v1<\/code> etiketini (tag) atar. Etiketler, bir g\u00f6r\u00fcnt\u00fcn\u00fcn farkl\u0131 s\u00fcr\u00fcmlerini y\u00f6netmek i\u00e7in kullan\u0131l\u0131r.<\/li>\n<li><code>.<\/code>: Dockerfile'\u0131n ve uygulaman\u0131n kaynak dosyalar\u0131n\u0131n mevcut dizinde oldu\u011funu belirtir.<\/li>\n<\/ul>\n<p>Bu i\u015flem biraz zaman alabilir, Dockerfile'daki her <code>RUN<\/code>, <code>COPY<\/code> komutu yeni bir katman olu\u015fturacakt\u0131r. Ba\u015far\u0131l\u0131 bir \u015fekilde tamamland\u0131\u011f\u0131nda, g\u00f6r\u00fcnt\u00fcn\u00fcz\u00fc yerel Docker deponuzda g\u00f6rebilirsiniz: <code>docker images<\/code>.<\/p>\n<p>\u015eimdi bu g\u00f6r\u00fcnt\u00fcy\u00fc yerel olarak bir kapsay\u0131c\u0131da \u00e7al\u0131\u015ft\u0131r\u0131p test edelim:<\/p>\n<pre><code>\ndocker run -p 8080:80 my-custom-app:v1\n<\/pre>\n<p><\/code><\/p>\n<p>Bu komut:<\/p>\n<ul>\n<li><code>docker run<\/code>: Bir kapsay\u0131c\u0131y\u0131 ba\u015flatma komutu.<\/li>\n<li><code>-p 8080:80<\/code>: Yerel makinenizin 8080 portunu kapsay\u0131c\u0131n\u0131n 80 portuna e\u015fler. B\u00f6ylece yerel makinenizden <code>http:\/\/localhost:8080<\/code> adresine eri\u015fti\u011finizde, kapsay\u0131c\u0131n\u0131n i\u00e7indeki Flask uygulamas\u0131na ula\u015fabilirsiniz.<\/li>\n<li><code>my-custom-app:v1<\/code>: Hangi g\u00f6r\u00fcnt\u00fcn\u00fcn \u00e7al\u0131\u015ft\u0131r\u0131laca\u011f\u0131n\u0131 belirtir.<\/li>\n<\/ul>\n<p>Taray\u0131c\u0131n\u0131zda <code>http:\/\/localhost:8080<\/code> adresine gidin. \"Merhaba, Azure Konteynerlar\u0131!\" mesaj\u0131n\u0131 g\u00f6rmelisiniz. Bu, \u00f6zel Docker g\u00f6r\u00fcnt\u00fcn\u00fcz\u00fcn ba\u015far\u0131yla olu\u015fturuldu\u011fu ve yerel olarak \u00e7al\u0131\u015ft\u0131\u011f\u0131 anlam\u0131na gelir. Bu a\u015fama, da\u011f\u0131t\u0131m s\u00fcrecinin en kritik ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r, \u00e7\u00fcnk\u00fc bir sonraki ad\u0131mda bu g\u00f6r\u00fcnt\u00fcy\u00fc Azure bulutuna ta\u015f\u0131yaca\u011f\u0131z.<\/p>\n<div class=\"uzman-ipucu\">\n  Uzman \u0130pucu: \u00c7ok a\u015famal\u0131 (multi-stage) Dockerfile'lar kullanarak son g\u00f6r\u00fcnt\u00fcn\u00fcz\u00fcn boyutunu \u00f6nemli \u00f6l\u00e7\u00fcde k\u00fc\u00e7\u00fcltebilirsiniz. \u00d6rne\u011fin, derleme ve \u00e7al\u0131\u015fma ortamlar\u0131n\u0131 ay\u0131rarak yaln\u0131zca nihai uygulaman\u0131z i\u00e7in gerekenleri nihai g\u00f6r\u00fcnt\u00fcye dahil edersiniz. Bu durum, da\u011f\u0131t\u0131m s\u00fcrelerini azalt\u0131r ve g\u00fcvenlik risklerini minimize eder.\n<\/div>\n<p><H2>Azure Container Registry (ACR) ile G\u00f6r\u00fcnt\u00fc Depolama: G\u00fcvenli ve \u00d6l\u00e7eklenebilir \u00c7\u00f6z\u00fcmler<\/H2><\/p>\n<p>Yerel ortam\u0131n\u0131zda \u00f6zel Docker g\u00f6r\u00fcnt\u00fcn\u00fcz\u00fc ba\u015far\u0131yla olu\u015fturdunuz ve test ettiniz. \u015eimdi s\u0131ra, bu g\u00f6r\u00fcnt\u00fcy\u00fc g\u00fcvenli bir \u015fekilde depolamak ve Azure bulut hizmetlerinin eri\u015fimine sunmakt\u0131r. \u0130\u015fte tam bu noktada Azure Container Registry (ACR) devreye giriyor. ACR, Docker g\u00f6r\u00fcnt\u00fclerini ve di\u011fer OCI (Open Container Initiative) format\u0131ndaki yap\u0131tlar\u0131 depolamak ve y\u00f6netmek i\u00e7in tasarlanm\u0131\u015f, y\u00f6netilen, \u00f6zel bir kay\u0131t defteri hizmetidir. Docker Hub gibi herkese a\u00e7\u0131k kay\u0131t defterlerinin aksine, ACR size ait \u00f6zel bir depo sunar, bu da kurumsal d\u00fczeyde g\u00fcvenlik ve kontrol sa\u011flar.<\/p>\n<p><H3>ACR Nedir ve Neden Kullanmal\u0131y\u0131z?<\/H3><\/p>\n<p>Azure Container Registry, Azure ekosistemiyle derinlemesine entegre edilmi\u015f bir PaaS hizmetidir. Temel amac\u0131, Docker g\u00f6r\u00fcnt\u00fclerinizi ve Helm grafiklerinizi (Kubernetes paket y\u00f6neticisi) depolamak, y\u00f6netmek ve da\u011f\u0131tmakt\u0131r. ACR'yi kullanman\u0131n ba\u015fl\u0131ca nedenleri \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>G\u00fcvenlik ve \u0130zolasyon:<\/strong> G\u00f6r\u00fcnt\u00fcleriniz tamamen size ait, \u00f6zel bir depoda bar\u0131nd\u0131r\u0131l\u0131r. Azure Active Directory (AAD) tabanl\u0131 kimlik do\u011frulama, sanal a\u011f entegrasyonu ve g\u00f6r\u00fcnt\u00fc taramas\u0131 gibi \u00f6zelliklerle geli\u015fmi\u015f g\u00fcvenlik sunar.<\/li>\n<li><strong>Azure Entegrasyonu:<\/strong> Azure Kubernetes Service (AKS), Azure Container Instances (ACI), Azure App Service ve Azure Functions gibi di\u011fer Azure hizmetleriyle sorunsuz bir \u015fekilde \u00e7al\u0131\u015f\u0131r. Bu sayede, kapsay\u0131c\u0131l\u0131 uygulamalar\u0131n\u0131z\u0131 Azure i\u00e7inde kolayca da\u011f\u0131tabilir ve y\u00f6netebilirsiniz.<\/li>\n<li><strong>K\u00fcresel \u00d6l\u00e7eklenebilirlik:<\/strong> Co\u011frafi \u00e7o\u011faltma \u00f6zelli\u011fi sayesinde g\u00f6r\u00fcnt\u00fclerinizi farkl\u0131 Azure b\u00f6lgelerine da\u011f\u0131tarak gecikme s\u00fcresini azaltabilir ve b\u00f6lgesel felaketlere kar\u015f\u0131 dayan\u0131kl\u0131l\u0131\u011f\u0131 art\u0131rabilirsiniz.<\/li>\n<li><strong>Otomatik Olu\u015fturma (ACR Tasks):<\/strong> Dockerfile'lardan otomatik olarak g\u00f6r\u00fcnt\u00fc olu\u015fturabilir, g\u00f6r\u00fcnt\u00fcleri test edebilir ve yama uygulanm\u0131\u015f temel g\u00f6r\u00fcnt\u00fcler g\u00fcncellendi\u011finde yeniden in\u015fa edebilirsiniz. Bu, CI\/CD (S\u00fcrekli Entegrasyon\/S\u00fcrekli Teslimat) s\u00fcre\u00e7lerinin \u00f6nemli bir par\u00e7as\u0131d\u0131r.<\/li>\n<li><strong>Maliyet Y\u00f6netimi:<\/strong> Kullan\u0131m tabanl\u0131 \u00f6deme modeli ve farkl\u0131 SKU se\u00e7enekleri (Basic, Standard, Premium) ile ihtiya\u00e7lar\u0131n\u0131za uygun maliyet optimizasyonu sa\u011flar.<\/li>\n<\/ul>\n<p>\u00d6zetle, ACR, kurumsal d\u00fczeyde kapsay\u0131c\u0131 i\u015f y\u00fckleri i\u00e7in g\u00fc\u00e7l\u00fc, g\u00fcvenli ve \u00f6l\u00e7eklenebilir bir temel olu\u015fturur.<\/p>\n<p><H3>Azure CLI ile ACR Kay\u0131t Defteri Olu\u015fturma<\/H3><\/p>\n<p>Bir ACR kay\u0131t defteri olu\u015fturmak i\u00e7in Azure CLI'yi kullanaca\u011f\u0131z. \u00d6ncelikle Azure hesab\u0131n\u0131za giri\u015f yapt\u0131\u011f\u0131n\u0131zdan emin olun:<\/p>\n<pre><code>\naz login\n<\/pre>\n<p><\/code><\/p>\n<p>Daha sonra bir kaynak grubu olu\u015fturman\u0131z gerekebilir veya mevcut birini kullanabilirsiniz:<\/p>\n<pre><code>\naz group create --name MyResourceGroup --location westeurope\n<\/pre>\n<p><\/code><\/p>\n<p>\u015eimdi, yeni bir ACR kay\u0131t defteri olu\u015ftural\u0131m. Kay\u0131t defteri ad\u0131n\u0131n Azure i\u00e7inde genel olarak benzersiz olmas\u0131 gerekti\u011fini unutmay\u0131n.<\/p>\n<pre><code>\naz acr create --resource-group MyResourceGroup --name mycustomacr --sku Basic --admin-enabled true\n<\/pre>\n<p><\/code><\/p>\n<p>Bu komutun anlam\u0131:<\/p>\n<ul>\n<li><code>az acr create<\/code>: Yeni bir Azure Container Registry olu\u015fturma komutu.<\/li>\n<li><code>--resource-group MyResourceGroup<\/code>: Kay\u0131t defterinin atanaca\u011f\u0131 kaynak grubu.<\/li>\n<li><code>--name mycustomacr<\/code>: Kay\u0131t defterinizin ad\u0131. L\u00fctfen benzersiz bir ad se\u00e7in (\u00f6rne\u011fin, <code>bengihantestacr2023<\/code> gibi).<\/li>\n<li><code>--sku Basic<\/code>: Kay\u0131t defteri i\u00e7in fiyatland\u0131rma katman\u0131n\u0131 belirtir. Basic, ba\u015flang\u0131\u00e7 i\u00e7in yeterlidir. Standard ve Premium SKU'lar daha fazla \u00f6zellik (\u00f6rne\u011fin, co\u011frafi \u00e7o\u011faltma) sunar.<\/li>\n<li><code>--admin-enabled true<\/code>: Y\u00f6netici kullan\u0131c\u0131y\u0131 etkinle\u015ftirir. Bu, kullan\u0131c\u0131 ad\u0131 ve parola tabanl\u0131 eri\u015fim sa\u011flar. \u00dcretim ortamlar\u0131nda genellikle AAD servis sorumlusu veya y\u00f6netilen kimlikler tercih edilir.<\/li>\n<\/ul>\n<p>Kay\u0131t defteri ba\u015far\u0131yla olu\u015fturuldu\u011funda, \u00e7\u0131kt\u0131da bir JSON nesnesi g\u00f6receksiniz. Bu, ACR'nizin art\u0131k kullan\u0131ma haz\u0131r oldu\u011fu anlam\u0131na gelir.<\/p>\n<p><H3>Yerel Docker G\u00f6r\u00fcnt\u00fcs\u00fcn\u00fc ACR'ye G\u00f6nderme (Push)<\/H3><\/p>\n<p>ACR kay\u0131t defteriniz haz\u0131r oldu\u011funa g\u00f6re, yerel olarak olu\u015fturdu\u011funuz <code>my-custom-app:v1<\/code> Docker g\u00f6r\u00fcnt\u00fcs\u00fcn\u00fc ACR'ye g\u00f6nderebiliriz. Bu i\u015flem \u00fc\u00e7 ana ad\u0131mdan olu\u015fur:<\/p>\n<ol>\n<li><strong>ACR'ye Giri\u015f Yapma:<\/strong> Docker CLI'y\u0131 kullanarak ACR kay\u0131t defterinize kimlik do\u011frulaman\u0131z gerekir. Y\u00f6netici kullan\u0131c\u0131s\u0131n\u0131 etkinle\u015ftirdi\u011fimiz i\u00e7in, kullan\u0131c\u0131 ad\u0131n\u0131z\u0131 ve parolan\u0131z\u0131 kullanarak giri\u015f yapaca\u011f\u0131z. Bu bilgileri a\u015fa\u011f\u0131daki komutlarla alabilirsiniz:<\/li>\n<pre><code>\naz acr credential show --name mycustomacr --query \"username\" --output tsv\naz acr credential show --name mycustomacr --query \"passwords[0].value\" --output tsv\n  <\/pre>\n<p><\/code><\/p>\n<p>\u015eimdi Docker CLI ile giri\u015f yap\u0131n (<code>mycustomacr.azurecr.io<\/code> yerine kendi ACR ad\u0131n\u0131z\u0131 kullan\u0131n):<\/p>\n<pre><code>\ndocker login mycustomacr.azurecr.io\n  <\/pre>\n<p><\/code><\/p>\n<p>\u0130stenen kullan\u0131c\u0131 ad\u0131 ve parolay\u0131 girin.<\/p>\n<li><strong>G\u00f6r\u00fcnt\u00fcy\u00fc Etiketleme (Tag):<\/strong> Docker g\u00f6r\u00fcnt\u00fcleri, kay\u0131t defteri URL'si ile etiketlenmelidir. Bu, Docker'a g\u00f6r\u00fcnt\u00fcy\u00fc nereye g\u00f6nderece\u011fini s\u00f6yler.<\/li>\n<pre><code>\ndocker tag my-custom-app:v1 mycustomacr.azurecr.io\/my-custom-app:v1\n  <\/pre>\n<p><\/code><\/p>\n<p>Bu komut, <code>my-custom-app:v1<\/code> g\u00f6r\u00fcnt\u00fcs\u00fcne ACR kay\u0131t defterinizin tam URL'siyle yeni bir etiket ekler.<\/p>\n<li><strong>G\u00f6r\u00fcnt\u00fcy\u00fc G\u00f6nderme (Push):<\/strong> Etiketlenmi\u015f g\u00f6r\u00fcnt\u00fcy\u00fc ACR'ye g\u00f6nderin.<\/li>\n<pre><code>\ndocker push mycustomacr.azurecr.io\/my-custom-app:v1\n  <\/pre>\n<p><\/code>\n<\/ol>\n<p>Bu komut, g\u00f6r\u00fcnt\u00fcy\u00fc katman katman ACR'ye y\u00fckleyecektir. \u0130\u015flem tamamland\u0131\u011f\u0131nda, Azure portal\u0131nda ACR hizmetinize giderek veya a\u015fa\u011f\u0131daki CLI komutunu kullanarak g\u00f6r\u00fcnt\u00fcn\u00fcn ba\u015far\u0131yla y\u00fcklendi\u011fini do\u011frulayabilirsiniz:<\/p>\n<pre><code>\naz acr repository show-tags --name mycustomacr --repository my-custom-app --output tsv\n<\/pre>\n<p><\/code><\/p>\n<p>Art\u0131k \u00f6zel Docker g\u00f6r\u00fcnt\u00fcn\u00fcz Azure Container Registry'de g\u00fcvenli bir \u015fekilde depolanm\u0131\u015ft\u0131r ve Azure'daki di\u011fer hizmetler taraf\u0131ndan eri\u015filebilir durumdad\u0131r. Bu, uygulaman\u0131z\u0131n bulut tabanl\u0131 da\u011f\u0131t\u0131m\u0131n\u0131n bir sonraki ad\u0131m\u0131na ge\u00e7mek i\u00e7in temel bir ad\u0131md\u0131r.<\/p>\n<div class=\"uzman-ipucu\">\n  Uzman \u0130pucu: \u00dcretim ortamlar\u0131nda <code>--admin-enabled true<\/code> yerine Azure Active Directory tabanl\u0131 Hizmet Sorumlular\u0131 (Service Principals) veya Y\u00f6netilen Kimlikler (Managed Identities) kullanmak, kimlik do\u011frulama ve yetkilendirme i\u00e7in daha g\u00fcvenli ve y\u00f6netilebilir bir y\u00f6ntemdir.\n<\/div>\n<p><H2>Azure Container Instances (ACI) ile H\u0131zl\u0131 Da\u011f\u0131t\u0131m: Sunucusuz Kapsay\u0131c\u0131 \u00c7al\u0131\u015ft\u0131rma<\/H2><\/p>\n<p>Azure Container Registry'de \u00f6zel Docker g\u00f6r\u00fcnt\u00fcm\u00fcz\u00fc g\u00fcvenli bir \u015fekilde depolad\u0131ktan sonra, s\u0131ra bu g\u00f6r\u00fcnt\u00fcy\u00fc bulutta \u00e7al\u0131\u015ft\u0131rmaya gelir. Azure Container Instances (ACI), bu g\u00f6revi basitle\u015ftiren ve sunucusuz bir model sunan g\u00fc\u00e7l\u00fc bir hizmettir. ACI ile, sanal makineleri (VM'ler) veya Kubernetes gibi karma\u015f\u0131k kapsay\u0131c\u0131 orkestrasyon platformlar\u0131n\u0131 y\u00f6netme y\u00fck\u00fc olmadan tekil kapsay\u0131c\u0131lar\u0131 veya k\u00fc\u00e7\u00fck kapsay\u0131c\u0131 gruplar\u0131n\u0131 an\u0131nda \u00e7al\u0131\u015ft\u0131rabilirsiniz. Bu, \u00f6zellikle h\u0131zl\u0131 prototipleme, g\u00f6rev tabanl\u0131 i\u015f y\u00fckleri, veri i\u015fleme boru hatlar\u0131 veya ara s\u0131ra \u00e7al\u0131\u015fan i\u015fler i\u00e7in idealdir.<\/p>\n<p><H3>ACI Nedir ve Avantajlar\u0131 Nelerdir?<\/HMP><\/p>\n<p>ACI, Azure'da bir kapsay\u0131c\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in en h\u0131zl\u0131 ve en basit yollardan biridir. Tamamen y\u00f6netilen bir hizmet olarak, altyap\u0131 y\u00f6netimiyle u\u011fra\u015fman\u0131za gerek kalmaz. Sadece kapsay\u0131c\u0131 g\u00f6r\u00fcnt\u00fcn\u00fcz\u00fc belirtin, gerekli kaynaklar\u0131 (CPU, bellek) tan\u0131mlay\u0131n ve ACI sizin i\u00e7in gerisini halleder. Ba\u015fl\u0131ca avantajlar\u0131 \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>Sunucusuz Yakla\u015f\u0131m:<\/strong> Altyap\u0131 provizyonu, yamalama veya y\u00f6netimi gibi g\u00f6revlerle u\u011fra\u015fmak zorunda kalmazs\u0131n\u0131z. Kapsay\u0131c\u0131lar\u0131n\u0131z do\u011frudan Azure'\u0131n altyap\u0131s\u0131nda \u00e7al\u0131\u015f\u0131r.<\/li>\n<li><strong>H\u0131zl\u0131 Ba\u015flang\u0131\u00e7:<\/strong> Kapsay\u0131c\u0131 \u00f6rnekleri saniyeler i\u00e7inde ba\u015flat\u0131labilir, bu da anl\u0131k i\u015f y\u00fckleri veya h\u0131zl\u0131 da\u011f\u0131t\u0131m gerektiren senaryolar i\u00e7in m\u00fckemmeldir.<\/li>\n<li><strong>\u0130ste\u011fe Ba\u011fl\u0131 Fiyatland\u0131rma:<\/strong> Yaln\u0131zca kapsay\u0131c\u0131lar\u0131n\u0131z\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131 s\u00fcre boyunca CPU, bellek ve a\u011f kullan\u0131m\u0131 i\u00e7in \u00f6deme yapars\u0131n\u0131z. Bu, \u00f6zellikle aral\u0131kl\u0131 veya de\u011fi\u015fken i\u015f y\u00fckleri i\u00e7in maliyet etkin bir \u00e7\u00f6z\u00fcm sunar.<\/li>\n<li><strong>Esneklik:<\/strong> Linux ve Windows kapsay\u0131c\u0131lar\u0131n\u0131 destekler, \u00f6zel g\u00f6r\u00fcnt\u00fclerden veya Docker Hub gibi herkese a\u00e7\u0131k kay\u0131t defterlerinden g\u00f6r\u00fcnt\u00fcler \u00e7ekebilir.<\/li>\n<li><strong>Basitlik:<\/strong> Tekil kapsay\u0131c\u0131lar veya kapsay\u0131c\u0131 gruplar\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in idealdir. Kubernetes gibi geli\u015fmi\u015f orkestrasyon \u00f6zelliklerine ihtiya\u00e7 duymayan senaryolar i\u00e7in m\u00fckemmeldir.<\/li>\n<li><strong>G\u00fcvenli A\u011f \u0130zolasyonu:<\/strong> Kapsay\u0131c\u0131lar\u0131n\u0131z\u0131 sanal a\u011flara da\u011f\u0131tarak daha geli\u015fmi\u015f a\u011f kontrolleri ve g\u00fcvenlik sa\u011flayabilirsiniz.<\/li>\n<\/ul>\n<p>ACI'nin bu avantajlar\u0131, \u00f6zellikle belirli bir g\u00f6revi yerine getirecek veya k\u0131sa \u00f6m\u00fcrl\u00fc bir hizmet sunacak uygulamalar i\u00e7in onu cazip k\u0131lar.<\/p>\n<p><H3>ACR'deki G\u00f6r\u00fcnt\u00fcy\u00fc ACI'ye Da\u011f\u0131tma<\/H3><\/p>\n<p>\u015eimdi ACR'de depolad\u0131\u011f\u0131m\u0131z <code>mycustomacr.azurecr.io\/my-custom-app:v1<\/code> g\u00f6r\u00fcnt\u00fcs\u00fcn\u00fc ACI'ye da\u011f\u0131tal\u0131m. Bu i\u015flemi Azure CLI ile kolayca yapabiliriz. Da\u011f\u0131t\u0131m s\u0131ras\u0131nda, kapsay\u0131c\u0131m\u0131z\u0131n ad\u0131n\u0131, kullanaca\u011f\u0131 g\u00f6r\u00fcnt\u00fcy\u00fc, a\u00e7aca\u011f\u0131 portlar\u0131 ve eri\u015filebilir olaca\u011f\u0131 bir DNS ad\u0131n\u0131 belirtmemiz gerekecek. Ayr\u0131ca, ACI'nin \u00f6zel kay\u0131t defterimiz ACR'den g\u00f6r\u00fcnt\u00fcy\u00fc \u00e7ekebilmesi i\u00e7in kimlik do\u011frulama bilgilerini sa\u011flamam\u0131z \u00f6nemlidir.<\/p>\n<pre><code>\n# ACR kullan\u0131c\u0131 ad\u0131 ve \u015fifresini al\u0131yoruz\nACR_USERNAME=$(az acr credential show --name mycustomacr --query \"username\" --output tsv)\nACR_PASSWORD=$(az acr credential show --name mycustomacr --query \"passwords[0].value\" --output tsv)\n\n# Azure Container Instance olu\u015fturma\naz container create --resource-group MyResourceGroup \\\n    --name mycontainerapp \\\n    --image mycustomacr.azurecr.io\/my-custom-app:v1 \\\n    --dns-name-label mycontainerdns \\\n    --ports 80 \\\n    --registry-username $ACR_USERNAME \\\n    --registry-password $ACR_PASSWORD \\\n    --cpu 1 \\\n    --memory 1\n<\/pre>\n<p><\/code><\/p>\n<p>Bu komutun detaylar\u0131:<\/p>\n<ul>\n<li><code>az container create<\/code>: Yeni bir Azure Container Instance olu\u015fturma komutu.<\/li>\n<li><code>--resource-group MyResourceGroup<\/code>: Kapsay\u0131c\u0131 \u00f6rne\u011finin olu\u015fturulaca\u011f\u0131 kaynak grubu.<\/li>\n<li><code>--name mycontainerapp<\/code>: Kapsay\u0131c\u0131 \u00f6rne\u011finizin ad\u0131.<\/li>\n<li><code>--image mycustomacr.azurecr.io\/my-custom-app:v1<\/code>: \u00c7al\u0131\u015ft\u0131r\u0131lacak Docker g\u00f6r\u00fcnt\u00fcs\u00fcn\u00fcn tam yolu.<\/li>\n<li><code>--dns-name-label mycontainerdns<\/code>: Kapsay\u0131c\u0131n\u0131za eri\u015fmek i\u00e7in kullan\u0131lacak genel DNS ad\u0131n\u0131n bir par\u00e7as\u0131. Bu, <code>mycontainerdns.[b\u00f6lge_ad\u0131].azurecontainer.io<\/code> \u015feklinde bir URL olu\u015fturur. Bu etiketin de genel olarak benzersiz olmas\u0131 gerekir.<\/li>\n<li><code>--ports 80<\/code>: Kapsay\u0131c\u0131n\u0131n d\u0131\u015far\u0131dan eri\u015fime a\u00e7\u0131k olacak portu (Flask uygulamam\u0131z 80 numaral\u0131 portu dinliyor).<\/li>\n<li><code>--registry-username $ACR_USERNAME<\/code> ve <code>--registry-password $ACR_PASSWORD<\/code>: ACI'nin \u00f6zel ACR kay\u0131t defterinizden g\u00f6r\u00fcnt\u00fcy\u00fc \u00e7ekmek i\u00e7in kullanaca\u011f\u0131 kimlik do\u011frulama bilgileri. Daha \u00f6nce ald\u0131\u011f\u0131m\u0131z de\u011fi\u015fkenleri kullan\u0131yoruz.<\/li>\n<li><code>--cpu 1 --memory 1<\/code>: Kapsay\u0131c\u0131 \u00f6rne\u011fine atanacak CPU (\u00e7ekirdek) ve bellek (GB) miktar\u0131. \u0130htiyac\u0131n\u0131za g\u00f6re ayarlayabilirsiniz.<\/li>\n<\/ul>\n<p>Komut ba\u015far\u0131yla tamamland\u0131\u011f\u0131nda, ACI \u00f6rne\u011finizin durumu ve eri\u015fim URL'si dahil olmak \u00fczere detayl\u0131 bir JSON \u00e7\u0131kt\u0131s\u0131 alacaks\u0131n\u0131z. Kapsay\u0131c\u0131n\u0131z\u0131n tamamen ba\u015flat\u0131lmas\u0131 birka\u00e7 saniye s\u00fcrebilir. Kapsay\u0131c\u0131 \u00f6rne\u011finin tam nitelikli etki alan\u0131 ad\u0131n\u0131 (FQDN) a\u015fa\u011f\u0131daki komutla alabilirsiniz:<\/p>\n<pre><code>\naz container show --resource-group MyResourceGroup --name mycontainerapp --query \"ipAddress.fqdn\" --output tsv\n<\/pre>\n<p><\/code><\/p>\n<p>Elde etti\u011finiz FQDN'yi bir web taray\u0131c\u0131s\u0131na yap\u0131\u015ft\u0131rarak uygulaman\u0131za eri\u015fmeyi deneyin. \"Merhaba, Azure Konteynerlar\u0131!\" mesaj\u0131n\u0131 g\u00f6r\u00fcyorsan\u0131z, \u00f6zel Docker g\u00f6r\u00fcnt\u00fcn\u00fcz\u00fc Azure Container Registry'den Azure Container Instances'a ba\u015far\u0131yla da\u011f\u0131tm\u0131\u015fs\u0131n\u0131z demektir. Bu, bulutta kapsay\u0131c\u0131 tabanl\u0131 uygulamalar\u0131 \u00e7al\u0131\u015ft\u0131rman\u0131n en basit yollar\u0131ndan biridir ve uygulaman\u0131z\u0131n global \u00f6l\u00e7ekte eri\u015filebilir olmas\u0131n\u0131 sa\u011flar.<\/p>\n<div class=\"uzman-ipucu\">\n  Uzman \u0130pucu: ACI, anl\u0131k ve g\u00f6rev tabanl\u0131 i\u015f y\u00fckleri i\u00e7in maliyet ve h\u0131z a\u00e7\u0131s\u0131ndan avantajl\u0131 olsa da, uzun s\u00fcreli, y\u00fcksek \u00f6l\u00e7ekli ve karma\u015f\u0131k orkestrasyon gerektiren mikroservis mimarileri i\u00e7in Azure Kubernetes Service (AKS) daha uygun bir se\u00e7enektir.\n<\/div>\n<p><H2>Ger\u00e7ek D\u00fcnya Senaryosu: S\u00fcrekli Entegrasyon ve Teslimat (CI\/CD) ile Otomatik Da\u011f\u0131t\u0131m<\/H2><\/p>\n<p>\u015eimdiye kadar \u00f6zel Docker g\u00f6r\u00fcnt\u00fcm\u00fcz\u00fc olu\u015fturduk, Azure Container Registry'de depolad\u0131k ve Azure Container Instances \u00fczerinde manuel olarak da\u011f\u0131tt\u0131k. Ancak modern yaz\u0131l\u0131m geli\u015ftirme pratiklerinde bu s\u00fcre\u00e7lerin otomatikle\u015ftirilmesi, yani S\u00fcrekli Entegrasyon (CI) ve S\u00fcrekli Teslimat\/Da\u011f\u0131t\u0131m (CD) i\u015flem hatlar\u0131n\u0131n kurulmas\u0131 hayati \u00f6neme sahiptir. CI\/CD, kod de\u011fi\u015fikliklerinin daha h\u0131zl\u0131, daha g\u00fcvenli ve daha tutarl\u0131 bir \u015fekilde \u00fcretime al\u0131nmas\u0131n\u0131 sa\u011flar. Bu b\u00f6l\u00fcmde, basit bir CI\/CD senaryosunu ele alarak, kod de\u011fi\u015fikliklerinin otomatik olarak bir Docker g\u00f6r\u00fcnt\u00fcs\u00fcne d\u00f6n\u00fc\u015ft\u00fcr\u00fclmesini ve Azure'a da\u011f\u0131t\u0131lmas\u0131n\u0131 nas\u0131l sa\u011flayaca\u011f\u0131m\u0131z\u0131 inceleyece\u011fiz. Bu, yaz\u0131l\u0131m geli\u015ftirme d\u00f6ng\u00fcs\u00fcn\u00fc h\u0131zland\u0131r\u0131r ve insan hatalar\u0131n\u0131 minimize eder.<\/p>\n<p><H3>DevOps S\u00fcre\u00e7lerinde Docker ve Azure Konteyner Hizmetleri<\/H3><\/p>\n<p>DevOps felsefesi, geli\u015ftirme ve operasyon ekipleri aras\u0131ndaki i\u015fbirli\u011fini ve otomasyonu vurgular. Konteyner teknolojileri, DevOps s\u00fcre\u00e7lerinin temelini olu\u015fturur \u00e7\u00fcnk\u00fc uygulamalar\u0131 ve ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 paketleyerek \"bir kez in\u015fa et, her yerde \u00e7al\u0131\u015ft\u0131r\" ilkesini destekler. Bu, \u00f6zellikle CI\/CD i\u015flem hatlar\u0131nda b\u00fcy\u00fck fayda sa\u011flar:<\/p>\n<ul>\n<li><strong>Tutarl\u0131 Ortamlar:<\/strong> Geli\u015ftiricinin makinesindeki ortamdan \u00fcretim ortam\u0131na kadar her yerde ayn\u0131 kapsay\u0131c\u0131 g\u00f6r\u00fcnt\u00fcs\u00fcn\u00fcn kullan\u0131lmas\u0131, uyumsuzluk sorunlar\u0131n\u0131 ortadan kald\u0131r\u0131r.<\/li>\n<li><strong>H\u0131zl\u0131 Geri Bildirim:<\/strong> Otomatik testler ve da\u011f\u0131t\u0131mlar sayesinde geli\u015ftiriciler kod de\u011fi\u015fikliklerinin etkileri hakk\u0131nda an\u0131nda geri bildirim al\u0131rlar.<\/li>\n<li><strong>G\u00fcvenilir Da\u011f\u0131t\u0131mlar:<\/strong> Otomatikle\u015ftirilmi\u015f i\u015flem hatlar\u0131, manuel da\u011f\u0131t\u0131mlardan kaynaklanan insan hatalar\u0131n\u0131 azalt\u0131r ve her da\u011f\u0131t\u0131m\u0131n ayn\u0131 \u015fekilde yap\u0131lmas\u0131n\u0131 sa\u011flar.<\/li>\n<li><strong>H\u0131zl\u0131 Kurtarma:<\/strong> Geri alma i\u015flemleri, \u00f6nceden ba\u015far\u0131l\u0131 olmu\u015f bir g\u00f6r\u00fcnt\u00fcye i\u015faret edilerek kolayca yap\u0131labilir.<\/li>\n<\/ul>\n<p>Azure Container Registry (ACR), g\u00f6r\u00fcnt\u00fcler i\u00e7in merkezi bir depo g\u00f6revi g\u00f6r\u00fcrken, Azure Container Instances (ACI) h\u0131zl\u0131 ve esnek da\u011f\u0131t\u0131m u\u00e7 noktalar\u0131 olarak i\u015flev g\u00f6r\u00fcr. CI\/CD i\u015flem hatt\u0131m\u0131z\u0131 kurarken bu iki Azure hizmetini kullanaca\u011f\u0131z. \u00d6rne\u011fimizde GitHub Actions'\u0131 (Azure DevOps, GitLab CI\/CD veya Jenkins gibi di\u011fer ara\u00e7lar da kullan\u0131labilir) kullanarak basit bir CI\/CD ak\u0131\u015f\u0131 olu\u015ftural\u0131m.<\/p>\n<p>Senaryomuz \u015f\u00f6yle olacak: Uygulama kodumuz (<code>app.py<\/code>, <code>requirements.txt<\/code>, <code>Dockerfile<\/code>) bir GitHub deposunda bulunuyor. <code>main<\/code> dal\u0131na yap\u0131lan her push i\u015flemi, a\u015fa\u011f\u0131daki ad\u0131mlar\u0131 otomatik olarak tetikleyecek:<\/p>\n<ol>\n<li>GitHub deposundan kodu \u00e7ek.<\/li>\n<li>Docker g\u00f6r\u00fcnt\u00fcs\u00fcn\u00fc olu\u015ftur.<\/li>\n<li>Olu\u015fturulan g\u00f6r\u00fcnt\u00fcy\u00fc Azure Container Registry'ye (ACR) g\u00f6nder.<\/li>\n<li>ACR'deki yeni g\u00f6r\u00fcnt\u00fcy\u00fc kullanarak Azure Container Instances'a (ACI) da\u011f\u0131t.<\/li>\n<\/ol>\n<p>Bu otomasyonu sa\u011flamak i\u00e7in GitHub Actions kullanaca\u011f\u0131z. GitHub Actions, deponuzdaki <code>.github\/workflows<\/code> dizini alt\u0131na yerle\u015ftirilen YAML dosyalar\u0131yla tan\u0131mlanan i\u015f ak\u0131\u015flar\u0131 (workflows) sa\u011flar. Hassas bilgileri (ACR kullan\u0131c\u0131 ad\u0131 ve \u015fifresi gibi) do\u011frudan YAML dosyas\u0131na yazmak yerine GitHub Secrets kullanaca\u011f\u0131z. GitHub deponuzda a\u015fa\u011f\u0131daki s\u0131rlar\u0131 (secrets) tan\u0131mlaman\u0131z gerekecek:<\/p>\n<ul>\n<li><code>AZURE_ACR_USERNAME<\/code>: ACR y\u00f6netici kullan\u0131c\u0131 ad\u0131n\u0131z.<\/li>\n<li><code>AZURE_ACR_PASSWORD<\/code>: ACR y\u00f6netici \u015fifreniz.<\/li>\n<\/ul>\n<p>Bu bilgileri daha \u00f6nce <code>az acr credential show<\/code> komutlar\u0131yla alm\u0131\u015ft\u0131k.<\/p>\n<p>\u015eimdi <code>.github\/workflows\/deploy.yml<\/code> ad\u0131nda bir dosya olu\u015ftural\u0131m ve i\u00e7eri\u011fini a\u015fa\u011f\u0131daki gibi doldural\u0131m:<\/p>\n<pre><code>\n# .github\/workflows\/deploy.yml\nname: CI\/CD Pipeline for My Custom App\n\non:\n  push:\n    branches:\n      - main # main dal\u0131na yap\u0131lan her push'ta bu i\u015f ak\u0131\u015f\u0131n\u0131 tetikle\n\njobs:\n  build-and-deploy:\n    runs-on: ubuntu-latest # \u0130\u015f ak\u0131\u015f\u0131n\u0131n \u00e7al\u0131\u015faca\u011f\u0131 sanal makine ortam\u0131\n\n    steps:\n    - name: Kodu D\u0131\u015far\u0131 \u00c7ek\n      uses: actions\/checkout@v3 # GitHub deposundaki kodu sanal makineye \u00e7eker\n\n    - name: Docker Login to ACR\n      uses: docker\/login-action@v2 # Docker'\u0131 Azure Container Registry'ye giri\u015f yapmak i\u00e7in kullan\u0131r\n      with:\n        registry: mycustomacr.azurecr.io # Kendi ACR ad\u0131n\u0131z\u0131 buraya yaz\u0131n\n        username: ${{ secrets.AZURE_ACR_USERNAME }} # GitHub Secret'tan ACR kullan\u0131c\u0131 ad\u0131n\u0131 al\u0131r\n        password: ${{ secrets.AZURE_ACR_PASSWORD }} # GitHub Secret'tan ACR \u015fifresini al\u0131r\n\n    - name: Docker G\u00f6r\u00fcnt\u00fcs\u00fcn\u00fc Olu\u015ftur ve ACR'ye G\u00f6nder\n      run: |\n        # G\u00f6r\u00fcnt\u00fcy\u00fc olu\u015ftur. Etiket olarak GitHub'\u0131n SHA's\u0131n\u0131 kullanmak benzersizlik sa\u011flar.\n        docker build . -t mycustomacr.azurecr.io\/my-custom-app:${{ github.sha }}\n        # G\u00f6r\u00fcnt\u00fcy\u00fc ACR'ye g\u00f6nder\n        docker push mycustomacr.azurecr.io\/my-custom-app:${{ github.sha }}\n      env:\n        # Ortam de\u011fi\u015fkeni olarak ACR sunucu ad\u0131n\u0131 tan\u0131mla\n        ACR_SERVER: mycustomacr.azurecr.io # Kendi ACR ad\u0131n\u0131z\u0131 buraya yaz\u0131n\n\n    - name: ACI'ye Da\u011f\u0131t\n      uses: azure\/container-instances@v1 # ACI'ye da\u011f\u0131t\u0131m i\u00e7in Azure Container Instances aksiyonunu kullan\u0131r\n      with:\n        resource-group: MyResourceGroup # Kapsay\u0131c\u0131n\u0131n da\u011f\u0131t\u0131laca\u011f\u0131 kaynak grubu\n        name: mycontainerapp-ci-cd # Yeni ACI \u00f6rne\u011finin ad\u0131\n        image: mycustomacr.azurecr.io\/my-custom-app:${{ github.sha }} # ACR'deki g\u00f6r\u00fcnt\u00fcm\u00fcz\u00fc kullan\n        ports: 80 # Uygulaman\u0131n dinledi\u011fi port\n        dns-name-label: mycicdcontainer-${{ github.run_id }} # Benzersiz bir DNS ad\u0131 etiketi olu\u015ftur\n        registry-username: ${{ secrets.AZURE_ACR_USERNAME }} # ACR kullan\u0131c\u0131 ad\u0131\n        registry-password: ${{ secrets.AZURE_ACR_PASSWORD }} # ACR \u015fifresi\n        location: westeurope # Kapsay\u0131c\u0131n\u0131n da\u011f\u0131t\u0131laca\u011f\u0131 Azure b\u00f6lgesi\n<\/pre>\n<p><\/code><\/p>\n<p>Bu YAML dosyas\u0131n\u0131 GitHub deponuza ekledikten sonra, <code>main<\/code> dal\u0131na bir kod de\u011fi\u015fikli\u011fi g\u00f6nderdi\u011finizde, GitHub Actions otomatik olarak tetiklenecek ve uygulaman\u0131z\u0131 Azure Container Registry \u00fczerinden Azure Container Instances'a da\u011f\u0131tacakt\u0131r. Da\u011f\u0131t\u0131m\u0131n DNS ad\u0131, her \u00e7al\u0131\u015ft\u0131rmada benzersiz olacak \u015fekilde <code>mycicdcontainer-[run_id].[b\u00f6lge].azurecontainer.io<\/code> format\u0131nda olu\u015fturulacakt\u0131r. Bu, s\u00fcrekli ve g\u00fcvenilir bir da\u011f\u0131t\u0131m s\u00fcreci sa\u011flar, b\u00f6ylece geli\u015ftirme ekibi daha \u00e7ok kod yazmaya ve yenilik\u00e7i \u00e7\u00f6z\u00fcmler \u00fcretmeye odaklanabilir.<\/p>\n<div class=\"uzman-ipucu\">\n  Uzman \u0130pucu: Da\u011f\u0131t\u0131m stratejileri konusunda, sadece bir ACI \u00f6rne\u011fini g\u00fcncellemek yerine, yeni bir ACI \u00f6rne\u011fi olu\u015fturup eskiyi silmek (blue\/green deployment) veya trafik y\u00f6netimi ile a\u015famal\u0131 ge\u00e7i\u015f yapmak (canary deployment) daha g\u00fcvenli ve kesintisiz da\u011f\u0131t\u0131mlar sa\u011flayabilir.\n<\/div>\n<p><H2>\u0130leri D\u00fczey \u0130pu\u00e7lar\u0131 ve En \u0130yi Uygulamalar<\/H2><\/p>\n<p>Art\u0131k \u00f6zel Docker g\u00f6r\u00fcnt\u00fcm\u00fcz\u00fc Azure Container Registry'de depolay\u0131p Azure Container Instances'a otomatik olarak da\u011f\u0131tabiliyoruz. Ancak, modern bulut tabanl\u0131 uygulamalar\u0131 geli\u015ftirirken sadece i\u015flevsellik de\u011fil, ayn\u0131 zamanda performans, maliyet etkinli\u011fi ve g\u00fcvenlik de b\u00fcy\u00fck \u00f6nem ta\u015f\u0131r. Bu b\u00f6l\u00fcmde, daha deneyimli kullan\u0131c\u0131lar i\u00e7in baz\u0131 ileri d\u00fczey ipu\u00e7lar\u0131 ve en iyi uygulamalar\u0131 ele alarak, konteyner tabanl\u0131 \u00e7\u00f6z\u00fcmlerinizi daha optimize ve g\u00fcvenli hale getirmenize yard\u0131mc\u0131 olaca\u011f\u0131z.<\/p>\n<p><H3>Maliyet Optimizasyonu ve Performans \u0130yile\u015ftirmeleri<\/H3><\/p>\n<p>Azure'da kapsay\u0131c\u0131 i\u015f y\u00fcklerini \u00e7al\u0131\u015ft\u0131r\u0131rken maliyeti kontrol alt\u0131nda tutmak ve performans\u0131 en \u00fcst d\u00fczeye \u00e7\u0131karmak kritik \u00f6neme sahiptir:<\/p>\n<ul>\n<li><strong>Dockerfile Optimizasyonu:<\/strong>\n<ul>\n<li><strong>K\u00fc\u00e7\u00fck Temel G\u00f6r\u00fcnt\u00fcler Kullan\u0131n:<\/strong> <code>alpine<\/code> veya <code>slim<\/code> etiketli temel g\u00f6r\u00fcnt\u00fcler, gereksiz ba\u011f\u0131ml\u0131l\u0131klar\u0131 i\u00e7ermedi\u011fi i\u00e7in \u00e7ok daha k\u00fc\u00e7\u00fck son g\u00f6r\u00fcnt\u00fcler elde etmenizi sa\u011flar. Bu durum, hem depolama maliyetlerini d\u00fc\u015f\u00fcr\u00fcr hem de g\u00f6r\u00fcnt\u00fc indirme s\u00fcrelerini k\u0131salt\u0131r.<\/li>\n<li><strong>\u00c7ok A\u015famal\u0131 (Multi-stage) Derlemeler:<\/strong> Geli\u015ftirme\/derleme ara\u00e7lar\u0131n\u0131 ve ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 nihai \u00fcretim g\u00f6r\u00fcnt\u00fcs\u00fcnden ay\u0131r\u0131n. \u0130lk a\u015famada uygulaman\u0131z\u0131 derleyin, ikinci a\u015famada sadece derlenmi\u015f ikili dosyalar\u0131 veya \u00e7al\u0131\u015fma zaman\u0131 ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 i\u00e7eren minimal bir g\u00f6r\u00fcnt\u00fcye kopyalay\u0131n. Bu, g\u00f6r\u00fcnt\u00fc boyutunu \u00f6nemli \u00f6l\u00e7\u00fcde k\u00fc\u00e7\u00fclt\u00fcr.<\/li>\n<li><strong>Katman \u00d6nbellekleme:<\/strong> Dockerfile'\u0131n\u0131zdaki komutlar\u0131n s\u0131ras\u0131 \u00f6nemlidir. S\u0131k de\u011fi\u015fen komutlar\u0131 (\u00f6rne\u011fin, <code>COPY . .<\/code>) daha sonra, seyrek de\u011fi\u015fen komutlar\u0131 (\u00f6rne\u011fin, ba\u011f\u0131ml\u0131l\u0131k kurulumu <code>RUN pip install<\/code>) daha \u00f6nce konumland\u0131rarak Docker'\u0131n katman \u00f6nbelleklemesinden maksimum d\u00fczeyde yararlan\u0131n.<\/li>\n<li><code>.dockerignore<\/code> Dosyas\u0131 Kullan\u0131m\u0131: Git depolar\u0131nda bulunan <code>.git<\/code>, <code>.DS_Store<\/code>, <code>node_modules<\/code> (e\u011fer son g\u00f6r\u00fcnt\u00fcye dahil edilmeyecekse) gibi gereksiz dosyalar\u0131n ba\u011flama kopyalanmas\u0131n\u0131 engelleyerek derleme ba\u011flam\u0131n\u0131n boyutunu k\u00fc\u00e7\u00fclt\u00fcn ve g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 azalt\u0131n.<\/li>\n<\/ul>\n<\/li>\n<li><strong>ACI Kaynak Y\u00f6netimi:<\/strong> ACI'ye atad\u0131\u011f\u0131n\u0131z CPU ve bellek kaynaklar\u0131n\u0131 dikkatlice planlay\u0131n. Gere\u011finden fazla kaynak tahsis etmek maliyetleri art\u0131r\u0131rken, yetersiz kaynaklar performans sorunlar\u0131na yol a\u00e7abilir. Uygulaman\u0131z\u0131n y\u00fck testi sonu\u00e7lar\u0131na g\u00f6re optimal kaynaklar\u0131 belirleyin. Azure Portal veya Azure CLI \u00fczerinden kapsay\u0131c\u0131 \u00f6rneklerinizin metriklerini izleyerek performans darbo\u011fazlar\u0131n\u0131 tespit edebilirsiniz.<\/li>\n<li><strong>Kapsay\u0131c\u0131 Otomatik Durdurma:<\/strong> G\u00f6rev tabanl\u0131 veya k\u0131sa \u00f6m\u00fcrl\u00fc i\u015f y\u00fckleri i\u00e7in, i\u015f tamamland\u0131\u011f\u0131nda kapsay\u0131c\u0131y\u0131 otomatik olarak durduracak mekanizmalar (\u00f6rne\u011fin, kodunuzun sonunda <code>sys.exit(0)<\/code>) kullanarak sadece \u00e7al\u0131\u015fma s\u00fcresi i\u00e7in \u00f6deme yapman\u0131z\u0131 sa\u011flay\u0131n.<\/li>\n<\/ul>\n<div class=\"uzman-ipucu\">\n  Uzman \u0130pucu: Uygulama g\u00fcnl\u00fcklerinizi (logs) Azure Log Analytics veya Azure Monitor gibi merkezi bir log y\u00f6netimi \u00e7\u00f6z\u00fcm\u00fcne y\u00f6nlendirmek, problem tespiti ve performans analizi i\u00e7in kritik \u00f6neme sahiptir.\n<\/div>\n<p><H3>G\u00fcvenlik Konular\u0131 ve Kimlik Do\u011frulama<\/H3><\/p>\n<p>Bulutta g\u00fcvenlik her zaman birinci \u00f6ncelik olmal\u0131d\u0131r. Konteyner tabanl\u0131 uygulamalar i\u00e7in dikkat edilmesi gereken \u00f6nemli g\u00fcvenlik noktalar\u0131:<\/p>\n<ul>\n<li><strong>En Az Ayr\u0131cal\u0131k Prensibi:<\/strong> Uygulamalar\u0131n\u0131za ve CI\/CD i\u015flem hatlar\u0131n\u0131za yaln\u0131zca ihtiya\u00e7 duyduklar\u0131 ayr\u0131cal\u0131klar\u0131 verin. \u00d6rne\u011fin, ACR'ye eri\u015fim i\u00e7in y\u00f6netici kullan\u0131c\u0131 hesab\u0131 yerine, yaln\u0131zca g\u00f6r\u00fcnt\u00fc \u00e7ekme (pull) yetkisine sahip bir Hizmet Sorumlusu (Service Principal) kullan\u0131n. Bu, g\u00fcvenlik ihlali durumunda potansiyel zarar\u0131 s\u0131n\u0131rlar.<\/li>\n<li><strong>Hassas Veri Y\u00f6netimi:<\/strong> API anahtarlar\u0131, veritaban\u0131 kimlik bilgileri gibi hassas bilgileri Docker g\u00f6r\u00fcnt\u00fclerine veya ortam de\u011fi\u015fkenlerine do\u011frudan g\u00f6mmekten ka\u00e7\u0131n\u0131n. Bunun yerine, Azure Key Vault gibi g\u00fcvenli bir s\u0131r y\u00f6netimi \u00e7\u00f6z\u00fcm\u00fc kullan\u0131n ve bu s\u0131rlar\u0131 \u00e7al\u0131\u015fma zaman\u0131nda uygulaman\u0131za enjekte edin. ACI, Key Vault'tan s\u0131rlar\u0131 almak i\u00e7in y\u00f6netilen kimlikleri kullanmay\u0131 destekler.<\/li>\n<li><strong>G\u00fcvenlik Taramas\u0131:<\/strong> ACR'ye y\u00fckledi\u011finiz Docker g\u00f6r\u00fcnt\u00fclerini g\u00fcvenlik a\u00e7\u0131klar\u0131 i\u00e7in d\u00fczenli olarak taray\u0131n. Azure Security Center veya \u00fc\u00e7\u00fcnc\u00fc taraf tarama ara\u00e7lar\u0131, bilinen g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 ve zafiyetleri tespit etmeye yard\u0131mc\u0131 olabilir. G\u00fcvenlik a\u00e7\u0131\u011f\u0131 bulunan g\u00f6r\u00fcnt\u00fclerin da\u011f\u0131t\u0131m\u0131n\u0131 engelleyen politikalar uygulay\u0131n.<\/li>\n<li><strong>A\u011f G\u00fcvenli\u011fi:<\/strong> ACI \u00f6rneklerinizi bir Azure Sanal A\u011f'\u0131na (VNet) da\u011f\u0131tarak \u00f6zel IP adresleri atayabilir, a\u011f g\u00fcvenlik gruplar\u0131 (NSG) ile gelen ve giden trafi\u011fi kontrol edebilir ve di\u011fer Azure kaynaklar\u0131n\u0131za (\u00f6rne\u011fin, veritabanlar\u0131) g\u00fcvenli bir \u015fekilde eri\u015fmelerini sa\u011flayabilirsiniz. Bu, kapsay\u0131c\u0131lar\u0131n\u0131z\u0131n internete do\u011frudan a\u00e7\u0131k olmas\u0131n\u0131 engelleyerek sald\u0131r\u0131 y\u00fczeyini k\u00fc\u00e7\u00fclt\u00fcr.<\/li>\n<li><strong>Temel G\u00f6r\u00fcnt\u00fc G\u00fcncelleme Politikas\u0131:<\/strong> Kullan\u0131lan temel Docker g\u00f6r\u00fcnt\u00fclerinin d\u00fczenli olarak g\u00fcncellendi\u011finden emin olun. Temel g\u00f6r\u00fcnt\u00fclerde tespit edilen g\u00fcvenlik a\u00e7\u0131klar\u0131, uygulaman\u0131z\u0131n da g\u00fcvenli\u011fini tehlikeye atabilir. ACR Tasks, temel g\u00f6r\u00fcnt\u00fcler g\u00fcncellendi\u011finde otomatik olarak yeni uygulama g\u00f6r\u00fcnt\u00fcs\u00fc olu\u015fturma yetene\u011fi sunar.<\/li>\n<\/ul>\n<p>Bu ileri d\u00fczey ipu\u00e7lar\u0131 ve en iyi uygulamalar, Azure'da konteynerle\u015ftirilmi\u015f uygulamalar\u0131n\u0131z\u0131n daha sa\u011flam, g\u00fcvenli ve maliyet etkin olmas\u0131n\u0131 sa\u011flayarak uzun vadede ba\u015far\u0131l\u0131 olman\u0131za yard\u0131mc\u0131 olacakt\u0131r. S\u00fcrekli \u00f6\u011frenme ve g\u00fcvenlik g\u00fcncellemelerini takip etmek, bulut tabanl\u0131 \u00e7\u00f6z\u00fcmlerdeki ba\u015far\u0131n\u0131n anahtar\u0131d\u0131r.<\/p>\n<p><H2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular<\/H2><\/p>\n<p>Bu kapsaml\u0131 rehberde, modern uygulama geli\u015ftirme s\u00fcre\u00e7lerinin temel ta\u015flar\u0131ndan biri olan kapsay\u0131c\u0131la\u015ft\u0131rmay\u0131, \u00f6zel Docker g\u00f6r\u00fcnt\u00fcleri olu\u015fturmaktan Azure Container Registry'de g\u00fcvenle depolamaya ve Azure Container Instances \u00fczerinde h\u0131zla da\u011f\u0131tmaya kadar ad\u0131m ad\u0131m ele ald\u0131k. Kapsay\u0131c\u0131la\u015ft\u0131rman\u0131n neden bu kadar kritik oldu\u011funu, <code>Dockerfile<\/code>'\u0131n nas\u0131l haz\u0131rland\u0131\u011f\u0131n\u0131, yerel testlerin nas\u0131l yap\u0131ld\u0131\u011f\u0131n\u0131 ve Azure'\u0131n sundu\u011fu ACR ve ACI hizmetlerinin avantajlar\u0131n\u0131 derinlemesine inceledik. Ayr\u0131ca, ger\u00e7ek d\u00fcnya senaryolar\u0131na uygun bir CI\/CD i\u015flem hatt\u0131n\u0131n GitHub Actions ile nas\u0131l kurulabilece\u011fini g\u00f6stererek, otomatik da\u011f\u0131t\u0131m\u0131n g\u00fcc\u00fcn\u00fc ortaya koyduk. Son olarak, maliyet optimizasyonu, performans iyile\u015ftirmeleri ve g\u00fcvenlik gibi ileri d\u00fczey ipu\u00e7lar\u0131yla bulut tabanl\u0131 konteyner uygulamalar\u0131n\u0131z\u0131 daha sa\u011flam hale getirme yollar\u0131n\u0131 \u00f6\u011frendik.<\/p>\n<p>\u00d6zetle, Azure Container Registry ve Azure Container Instances ikilisi, geli\u015ftiricilere ve DevOps m\u00fchendislerine, Dockerize edilmi\u015f uygulamalar\u0131n\u0131 bulutta h\u0131zl\u0131, g\u00fcvenli ve \u00f6l\u00e7eklenebilir bir \u015fekilde da\u011f\u0131tma yetene\u011fi sunar. \u0130ster basit bir web uygulamas\u0131, ister g\u00f6rev tabanl\u0131 bir mikroservis olsun, bu hizmetler uygulama ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fc basitle\u015ftirir ve \"bir kez in\u015fa et, her yerde \u00e7al\u0131\u015ft\u0131r\" felsefesini tam anlam\u0131yla hayata ge\u00e7irir. Bu rehberin, kendi \u00f6zel konteynerle\u015ftirilmi\u015f \u00e7\u00f6z\u00fcmlerinizi Azure'da ba\u015far\u0131yla hayata ge\u00e7irmeniz i\u00e7in sa\u011flam bir temel olu\u015fturdu\u011funu umuyoruz. Unutmay\u0131n, bulut teknolojileri s\u00fcrekli geli\u015fiyor, bu y\u00fczden en g\u00fcncel pratikleri takip etmek ve s\u00fcrekli \u00f6\u011frenmek ba\u015far\u0131n\u0131z i\u00e7in anahtard\u0131r.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<ul>\n<li>\n<h4>Docker g\u00f6r\u00fcnt\u00fcs\u00fcn\u00fc yerel olarak nas\u0131l test edebilirim?<\/h4>\n<p>Docker g\u00f6r\u00fcnt\u00fcs\u00fcn\u00fc yerel olarak test etmek i\u00e7in <code>docker build -t [g\u00f6r\u00fcnt\u00fc_ad\u0131]:[tag] .<\/code> komutu ile g\u00f6r\u00fcnt\u00fcy\u00fc olu\u015fturduktan sonra, <code>docker run -p [yerel_port]:[konteyner_port] [g\u00f6r\u00fcnt\u00fc_ad\u0131]:[tag]<\/code> komutu ile \u00e7al\u0131\u015ft\u0131rabilirsiniz. \u00d6rne\u011fin, <code>docker run -p 8080:80 my-custom-app:v1<\/code> komutu yerel makinenizin 8080 portunu kapsay\u0131c\u0131n\u0131n 80 portuna e\u015fler. Ard\u0131ndan web taray\u0131c\u0131n\u0131zda veya cURL ile <code>http:\/\/localhost:[yerel_port]<\/code> adresine ba\u011flanarak test edebilirsiniz.<\/p>\n<\/li>\n<li>\n<h4>ACR ve Docker Hub aras\u0131ndaki temel fark nedir?<\/h4>\n<p>Docker Hub, genel ve \u00f6zel Docker g\u00f6r\u00fcnt\u00fcleri i\u00e7in pop\u00fcler bir bulut tabanl\u0131 kay\u0131t defteridir ve geni\u015f bir topluluk taraf\u0131ndan kullan\u0131l\u0131r. Azure Container Registry (ACR) ise Microsoft Azure ekosistemine tamamen entegre edilmi\u015f, \u00f6zel bir Docker kay\u0131t defteri hizmetidir. ACR, Azure'daki di\u011fer hizmetlerle (AKS, ACI, Web Apps) daha s\u0131k\u0131 entegrasyon, VNet deste\u011fi, geli\u015fmi\u015f g\u00fcvenlik \u00f6zellikleri (Azure Active Directory entegrasyonu gibi), co\u011frafi \u00e7o\u011faltma ve Azure'\u0131n kurumsal yeteneklerinden faydalanma imkan\u0131 sunar. \u00d6zellikle hassas veya \u00f6zel g\u00f6r\u00fcnt\u00fcleri depolamak i\u00e7in ACR daha g\u00fcvenli ve kurumsal bir \u00e7\u00f6z\u00fcmd\u00fcr.<\/p>\n<\/li>\n<li>\n<h4>ACI, AKS'e g\u00f6re hangi durumlarda tercih edilmeli?<\/h4>\n<p>Azure Container Instances (ACI), tekil kapsay\u0131c\u0131lar\u0131 veya k\u00fc\u00e7\u00fck, ba\u011f\u0131ms\u0131z kapsay\u0131c\u0131 gruplar\u0131n\u0131 h\u0131zl\u0131ca ve orkestrasyon karma\u015f\u0131kl\u0131\u011f\u0131 olmadan \u00e7al\u0131\u015ft\u0131rmak istedi\u011finizde idealdir. Sunucusuz bir modelde h\u0131zl\u0131 prototipleme, g\u00f6rev tabanl\u0131 i\u015f y\u00fckleri (\u00f6rne\u011fin, bir defal\u0131k veri i\u015fleme i\u015fleri), burst i\u015f y\u00fckleri veya basit web uygulamalar\u0131 i\u00e7in uygundur. Azure Kubernetes Service (AKS) ise karma\u015f\u0131k mikroservis mimarileri, y\u00fcksek \u00f6l\u00e7ekli ve s\u00fcrekli \u00e7al\u0131\u015fan uygulamalar, geli\u015fmi\u015f orkestrasyon, hizmet ke\u015ffi, otomatik hata tolerans\u0131, y\u00fck dengeleme ve s\u00fcrekli da\u011f\u0131t\u0131m gerektiren senaryolar i\u00e7in tasarlanm\u0131\u015ft\u0131r. AKS, ACI'ye g\u00f6re daha fazla y\u00f6netim karma\u015f\u0131kl\u0131\u011f\u0131 sunsa da, b\u00fcy\u00fck \u00f6l\u00e7ekli ve kritik i\u015f y\u00fckleri i\u00e7in daha fazla kontrol ve esneklik sa\u011flar.<\/p>\n<\/li>\n<li>\n<h4>Dockerfile optimizasyonu i\u00e7in ne gibi ipu\u00e7lar\u0131 var?<\/h4>\n<p>Dockerfile optimizasyonu i\u00e7in en iyi uygulamalar \u015funlard\u0131r: Azalt\u0131lm\u0131\u015f temel g\u00f6r\u00fcnt\u00fcler kullan\u0131n (\u00f6rne\u011fin, <code>-slim<\/code> veya <code>-alpine<\/code> etiketli g\u00f6r\u00fcnt\u00fcler), her bir <code>RUN<\/code> komutunun ayr\u0131 bir katman olu\u015fturdu\u011funu unutun ve gereksiz katmanlar\u0131 birle\u015ftirmek i\u00e7in birden fazla komutu tek bir <code>RUN<\/code> i\u00e7inde birle\u015ftirin, \u00e7ok a\u015famal\u0131 (multi-stage) derlemeler kullanarak derleme ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 nihai \u00fcretim g\u00f6r\u00fcnt\u00fcs\u00fcnden ay\u0131r\u0131n ve b\u00f6ylece g\u00f6r\u00fcnt\u00fc boyutunu k\u00fc\u00e7\u00fclt\u00fcn, \u00f6nbellekleme katmanlar\u0131n\u0131 ak\u0131ll\u0131ca kullan\u0131n (s\u0131k de\u011fi\u015fen \u015feyleri sona do\u011fru koyun), ve <code>.dockerignore<\/code> dosyas\u0131n\u0131 kullanarak gereksiz dosyalar\u0131n derleme ba\u011flam\u0131na kopyalanmas\u0131n\u0131 engelleyin.<\/p>\n<\/li>\n<li>\n<h4>Azure Container Instances'\u0131 mobil uygulamalarla nas\u0131l entegre edebilirim?<\/h4>\n<p>Azure Container Instances do\u011frudan mobil uygulamalarla entegre edilmez, ancak mobil uygulamalar\u0131n\u0131z\u0131n arka u\u00e7 hizmetlerini bar\u0131nd\u0131rmak i\u00e7in ACI'yi kullanabilirsiniz. \u00d6rne\u011fin, mobil uygulaman\u0131z\u0131n API isteklerini i\u015fleyen bir mikroservisi ACI \u00fczerinde \u00e7al\u0131\u015ft\u0131rabilir ve bu mikroservise bir API Gateway (\u00f6rne\u011fin, Azure API Management) veya do\u011frudan genel bir DNS ad\u0131 arac\u0131l\u0131\u011f\u0131yla eri\u015fim sa\u011flayabilirsiniz. Mobil uygulaman\u0131z, bu API u\u00e7 noktas\u0131na istek g\u00f6ndererek ACI'deki hizmetinizle ileti\u015fim kurabilir. Bu \u015fekilde, mobil uygulaman\u0131z\u0131n ihtiyac\u0131 olan sunucu taraf\u0131 mant\u0131\u011f\u0131 ACI \u00fczerinde esnek ve \u00f6l\u00e7eklenebilir bir \u015fekilde \u00e7al\u0131\u015ft\u0131r\u0131labilir.<\/p>\n<\/li>\n<\/ul>\n<style>\n  \/* Mobil uyumlu HTML \u00f6rne\u011fi *\/\n  body {\n    font-family: Arial, sans-serif;\n    line-height: 1.6;\n    margin: 0;\n    padding: 20px;\n    background-color: #f4f4f4;\n    color: #333;\n  }\n  .uzman-ipucu {\n    background-color: #e0f2f7;\n    border-left: 5px solid #2196f3;\n    margin: 15px 0;\n    padding: 10px 20px;\n    font-style: italic;\n    color: #0d47a1;\n  }\n  pre {\n    background-color: #272822;\n    color: #f8f8f2;\n    padding: 10px;\n    border-radius: 5px;\n    overflow-x: auto;\n    font-size: 0.9em;\n  }\n  code {\n    font-family: 'Consolas', 'Monaco', monospace;\n  }\n  h1, h2, h3 {\n    color: #2c3e50;\n  }\n  ul {\n    list-style-type: disc;\n    margin-left: 20px;\n  }\n  @media (max-width: 768px) {\n    body {\n      padding: 10px;\n    }\n    h1 {\n      font-size: 1.8em;\n    }\n    h2 {\n      font-size: 1.5em;\n    }\n    h3 {\n      font-size: 1.2em;\n    }\n    .uzman-ipucu {\n      padding: 10px 15px;\n    }\n    \/* S\u0131k\u00e7a Sorulan Sorular b\u00f6l\u00fcm\u00fcn\u00fc mobil cihazlarda daha okunakl\u0131 hale getirelim *\/\n    .sss-item {\n        margin-bottom: 15px;\n        padding: 10px;\n        border: 1px solid #ddd;\n        border-radius: 5px;\n        background-color: #fff;\n    }\n    .sss-item h4 {\n        margin-top: 0;\n        margin-bottom: 5px;\n        color: #0056b3;\n    }\n  }\n<\/style>\n","protected":false},"excerpt":{"rendered":"\u00d6zel Docker G\u00f6r\u00fcnt\u00fcs\u00fc Olu\u015fturma ve Azure&#8217;da Da\u011f\u0131tma Rehberi Modern uygulama geli\u015ftirme s\u00fcre\u00e7lerinde konteynerizasyon, yaz\u0131l\u0131mlar\u0131n da\u011f\u0131t\u0131m\u0131n\u0131, y\u00f6netimini ve \u00f6l\u00e7eklendirilmesini&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":[1],"tags":[],"class_list":{"0":"post-32372","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","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>Kapsay\u0131c\u0131la\u015ft\u0131rma Neden Bu Kadar \u00d6nemli? Temel Kavramlara Giri\u015f<\/title>\n<meta name=\"description\" content=\"Modern uygulama geli\u015ftirme s\u00fcre\u00e7lerinde konteynerizasyon, yaz\u0131l\u0131mlar\u0131n da\u011f\u0131t\u0131m\u0131n\u0131, y\u00f6netimini ve \u00f6l\u00e7eklendirilmesini kolayla\u015ft\u0131ran devrim niteli\u011finde bir teknolojidir. Peki, kendi \u00f6zel Docker g\u00f6r\u00fcnt\u00fcn\u00fcz\u00fc olu\u015fturup bunu Azure Container Registry&#039;de g\u00fcvenle depolayarak Azure Container Instances \u00fczerinde nas\u0131l h\u0131zl\u0131 ve maliyet etkin bir \u015fekilde \u00e7al\u0131\u015ft\u0131rabilirsiniz? Bu kapsaml\u0131 rehberde, bu sorular\u0131n yan\u0131tlar\u0131n\u0131 ad\u0131m ad\u0131m ke\u015ffedecek, bulut tabanl\u0131 konteyner da\u011f\u0131t\u0131m\u0131n\u0131n temel prensiplerini ve pratik uygulamalar\u0131n\u0131 derinlemesine inceleyece\u011fiz.\" \/>\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\/kapsayicilastirma-neden-bu-kadar-onemli-temel-kavramlara-giris\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kapsay\u0131c\u0131la\u015ft\u0131rma Neden Bu Kadar \u00d6nemli? Temel Kavramlara Giri\u015f\" \/>\n<meta property=\"og:description\" content=\"Modern uygulama geli\u015ftirme s\u00fcre\u00e7lerinde konteynerizasyon, yaz\u0131l\u0131mlar\u0131n da\u011f\u0131t\u0131m\u0131n\u0131, y\u00f6netimini ve \u00f6l\u00e7eklendirilmesini kolayla\u015ft\u0131ran devrim niteli\u011finde bir teknolojidir. Peki, kendi \u00f6zel Docker g\u00f6r\u00fcnt\u00fcn\u00fcz\u00fc olu\u015fturup bunu Azure Container Registry&#039;de g\u00fcvenle depolayarak Azure Container Instances \u00fczerinde nas\u0131l h\u0131zl\u0131 ve maliyet etkin bir \u015fekilde \u00e7al\u0131\u015ft\u0131rabilirsiniz? Bu kapsaml\u0131 rehberde, bu sorular\u0131n yan\u0131tlar\u0131n\u0131 ad\u0131m ad\u0131m ke\u015ffedecek, bulut tabanl\u0131 konteyner da\u011f\u0131t\u0131m\u0131n\u0131n temel prensiplerini ve pratik uygulamalar\u0131n\u0131 derinlemesine inceleyece\u011fiz.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/kapsayicilastirma-neden-bu-kadar-onemli-temel-kavramlara-giris\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-20T22:01:50+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=\"33 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kapsayicilastirma-neden-bu-kadar-onemli-temel-kavramlara-giris\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kapsayicilastirma-neden-bu-kadar-onemli-temel-kavramlara-giris\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Kapsay\u0131c\u0131la\u015ft\u0131rma Neden Bu Kadar \u00d6nemli? Temel Kavramlara Giri\u015f\",\"datePublished\":\"2025-10-20T22:01:50+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kapsayicilastirma-neden-bu-kadar-onemli-temel-kavramlara-giris\/\"},\"wordCount\":5885,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/kapsayicilastirma-neden-bu-kadar-onemli-temel-kavramlara-giris\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kapsayicilastirma-neden-bu-kadar-onemli-temel-kavramlara-giris\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/kapsayicilastirma-neden-bu-kadar-onemli-temel-kavramlara-giris\/\",\"name\":\"Kapsay\u0131c\u0131la\u015ft\u0131rma Neden Bu Kadar \u00d6nemli? Temel Kavramlara Giri\u015f\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-20T22:01:50+00:00\",\"description\":\"Modern uygulama geli\u015ftirme s\u00fcre\u00e7lerinde konteynerizasyon, yaz\u0131l\u0131mlar\u0131n da\u011f\u0131t\u0131m\u0131n\u0131, y\u00f6netimini ve \u00f6l\u00e7eklendirilmesini kolayla\u015ft\u0131ran devrim niteli\u011finde bir teknolojidir. Peki, kendi \u00f6zel Docker g\u00f6r\u00fcnt\u00fcn\u00fcz\u00fc olu\u015fturup bunu Azure Container Registry'de g\u00fcvenle depolayarak Azure Container Instances \u00fczerinde nas\u0131l h\u0131zl\u0131 ve maliyet etkin bir \u015fekilde \u00e7al\u0131\u015ft\u0131rabilirsiniz? Bu kapsaml\u0131 rehberde, bu sorular\u0131n yan\u0131tlar\u0131n\u0131 ad\u0131m ad\u0131m ke\u015ffedecek, bulut tabanl\u0131 konteyner da\u011f\u0131t\u0131m\u0131n\u0131n temel prensiplerini ve pratik uygulamalar\u0131n\u0131 derinlemesine inceleyece\u011fiz.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kapsayicilastirma-neden-bu-kadar-onemli-temel-kavramlara-giris\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/kapsayicilastirma-neden-bu-kadar-onemli-temel-kavramlara-giris\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kapsayicilastirma-neden-bu-kadar-onemli-temel-kavramlara-giris\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kapsay\u0131c\u0131la\u015ft\u0131rma Neden Bu Kadar \u00d6nemli? Temel Kavramlara Giri\u015f\"}]},{\"@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":"Kapsay\u0131c\u0131la\u015ft\u0131rma Neden Bu Kadar \u00d6nemli? Temel Kavramlara Giri\u015f","description":"Modern uygulama geli\u015ftirme s\u00fcre\u00e7lerinde konteynerizasyon, yaz\u0131l\u0131mlar\u0131n da\u011f\u0131t\u0131m\u0131n\u0131, y\u00f6netimini ve \u00f6l\u00e7eklendirilmesini kolayla\u015ft\u0131ran devrim niteli\u011finde bir teknolojidir. Peki, kendi \u00f6zel Docker g\u00f6r\u00fcnt\u00fcn\u00fcz\u00fc olu\u015fturup bunu Azure Container Registry'de g\u00fcvenle depolayarak Azure Container Instances \u00fczerinde nas\u0131l h\u0131zl\u0131 ve maliyet etkin bir \u015fekilde \u00e7al\u0131\u015ft\u0131rabilirsiniz? Bu kapsaml\u0131 rehberde, bu sorular\u0131n yan\u0131tlar\u0131n\u0131 ad\u0131m ad\u0131m ke\u015ffedecek, bulut tabanl\u0131 konteyner da\u011f\u0131t\u0131m\u0131n\u0131n temel prensiplerini ve pratik uygulamalar\u0131n\u0131 derinlemesine inceleyece\u011fiz.","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\/kapsayicilastirma-neden-bu-kadar-onemli-temel-kavramlara-giris\/","og_locale":"tr_TR","og_type":"article","og_title":"Kapsay\u0131c\u0131la\u015ft\u0131rma Neden Bu Kadar \u00d6nemli? Temel Kavramlara Giri\u015f","og_description":"Modern uygulama geli\u015ftirme s\u00fcre\u00e7lerinde konteynerizasyon, yaz\u0131l\u0131mlar\u0131n da\u011f\u0131t\u0131m\u0131n\u0131, y\u00f6netimini ve \u00f6l\u00e7eklendirilmesini kolayla\u015ft\u0131ran devrim niteli\u011finde bir teknolojidir. Peki, kendi \u00f6zel Docker g\u00f6r\u00fcnt\u00fcn\u00fcz\u00fc olu\u015fturup bunu Azure Container Registry'de g\u00fcvenle depolayarak Azure Container Instances \u00fczerinde nas\u0131l h\u0131zl\u0131 ve maliyet etkin bir \u015fekilde \u00e7al\u0131\u015ft\u0131rabilirsiniz? Bu kapsaml\u0131 rehberde, bu sorular\u0131n yan\u0131tlar\u0131n\u0131 ad\u0131m ad\u0131m ke\u015ffedecek, bulut tabanl\u0131 konteyner da\u011f\u0131t\u0131m\u0131n\u0131n temel prensiplerini ve pratik uygulamalar\u0131n\u0131 derinlemesine inceleyece\u011fiz.","og_url":"https:\/\/fatihsoysal.com\/blog\/kapsayicilastirma-neden-bu-kadar-onemli-temel-kavramlara-giris\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-20T22:01:50+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"33 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/kapsayicilastirma-neden-bu-kadar-onemli-temel-kavramlara-giris\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/kapsayicilastirma-neden-bu-kadar-onemli-temel-kavramlara-giris\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Kapsay\u0131c\u0131la\u015ft\u0131rma Neden Bu Kadar \u00d6nemli? Temel Kavramlara Giri\u015f","datePublished":"2025-10-20T22:01:50+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/kapsayicilastirma-neden-bu-kadar-onemli-temel-kavramlara-giris\/"},"wordCount":5885,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/kapsayicilastirma-neden-bu-kadar-onemli-temel-kavramlara-giris\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/kapsayicilastirma-neden-bu-kadar-onemli-temel-kavramlara-giris\/","url":"https:\/\/fatihsoysal.com\/blog\/kapsayicilastirma-neden-bu-kadar-onemli-temel-kavramlara-giris\/","name":"Kapsay\u0131c\u0131la\u015ft\u0131rma Neden Bu Kadar \u00d6nemli? Temel Kavramlara Giri\u015f","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-20T22:01:50+00:00","description":"Modern uygulama geli\u015ftirme s\u00fcre\u00e7lerinde konteynerizasyon, yaz\u0131l\u0131mlar\u0131n da\u011f\u0131t\u0131m\u0131n\u0131, y\u00f6netimini ve \u00f6l\u00e7eklendirilmesini kolayla\u015ft\u0131ran devrim niteli\u011finde bir teknolojidir. Peki, kendi \u00f6zel Docker g\u00f6r\u00fcnt\u00fcn\u00fcz\u00fc olu\u015fturup bunu Azure Container Registry'de g\u00fcvenle depolayarak Azure Container Instances \u00fczerinde nas\u0131l h\u0131zl\u0131 ve maliyet etkin bir \u015fekilde \u00e7al\u0131\u015ft\u0131rabilirsiniz? Bu kapsaml\u0131 rehberde, bu sorular\u0131n yan\u0131tlar\u0131n\u0131 ad\u0131m ad\u0131m ke\u015ffedecek, bulut tabanl\u0131 konteyner da\u011f\u0131t\u0131m\u0131n\u0131n temel prensiplerini ve pratik uygulamalar\u0131n\u0131 derinlemesine inceleyece\u011fiz.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/kapsayicilastirma-neden-bu-kadar-onemli-temel-kavramlara-giris\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/kapsayicilastirma-neden-bu-kadar-onemli-temel-kavramlara-giris\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/kapsayicilastirma-neden-bu-kadar-onemli-temel-kavramlara-giris\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Kapsay\u0131c\u0131la\u015ft\u0131rma Neden Bu Kadar \u00d6nemli? Temel Kavramlara Giri\u015f"}]},{"@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\/32372","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=32372"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32372\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=32372"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=32372"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=32372"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}