<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>docker &#8211; CPYNET</title>
	<atom:link href="https://cpynet.com.tr/tag/docker/feed/" rel="self" type="application/rss+xml" />
	<link>https://cpynet.com.tr</link>
	<description>Yeni Nesil Teknoloji Platformu</description>
	<lastBuildDate>Fri, 22 Nov 2024 10:58:18 +0000</lastBuildDate>
	<language>tr</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>

<image>
	<url>https://cpynet.com.tr/wp-content/uploads/2024/11/cropped-favicon-32x32.png</url>
	<title>docker &#8211; CPYNET</title>
	<link>https://cpynet.com.tr</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Docker&#8217;da Bellek ve CPU Kullanımını Sınırlama</title>
		<link>https://cpynet.com.tr/dockerda-bellek-ve-cpu-kullanimini-sinirlama/</link>
		
		<dc:creator><![CDATA[Emin Buyuk]]></dc:creator>
		<pubDate>Fri, 22 Nov 2024 10:58:16 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<category><![CDATA[Bellek Sınırlama]]></category>
		<category><![CDATA[CPU Sınırlama]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[Kaynak Yönetimi]]></category>
		<category><![CDATA[Performans Optimizasyonu]]></category>
		<guid isPermaLink="false">https://cpynet.com.tr/?p=3806</guid>

					<description><![CDATA[Docker, modern yazılım geliştirme süreçlerinde önemli bir yere sahip. Hafif, taşınabilir, hızlı ve esnek yapısıyla geliştiricilerin işini kolaylaştırıyor.&#8230;]]></description>
										<content:encoded><![CDATA[
<p>Docker, modern yazılım geliştirme süreçlerinde önemli bir yere sahip. Hafif, taşınabilir, hızlı ve esnek yapısıyla geliştiricilerin işini kolaylaştırıyor. Ancak, konteynerlerin doğru bir şekilde yönetilmesi, sistem kaynaklarının verimli kullanılması açısından büyük önem taşıyor. Bu nedenle, Docker&#8217;da bellek ve CPU kullanımını sınırlamak, hem performans hem de güvenilirlik açısından kritik bir konu. Bu yazıda, Docker&#8217;da bellek ve CPU sınırlarını nasıl belirleyeceğinizi, hangi araçların işinize yarayacağını ve en iyi uygulamaları detaylı bir şekilde ele alacağız.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>1. Docker&#8217;da Kaynak Yönetiminin Önemi</strong></h2>



<p>Docker konteynerleri, sisteminizde çalışan diğer uygulamalarla aynı donanım kaynaklarını kullanır. Eğer bir konteyner fazla kaynak tüketiyorsa, bu durum diğer konteynerleri veya ana makinedeki uygulamaları olumsuz etkileyebilir. Kaynak sınırları koyarak:</p>



<ul class="wp-block-list">
<li>Sistem kararlılığını artırabilir,</li>



<li>Kaynak tüketimindeki dengesizlikleri önleyebilir,</li>



<li>Performansı optimize edebilirsiniz.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>2. Docker&#8217;da Bellek ve CPU Sınırlandırma Komutları</strong></h2>



<p>Docker konteynerlerinin bellek ve CPU kullanımını sınırlandırmak için birkaç temel komut kullanılır. Bu komutları, <code>docker run</code> veya <code>docker-compose.yml</code> dosyaları aracılığıyla belirleyebilirsiniz.</p>



<h3 class="wp-block-heading"><strong>2.1. Bellek Sınırlandırma</strong></h3>



<p>Bellek sınırlarını koyarak konteynerlerin belirli bir bellek alanını aşmasını engelleyebilirsiniz.</p>



<ul class="wp-block-list">
<li><code>--memory</code>: Maksimum bellek sınırını belirler.</li>



<li><code>--memory-swap</code>: Bellek kullanımının swap ile birlikte maksimum sınırını ayarlar.</li>
</ul>



<p>Örnek:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="docker run --memory=512m --memory-swap=1g my-container
" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #50FA7B">docker</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">run</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">--memory=512m</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">--memory-swap=1g</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">my-container</span></span>
<span class="line"></span></code></pre></div>



<p>Bu komut, konteynerin 512 MB RAM kullanabileceğini ve toplamda (swap dahil) 1 GB&#8217;a kadar çıkabileceğini belirtir.</p>



<h4 class="wp-block-heading"><strong>Swap Nedir?</strong></h4>



<p>Swap, fiziksel belleğin yetmediği durumlarda disk üzerinde kullanılan bir alandır. Ancak swap kullanımı performansı düşürebileceği için dikkatli ayarlanmalıdır.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><strong>2.2. CPU Sınırlandırma</strong></h3>



<p>CPU sınırlandırması, konteynerlerin işlemci çekirdeklerini ne kadar kullanabileceğini belirler.</p>



<ul class="wp-block-list">
<li><code>--cpus</code>: CPU kullanımını belirli bir yüzde ile sınırlandırır.</li>



<li><code>--cpu-shares</code>: Konteynerin diğer konteynerlere göre önceliğini belirler.</li>



<li><code>--cpuset-cpus</code>: Konteynerin kullanabileceği belirli çekirdekleri ayarlar.</li>
</ul>



<p>Örnek:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="docker run --cpus=0.5 my-container
" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #50FA7B">docker</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">run</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">--cpus=0.5</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">my-container</span></span>
<span class="line"></span></code></pre></div>



<p>Bu komut, konteynerin yalnızca işlemcinin %50&#8217;sini kullanabileceğini belirtir.</p>



<h4 class="wp-block-heading"><strong>Çekirdek Ayarı</strong></h4>



<p>Eğer belirli çekirdekleri atamak isterseniz:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="docker run --cpuset-cpus=&quot;0,1&quot; my-container
" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #50FA7B">docker</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">run</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">--cpuset-cpus=</span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">0,1</span><span style="color: #E9F284">&quot;</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">my-container</span></span>
<span class="line"></span></code></pre></div>



<p>Bu komut, konteynerin yalnızca birinci ve ikinci çekirdekleri kullanmasını sağlar.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>3. Docker Compose ile Kaynak Sınırlandırma</strong></h2>



<p>Eğer birden fazla konteynerle çalışıyorsanız, <code>docker-compose.yml</code> dosyasını kullanarak kaynak sınırlarını kolayca belirleyebilirsiniz.</p>



<p>Örnek bir <code>docker-compose.yml</code>:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="version: '3.7'
services:
  my-service:
    image: my-image
    deploy:
      resources:
        limits:
          memory: 512M
          cpus: '0.5'
        reservations:
          memory: 256M
          cpus: '0.25'
" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #50FA7B">version:</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&#39;</span><span style="color: #F1FA8C">3.7</span><span style="color: #E9F284">&#39;</span></span>
<span class="line"><span style="color: #50FA7B">services:</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #50FA7B">my-service:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #50FA7B">image:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">my-image</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #50FA7B">deploy:</span></span>
<span class="line"><span style="color: #F8F8F2">      </span><span style="color: #50FA7B">resources:</span></span>
<span class="line"><span style="color: #F8F8F2">        </span><span style="color: #50FA7B">limits:</span></span>
<span class="line"><span style="color: #F8F8F2">          </span><span style="color: #50FA7B">memory:</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">512</span><span style="color: #F1FA8C">M</span></span>
<span class="line"><span style="color: #F8F8F2">          </span><span style="color: #50FA7B">cpus:</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&#39;</span><span style="color: #F1FA8C">0.5</span><span style="color: #E9F284">&#39;</span></span>
<span class="line"><span style="color: #F8F8F2">        </span><span style="color: #50FA7B">reservations:</span></span>
<span class="line"><span style="color: #F8F8F2">          </span><span style="color: #50FA7B">memory:</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">256</span><span style="color: #F1FA8C">M</span></span>
<span class="line"><span style="color: #F8F8F2">          </span><span style="color: #50FA7B">cpus:</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&#39;</span><span style="color: #F1FA8C">0.25</span><span style="color: #E9F284">&#39;</span></span>
<span class="line"></span></code></pre></div>



<p>Yukarıdaki örnekte:</p>



<ul class="wp-block-list">
<li>Bellek sınırı 512 MB olarak ayarlanmış,</li>



<li>CPU kullanım sınırı %50 olarak belirlenmiştir.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>4. En İyi Uygulamalar</strong></h2>



<p>Kaynak sınırlandırması yaparken aşağıdaki uygulamalara dikkat etmelisiniz:</p>



<h3 class="wp-block-heading"><strong>4.1. İhtiyaca Göre Ayarlama</strong></h3>



<p>Her konteynerin farklı ihtiyaçları olabilir. Uygulamanızın bellek ve CPU tüketim profilini analiz ederek uygun sınırları belirleyin.</p>



<h3 class="wp-block-heading"><strong>4.2. İzleme ve Optimizasyon</strong></h3>



<p>Konteynerlerin kaynak kullanımını izlemek için Docker&#8217;ın sunduğu izleme araçlarını kullanabilirsiniz:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="docker stats
" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #50FA7B">docker</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">stats</span></span>
<span class="line"></span></code></pre></div>



<p>Bu komut, çalışan tüm konteynerlerin CPU, bellek ve ağ kullanımını gerçek zamanlı olarak gösterir.</p>



<h3 class="wp-block-heading"><strong>4.3. Overcommitten Kaçının</strong></h3>



<p>Eğer birden fazla konteyner çalıştırıyorsanız, toplam bellek ve CPU sınırlarının ana makinenizin kapasitesini aşmadığından emin olun. Overcommit (aşırı yükleme), sistem kararsızlığına yol açabilir.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>5. İleri Düzey Konfigürasyonlar</strong></h2>



<h3 class="wp-block-heading"><strong>5.1. cgroup Kullanımı</strong></h3>



<p>Docker, Linux cgroups (control groups) kullanarak kaynak yönetimi yapar. Eğer daha gelişmiş bir yapılandırma yapmak istiyorsanız, cgroup parametrelerini manuel olarak düzenleyebilirsiniz.</p>



<h3 class="wp-block-heading"><strong>5.2. Docker Swarm ile Kaynak Yönetimi</strong></h3>



<p>Eğer bir Docker Swarm kümesi kullanıyorsanız, kaynak sınırlarını <code>deploy</code> kısmında belirtebilirsiniz.</p>



<p>Örnek:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="deploy:
  resources:
    limits:
      memory: 1G
      cpus: &quot;1.0&quot;
" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #50FA7B">deploy:</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #50FA7B">resources:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #50FA7B">limits:</span></span>
<span class="line"><span style="color: #F8F8F2">      </span><span style="color: #50FA7B">memory:</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">1</span><span style="color: #F1FA8C">G</span></span>
<span class="line"><span style="color: #F8F8F2">      </span><span style="color: #50FA7B">cpus:</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">1.0</span><span style="color: #E9F284">&quot;</span></span>
<span class="line"></span></code></pre></div>



<h3 class="wp-block-heading"><strong>5.3. Kubernetes ile Entegrasyon</strong></h3>



<p>Eğer Docker konteynerlerinizi Kubernetes ile yönetiyorsanız, kaynak sınırlarını <code>resources</code> kısmında tanımlayabilirsiniz:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="resources:
  limits:
    memory: &quot;512Mi&quot;
    cpu: &quot;0.5&quot;
" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #50FA7B">resources:</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #50FA7B">limits:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #50FA7B">memory:</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">512Mi</span><span style="color: #E9F284">&quot;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #50FA7B">cpu:</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">0.5</span><span style="color: #E9F284">&quot;</span></span>
<span class="line"></span></code></pre></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>6. Bellek ve CPU Sınırlamanın Avantajları</strong></h2>



<ul class="wp-block-list">
<li><strong>Performans Artışı:</strong> Diğer uygulamalara daha fazla kaynak kalmasını sağlar.</li>



<li><strong>Kararlılık:</strong> Sistem çökmesini önler.</li>



<li><strong>Güvenlik:</strong> Yanlış çalışan bir konteynerin sistemi bloke etmesini engeller.</li>



<li><strong>Maliyet Kontrolü:</strong> Özellikle bulut ortamlarında, gereksiz kaynak kullanımını azaltarak maliyetleri düşürür.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>7. Örnek Senaryolar</strong></h2>



<h3 class="wp-block-heading"><strong>Senaryo 1: Web Sunucusu</strong></h3>



<p>Bir NGINX web sunucusu konteynerinin, 1 GB RAM ve %25 CPU kullanmasını sağlamak için:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="docker run --memory=1g --cpus=0.25 nginx
" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #50FA7B">docker</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">run</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">--memory=1g</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">--cpus=0.25</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">nginx</span></span>
<span class="line"></span></code></pre></div>



<h3 class="wp-block-heading"><strong>Senaryo 2: Yoğun İşlem Gerektiren Uygulama</strong></h3>



<p>Bir makine öğrenimi uygulaması için:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="docker run --memory=4g --cpus=2 my-ml-app
" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #50FA7B">docker</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">run</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">--memory=4g</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">--cpus=2</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">my-ml-app</span></span>
<span class="line"></span></code></pre></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>8. Sonuç</strong></h2>



<p>Docker&#8217;da bellek ve CPU kullanımını sınırlandırmak, konteynerlerin performansını optimize etmenin ve sistem kaynaklarını verimli kullanmanın önemli bir yoludur. Bu yazıda, temel komutlardan ileri düzey yapılandırmalara kadar her detayı ele aldık. Kaynak sınırlarını belirlerken uygulamanızın ihtiyaçlarını analiz etmeyi, düzenli olarak izlemeyi ve sınırları optimize etmeyi unutmayın.</p>



<p><strong>Docker ile verimli kaynak yönetimi yaparak daha hızlı, kararlı ve güvenilir uygulamalar geliştirebilirsiniz.</strong></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Docker Üzerinde HTTPS Trafiğini Yönlendirme</title>
		<link>https://cpynet.com.tr/docker-uzerinde-https-trafigini-yonlendirme/</link>
		
		<dc:creator><![CDATA[Emin Buyuk]]></dc:creator>
		<pubDate>Tue, 29 Oct 2024 19:00:09 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<category><![CDATA[container]]></category>
		<category><![CDATA[docker]]></category>
		<guid isPermaLink="false">https://cpynet-wordpress.wekeea.easypanel.host/docker-uzerinde-https-trafigini-yonlendirme/</guid>

					<description><![CDATA[Bu yazıda, Docker container&#8217;ımızı HTTPS trafiğini yönlendirecek şekilde nasıl yapılandıracağımızı öğreneceğiz. SSL terminasyonu ve geri kalan adımların hepsini&#8230;]]></description>
										<content:encoded><![CDATA[
<p>Bu yazıda, Docker container&#8217;ımızı HTTPS trafiğini yönlendirecek şekilde nasıl yapılandıracağımızı öğreneceğiz. SSL terminasyonu ve geri kalan adımların hepsini Docker üzerinde reverse proxy ile gerçekleştireceğiz.</p>



<h3 class="wp-block-heading" id="1-da%C4%9F%C4%B1t%C4%B1m-mimarisi">1. Dağıtım Mimarisi</h3>



<p>Docker üzerinde HTTPS ile hizmet vermenin temel fikri, backend servisini bir Docker ağı içinde izole ederek çalıştırmak ve herhangi bir portu dışarıya açmamaktır. Bunun ardından, aynı Docker ağı içerisinde çalışan bir <strong>reverse proxy</strong> (ters proxy) kurarız. Reverse proxy, SSL terminasyonunu gerçekleştirir ve gelen istekleri backend servisine iletir. Burada önemli olan nokta, reverse proxy&#8217;nin yalnızca HTTPS isteklerini kabul edecek şekilde yapılandırılmasıdır.</p>



<p>Bu dağıtım mimarisinin avantajı, SSL terminasyon yükünü backend servisten alarak, bu işlemi yalnızca reverse proxy&#8217;de gerçekleştirmektir. Bu yöntem, özellikle birden fazla servisin aynı anda HTTPS isteklerine ihtiyaç duyduğu senaryolarda oldukça kullanışlıdır. SSL terminasyonunu backend servislere bırakmak yerine, tüm yükü reverse proxy üzerinde toplamak, backend&#8217;lerin iş yükünü hafifletir.</p>



<p>Örnek olarak, backend tarafında <strong>crccheck/hello-world</strong> Docker imajını kullanacağız. Bu imaj, HTTP isteklerine yanıt veren basit bir web sunucusu çalıştırmaktadır. Reverse proxy için ise, açık kaynak ve çok amaçlı bir web sunucusu olan <strong>Nginx</strong>&#8216;i kullanacağız.</p>



<h3 class="wp-block-heading" id="2-da%C4%9F%C4%B1t%C4%B1m%C4%B1-olu%C5%9Fturma">2. Dağıtımı Oluşturma</h3>



<p>Yüksek seviyede adımlarımız şöyle olacak:</p>



<ol class="wp-block-list">
<li>Backend web servisimizi bir Docker container olarak başlatacağız.</li>



<li>HTTPS için gerekli olan SSL sertifikasını oluşturacağız.</li>



<li>Son olarak, SSL terminasyonu yapacak ve istekleri backend&#8217;e iletecek şekilde yapılandırdığımız Nginx container&#8217;ını çalıştıracağız.</li>
</ol>



<h4 class="wp-block-heading" id="21-docker-a%C4%9F%C4%B1-olu%C5%9Fturma">2.1. Docker Ağı Oluşturma</h4>



<p>İlk olarak, reverse proxy ve backend servisinin birbirleriyle haberleşebilmesi için bir Docker ağı oluşturacağız:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="$ docker network create server-reverse-proxy-link
" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #50FA7B">$</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">docker</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">network</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">create</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">server-reverse-proxy-link</span></span>
<span class="line"></span></code></pre></div>



<p>Bu ağ, iki container&#8217;ı barındırarak onların birbirleriyle ağ üzerinden iletişim kurmalarını sağlayacak.</p>



<h4 class="wp-block-heading" id="22-backend-servisini-ba%C5%9Flatma">2.2. Backend Servisini Başlatma</h4>



<p>Şimdi, backend servis container&#8217;ını başlatalım:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="$ docker run -d --network server-reverse-proxy-link --name backend-service crccheck/hello-world
" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #50FA7B">$</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">docker</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">run</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">-d</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">--network</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">server-reverse-proxy-link</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">--name</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">backend-service</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">crccheck/hello-world</span></span>
<span class="line"></span></code></pre></div>



<p>Burada dikkat edilmesi gereken en önemli nokta, backend servisini dışarıya herhangi bir port açmadan çalıştırmamızdır. Bu sayede servis sadece reverse proxy üzerinden gelen HTTPS isteklerini kabul eder.</p>



<p>Container&#8217;ı başlatırken <code>--network</code> seçeneği ile servisi daha önce oluşturduğumuz <code>server-reverse-proxy-link</code> ağına dahil ettik.</p>



<h4 class="wp-block-heading" id="23-tls-sertifikas%C4%B1-olu%C5%9Fturma">2.3. TLS Sertifikası Oluşturma</h4>



<p>Gösterim amaçlı, kendi kendine imzalanmış bir sertifika oluşturacağız. Bu tür sertifikalar, güvenilir bir sertifika otoritesi tarafından imzalanmadığı için tarayıcılar tarafından güvensiz olarak işaretlenir. Ancak test ve lokal kullanım için işimizi görecektir.</p>



<p>Öncelikle bir özel anahtar oluşturmak için şu komutu çalıştırıyoruz:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="$ openssl genrsa -out server.key 2048
" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #50FA7B">$</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">openssl</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">genrsa</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">-out</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">server.key</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">2048</span></span>
<span class="line"></span></code></pre></div>



<p>Ardından, bir sertifika imzalama isteği (CSR) oluşturuyoruz:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="$ openssl req -key server.key -new -out server.csr
" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #50FA7B">$</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">openssl</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">req</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">-key</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">server.key</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">-new</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">-out</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">server.csr</span></span>
<span class="line"></span></code></pre></div>



<p>Son olarak, bu isteği kendi oluşturduğumuz anahtar ile imzalayarak sertifikamızı elde ediyoruz:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="$ openssl x509 -signkey server.key -in server.csr -req -days 365 -out server.crt
" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #50FA7B">$</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">openssl</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">x509</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">-signkey</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">server.key</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">-in</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">server.csr</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">-req</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">-days</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">365</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">-out</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">server.crt</span></span>
<span class="line"></span></code></pre></div>



<p>Bu adımlardan sonra elimizde SSL terminasyonu için kullanacağımız bir sertifikamız olacak.</p>



<h4 class="wp-block-heading" id="24-nginx-yap%C4%B1land%C4%B1rma-dosyas%C4%B1n%C4%B1-olu%C5%9Fturma">2.4. Nginx Yapılandırma Dosyasını Oluşturma</h4>



<p>Nginx reverse proxy sunucumuzu başlatmadan önce, yapılandırma dosyasını yazmamız gerekiyor. Bu dosyada Nginx&#8217;in 443 numaralı port üzerinden HTTPS isteklerini dinleyip, bunları backend servisine iletmesini sağlayacağız.</p>



<p>İşte yapılandırma dosyamız:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="events { }
http {
    server {
        listen 443 ssl;

        ssl_certificate /opt/certificates/server.crt;
        ssl_certificate_key /opt/certificates/server.key;

        location / {
            proxy_pass http://backend-service:8000;
        }
    }
}
" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #50FA7B">events</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">{</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">}</span></span>
<span class="line"><span style="color: #50FA7B">http</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">{</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #50FA7B">server</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">{</span></span>
<span class="line"><span style="color: #F8F8F2">        </span><span style="color: #50FA7B">listen</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">443</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">ssl</span><span style="color: #F8F8F2">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">        </span><span style="color: #50FA7B">ssl_certificate</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">/opt/certificates/server.crt</span><span style="color: #F8F8F2">;</span></span>
<span class="line"><span style="color: #F8F8F2">        </span><span style="color: #50FA7B">ssl_certificate_key</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">/opt/certificates/server.key</span><span style="color: #F8F8F2">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">        </span><span style="color: #50FA7B">location</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">/</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">{</span></span>
<span class="line"><span style="color: #F8F8F2">            </span><span style="color: #50FA7B">proxy_pass</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">http://backend-service:8000</span><span style="color: #F8F8F2">;</span></span>
<span class="line"><span style="color: #F8F8F2">        }</span></span>
<span class="line"><span style="color: #F8F8F2">    }</span></span>
<span class="line"><span style="color: #F8F8F2">}</span></span>
<span class="line"></span></code></pre></div>



<p>Bu dosyada, <code>server</code> bloğu içinde 443 numaralı portta SSL modunda çalışan bir sunucu tanımladık. Sertifika ve anahtar dosyalarını Nginx&#8217;in erişebileceği şekilde belirttik. Ayrıca, gelen tüm istekleri <code>proxy_pass</code> ile backend servisine yönlendirdik.</p>



<h4 class="wp-block-heading" id="25-nginx-docker-container%C4%B1n%C4%B1-ba%C5%9Flatma">2.5. Nginx Docker Container&#8217;ını Başlatma</h4>



<p>Yapılandırma dosyasını ve SSL sertifikalarını kullanarak Nginx container&#8217;ını başlatabiliriz:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="$ docker run -d 
  --name nginx-container 
  --network server-reverse-proxy-link 
  -p 443:443 
  -v /opt/certificates:/opt/certificates 
  -v /opt/nginx.conf:/etc/nginx/nginx.conf 
  nginx:latest
" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #50FA7B">$</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">docker</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">run</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">-d</span><span style="color: #F8F8F2"> </span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #50FA7B">--name</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">nginx-container</span><span style="color: #F8F8F2"> </span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #50FA7B">--network</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">server-reverse-proxy-link</span><span style="color: #F8F8F2"> </span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #50FA7B">-p</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">443</span><span style="color: #F1FA8C">:443</span><span style="color: #F8F8F2"> </span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #50FA7B">-v</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">/opt/certificates:/opt/certificates</span><span style="color: #F8F8F2"> </span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #50FA7B">-v</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">/opt/nginx.conf:/etc/nginx/nginx.conf</span><span style="color: #F8F8F2"> </span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #50FA7B">nginx:latest</span></span>
<span class="line"></span></code></pre></div>



<p>Burada <code>-v</code> seçeneği ile sertifika, anahtar ve yapılandırma dosyalarını container&#8217;a bağladık. Ayrıca <code>--network</code> ile container&#8217;ı yine aynı ağa dahil ettik.</p>



<h4 class="wp-block-heading" id="26-servisi-test-etme">2.6. Servisi Test Etme</h4>



<p>Şimdi, servisi test edebiliriz. HTTPS protokolünü kullanarak <code>curl</code> komutunu çalıştırdığımızda:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="$ curl https://localhost
" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #50FA7B">$</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">curl</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">https://localhost</span></span>
<span class="line"></span></code></pre></div>



<p>Eğer kendi kendine imzalanmış sertifikayı kullanıyorsanız, <code>curl</code> komutu bir uyarı verecektir. Bu durumu atlamak için şu şekilde komutu tekrar çalıştırabilirsiniz:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="$ curl --insecure https://localhost
" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #50FA7B">$</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">curl</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">--insecure</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">https://localhost</span></span>
<span class="line"></span></code></pre></div>



<p>Komutu çalıştırdığınızda, backend servisten gelen &#8220;Hello World&#8221; yanıtını göreceksiniz.</p>



<h3 class="wp-block-heading" id="3-sonu%C3%A7">3. Sonuç</h3>



<p>Bu rehberde, Docker üzerinde çalışan bir web servisine HTTPS desteği eklemeyi öğrendik. Nginx reverse proxy kullanarak SSL terminasyonu yaptık ve istekleri backend servise yönlendirdik. Bu yöntem, birden fazla servis ile HTTPS üzerinden çalışırken SSL yükünü azaltmanın etkili bir yolu olarak kullanılabilir.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Keycloak Kurulum Rehberi</title>
		<link>https://cpynet.com.tr/keycloak-kurulum-rehberi/</link>
		
		<dc:creator><![CDATA[Emin Buyuk]]></dc:creator>
		<pubDate>Tue, 22 Oct 2024 08:37:58 +0000</pubDate>
				<category><![CDATA[Açık Kaynak]]></category>
		<category><![CDATA[Rehberler]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[keycloak]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[sistem yönetimi]]></category>
		<category><![CDATA[sso]]></category>
		<guid isPermaLink="false">https://cpynet-wordpress.wekeea.easypanel.host/keycloak-kurulum-rehberi/</guid>

					<description><![CDATA[Keycloak, modern uygulamalar için kimlik ve erişim yönetimi sağlayan, açık kaynaklı bir çözüm olarak öne çıkar. Kullanıcılar için&#8230;]]></description>
										<content:encoded><![CDATA[
<p><strong>Keycloak</strong>, modern uygulamalar için kimlik ve erişim yönetimi sağlayan, açık kaynaklı bir çözüm olarak öne çıkar. Kullanıcılar için oturum açma, oturum kapama, parola sıfırlama gibi işlemleri merkezi bir şekilde yönetir. Ayrıca <strong>OAuth2</strong>, <strong>OpenID Connect</strong> ve <strong>SAML</strong> gibi kimlik doğrulama protokollerini destekler.</p>



<p><strong>Keycloak&#8217;ın kullanım alanları:</strong></p>



<ul class="wp-block-list">
<li><strong>Kimlik doğrulama</strong> ve yetkilendirme için merkezi bir yönetim aracı olarak kullanılabilir.</li>



<li><strong>Single Sign-On (SSO)</strong> sağlayarak kullanıcıların birden fazla uygulamaya tek bir oturumla erişimini sağlar.</li>



<li>API&#8217;lar ve mikroservisler için <strong>token tabanlı kimlik doğrulama</strong> çözümleri sunar.</li>



<li>Çeşitli kimlik sağlayıcılarına (LDAP, Active Directory, sosyal medya hesapları vb.) entegrasyon sağlar.</li>
</ul>



<p>Bu dokümanda <strong>Ubuntu</strong> ve <strong>RHEL tabanlı</strong> işletim sistemlerinde <strong>Docker</strong> kullanarak Keycloak kurulumu adımlarını ve bir <strong>shell scripti</strong> ile nasıl otomatikleştirebileceğinizi anlatacağız.</p>



<h4 class="wp-block-heading" id="1-gereksinimler">1. Gereksinimler</h4>



<p>Keycloak&#8217;ı Docker ile kurmak için, sisteminizde <strong>Docker</strong> yüklü olmalıdır. Aşağıdaki adımlar, Docker&#8217;ın kurulumunu içerir.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading" id="ubuntu-i%CC%87%C3%A7in-docker-kurulumu">Ubuntu İçin Docker Kurulumu</h4>



<p>Docker kurulumu için aşağıdaki komutları izleyin:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="sudo apt update
sudo apt install docker.io -y
sudo systemctl start docker
sudo systemctl enable docker
" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #50FA7B">sudo</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">apt</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">update</span></span>
<span class="line"><span style="color: #50FA7B">sudo</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">apt</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">install</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">docker.io</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">-y</span></span>
<span class="line"><span style="color: #50FA7B">sudo</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">systemctl</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">start</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">docker</span></span>
<span class="line"><span style="color: #50FA7B">sudo</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">systemctl</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">enable</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">docker</span></span>
<span class="line"></span></code></pre></div>



<h4 class="wp-block-heading" id="red-hat-enterprise-linux-centos-ve-rocky-linux-i%CC%87%C3%A7in-docker-kurulumu">Red Hat Enterprise Linux, CentOS ve Rocky Linux İçin Docker Kurulumu</h4>



<p>Red Hat Enterprise Linux, CentOS veya Rocky Linux sistemlerinde Docker&#8217;ı kurmak için:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="sudo yum update -y
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io -y
sudo systemctl start docker
sudo systemctl enable docker
" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #50FA7B">sudo</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">yum</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">update</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">-y</span></span>
<span class="line"><span style="color: #50FA7B">sudo</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">yum</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">install</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">-y</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">yum-utils</span></span>
<span class="line"><span style="color: #50FA7B">sudo</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">yum-config-manager</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">--add-repo</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">https://download.docker.com/linux/centos/docker-ce.repo</span></span>
<span class="line"><span style="color: #50FA7B">sudo</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">yum</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">install</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">docker-ce</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">docker-ce-cli</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">containerd.io</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">-y</span></span>
<span class="line"><span style="color: #50FA7B">sudo</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">systemctl</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">start</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">docker</span></span>
<span class="line"><span style="color: #50FA7B">sudo</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">systemctl</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">enable</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">docker</span></span>
<span class="line"></span></code></pre></div>



<p>Docker kurulduktan sonra, Keycloak kurulumu için hazırız.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="docker-ile-keycloak-kurulumu">Docker ile Keycloak Kurulumu</h3>



<p>Keycloak&#8217;ı Docker kullanarak başlatmak oldukça basit. İlk olarak Keycloak imajını indirip bir konteyner oluşturacağız.</p>



<h4 class="wp-block-heading" id="docker-komutu-ile-keycloak-kurulumu">Docker Komutu ile Keycloak Kurulumu:</h4>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="docker pull quay.io/keycloak/keycloak:latest
docker run -d -p 8080:8080 --name keycloak 
-e KEYCLOAK_USER=admin 
-e KEYCLOAK_PASSWORD=admin quay.io/keycloak/keycloak:latest start-dev
" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #50FA7B">docker</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">pull</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">quay.io/keycloak/keycloak:latest</span></span>
<span class="line"><span style="color: #50FA7B">docker</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">run</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">-d</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">-p</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">8080</span><span style="color: #F1FA8C">:8080</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">--name</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">keycloak</span><span style="color: #F8F8F2"> </span></span>
<span class="line"><span style="color: #50FA7B">-e</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">KEYCLOAK_USER=admin</span><span style="color: #F8F8F2"> </span></span>
<span class="line"><span style="color: #50FA7B">-e</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">KEYCLOAK_PASSWORD=admin</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">quay.io/keycloak/keycloak:latest</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">start-dev</span></span>
<span class="line"></span></code></pre></div>



<p>Bu komut Keycloak’ı <strong>port 8080</strong>&#8216;de çalıştırır ve <strong>admin/admin</strong> kullanıcı bilgileriyle yönetim paneline giriş yapmanızı sağlar.</p>



<h4 class="wp-block-heading" id="y%C3%B6netim-paneline-eri%C5%9Fim">Yönetim Paneline Erişim:</h4>



<p>Tarayıcınızdan şu adrese giderek Keycloak yönetim konsoluna erişebilirsiniz:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="http://localhost:8080
" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #50FA7B">http://localhost:8080</span></span>
<span class="line"></span></code></pre></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="keycloak-otomatik-kurulum-scripti">Keycloak Otomatik Kurulum Scripti</h3>



<p>Ubuntu, Red Hat Enterprise Linux, CentOS ve Rocky Linux için aşağıdaki shell scriptiyle Docker ve Keycloak kurulumunu otomatikleştirebilirsiniz.</p>



<h4 class="wp-block-heading" id="keycloakinstallsh-scripti"><code>keycloak_install.sh</code> Scripti:</h4>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="#!/bin/bash

# Check OS type (Ubuntu or RHEL-based)
if [ -f /etc/os-release ]; then
    . /etc/os-release
    OS=$ID
else
    echo &quot;Unsupported OS&quot;
    exit 1
fi

# Function to install Docker on Ubuntu
install_docker_ubuntu() {
    echo &quot;Installing Docker on Ubuntu...&quot;
    sudo apt update
    sudo apt install docker.io -y
    sudo systemctl start docker
    sudo systemctl enable docker
}

# Function to install Docker on Red Hat, CentOS, Rocky Linux
install_docker_rhel() {
    echo &quot;Installing Docker on Red Hat, CentOS, or Rocky Linux...&quot;
    sudo yum update -y
    sudo yum install -y yum-utils
    sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    sudo yum install docker-ce docker-ce-cli containerd.io -y
    sudo systemctl start docker
    sudo systemctl enable docker
}

# Docker installation based on OS
case $OS in
    ubuntu)
        install_docker_ubuntu
        ;;
    centos|rocky|rhel)
        install_docker_rhel
        ;;
    *)
        echo &quot;Unsupported OS: $OS&quot;
        exit 1
        ;;
esac

# Pull Keycloak Docker image
echo &quot;Pulling Keycloak Docker image...&quot;
docker pull quay.io/keycloak/keycloak:latest

# Run Keycloak container
echo &quot;Starting Keycloak container...&quot;
docker run -d -p 8080:8080 --name keycloak 
-e KEYCLOAK_USER=admin 
-e KEYCLOAK_PASSWORD=admin quay.io/keycloak/keycloak:latest start-dev

echo &quot;Keycloak is running at http://localhost:8080&quot;
" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #6272A4">#!/bin/bash</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6272A4"># Check OS type (Ubuntu or RHEL-based)</span></span>
<span class="line"><span style="color: #FF79C6">if</span><span style="color: #F8F8F2"> [ </span><span style="color: #FF79C6">-f</span><span style="color: #F8F8F2"> /etc/os-release ]; </span><span style="color: #FF79C6">then</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">.</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">/etc/os-release</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #BD93F9">OS</span><span style="color: #FF79C6">=</span><span style="color: #BD93F9">$ID</span></span>
<span class="line"><span style="color: #FF79C6">else</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">echo</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">Unsupported OS</span><span style="color: #E9F284">&quot;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">exit</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">1</span></span>
<span class="line"><span style="color: #FF79C6">fi</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6272A4"># Function to install Docker on Ubuntu</span></span>
<span class="line"><span style="color: #50FA7B">install_docker_ubuntu</span><span style="color: #F8F8F2">() {</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">echo</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">Installing Docker on Ubuntu...</span><span style="color: #E9F284">&quot;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #50FA7B">sudo</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">apt</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">update</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #50FA7B">sudo</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">apt</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">install</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">docker.io</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">-y</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #50FA7B">sudo</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">systemctl</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">start</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">docker</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #50FA7B">sudo</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">systemctl</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">enable</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">docker</span></span>
<span class="line"><span style="color: #F8F8F2">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6272A4"># Function to install Docker on Red Hat, CentOS, Rocky Linux</span></span>
<span class="line"><span style="color: #50FA7B">install_docker_rhel</span><span style="color: #F8F8F2">() {</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">echo</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">Installing Docker on Red Hat, CentOS, or Rocky Linux...</span><span style="color: #E9F284">&quot;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #50FA7B">sudo</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">yum</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">update</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">-y</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #50FA7B">sudo</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">yum</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">install</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">-y</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">yum-utils</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #50FA7B">sudo</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">yum-config-manager</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">--add-repo</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">https://download.docker.com/linux/centos/docker-ce.repo</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #50FA7B">sudo</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">yum</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">install</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">docker-ce</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">docker-ce-cli</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">containerd.io</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">-y</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #50FA7B">sudo</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">systemctl</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">start</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">docker</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #50FA7B">sudo</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">systemctl</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">enable</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">docker</span></span>
<span class="line"><span style="color: #F8F8F2">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6272A4"># Docker installation based on OS</span></span>
<span class="line"><span style="color: #FF79C6">case</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">$OS</span><span style="color: #F8F8F2"> </span><span style="color: #FF79C6">in</span></span>
<span class="line"><span style="color: #F8F8F2">    ubuntu)</span></span>
<span class="line"><span style="color: #F8F8F2">        </span><span style="color: #50FA7B">install_docker_ubuntu</span></span>
<span class="line"><span style="color: #F8F8F2">        ;;</span></span>
<span class="line"><span style="color: #F8F8F2">    centos|rocky|rhel)</span></span>
<span class="line"><span style="color: #F8F8F2">        </span><span style="color: #50FA7B">install_docker_rhel</span></span>
<span class="line"><span style="color: #F8F8F2">        ;;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #FF79C6">*</span><span style="color: #F8F8F2">)</span></span>
<span class="line"><span style="color: #F8F8F2">        </span><span style="color: #8BE9FD">echo</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">Unsupported OS: </span><span style="color: #BD93F9">$OS</span><span style="color: #E9F284">&quot;</span></span>
<span class="line"><span style="color: #F8F8F2">        </span><span style="color: #8BE9FD">exit</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">1</span></span>
<span class="line"><span style="color: #F8F8F2">        ;;</span></span>
<span class="line"><span style="color: #FF79C6">esac</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6272A4"># Pull Keycloak Docker image</span></span>
<span class="line"><span style="color: #8BE9FD">echo</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">Pulling Keycloak Docker image...</span><span style="color: #E9F284">&quot;</span></span>
<span class="line"><span style="color: #50FA7B">docker</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">pull</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">quay.io/keycloak/keycloak:latest</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6272A4"># Run Keycloak container</span></span>
<span class="line"><span style="color: #8BE9FD">echo</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">Starting Keycloak container...</span><span style="color: #E9F284">&quot;</span></span>
<span class="line"><span style="color: #50FA7B">docker</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">run</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">-d</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">-p</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">8080</span><span style="color: #F1FA8C">:8080</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">--name</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">keycloak</span><span style="color: #F8F8F2"> </span></span>
<span class="line"><span style="color: #50FA7B">-e</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">KEYCLOAK_USER=admin</span><span style="color: #F8F8F2"> </span></span>
<span class="line"><span style="color: #50FA7B">-e</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">KEYCLOAK_PASSWORD=admin</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">quay.io/keycloak/keycloak:latest</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">start-dev</span></span>
<span class="line"></span>
<span class="line"><span style="color: #8BE9FD">echo</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">Keycloak is running at http://localhost:8080</span><span style="color: #E9F284">&quot;</span></span>
<span class="line"></span></code></pre></div>



<h4 class="wp-block-heading" id="scripti-%C3%A7al%C4%B1%C5%9Ft%C4%B1rma">Scripti Çalıştırma:</h4>



<ol class="wp-block-list">
<li>Scripti bir dosyaya kaydedin (örn: <code>keycloak_install.sh</code>).</li>



<li>Dosyayı çalıştırılabilir hale getirin:</li>
</ol>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="chmod +x keycloak_install.sh
" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #50FA7B">chmod</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">+x</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">keycloak_install.sh</span></span>
<span class="line"></span></code></pre></div>



<ol class="wp-block-list">
<li>Scripti çalıştırın:</li>
</ol>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="./keycloak_install.sh
" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #50FA7B">./keycloak_install.sh</span></span>
<span class="line"></span></code></pre></div>



<p>Bu script, Docker&#8217;ı sisteminize kuracak ve Keycloak konteynerini başlatacaktır.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="sonu%C3%A7">Sonuç</h3>



<p>Bu makalede, Keycloak&#8217;ın Docker kullanarak <strong>Ubuntu</strong>, <strong>Red Hat Enterprise Linux</strong>, <strong>CentOS</strong> ve <strong>Rocky Linux</strong> üzerinde nasıl kurulacağını ve konfigüre edileceğini ele aldık. Keycloak, modern uygulamalar için güçlü bir kimlik yönetimi çözümüdür ve Docker ile kolayca devreye alınabilir.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
