<?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>Yeni Teknoloji ve Diller arşivleri - Keşif Ruhu</title>
	<atom:link href="https://www.kesifruhu.com/category/yazilim/yeni-tekno-diller/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.kesifruhu.com/category/yazilim/yeni-tekno-diller/</link>
	<description>Keşfet, Deneyimle, Paylaş</description>
	<lastBuildDate>Fri, 04 Oct 2024 20:50:27 +0000</lastBuildDate>
	<language>tr</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.3</generator>

<image>
	<url>https://www.kesifruhu.com/wp-content/uploads/2024/09/siteico-150x150.png</url>
	<title>Yeni Teknoloji ve Diller arşivleri - Keşif Ruhu</title>
	<link>https://www.kesifruhu.com/category/yazilim/yeni-tekno-diller/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Docker Container Taşıma</title>
		<link>https://www.kesifruhu.com/yazilim/yeni-tekno-diller/docker-container-tasima/</link>
					<comments>https://www.kesifruhu.com/yazilim/yeni-tekno-diller/docker-container-tasima/#respond</comments>
		
		<dc:creator><![CDATA[darklaz]]></dc:creator>
		<pubDate>Fri, 04 Oct 2024 15:03:15 +0000</pubDate>
				<category><![CDATA[Yazılım]]></category>
		<category><![CDATA[Yeni Teknoloji ve Diller]]></category>
		<category><![CDATA[container]]></category>
		<category><![CDATA[container move]]></category>
		<category><![CDATA[container taşıma]]></category>
		<category><![CDATA[docker]]></category>
		<guid isPermaLink="false">https://www.kesifruhu.com/?p=323</guid>

					<description><![CDATA[<p>Docker’ın sağladığı taşınabilirlik, uygulamaların bir sunucudan başka bir sunucuya sorunsuz bir şekilde taşınmasına olanak tanır.</p>
<p><a href="https://www.kesifruhu.com/yazilim/yeni-tekno-diller/docker-container-tasima/">Docker Container Taşıma</a> yazısı ilk önce <a href="https://www.kesifruhu.com">Keşif Ruhu</a> üzerinde ortaya çıktı.</p>
]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading"><strong>1. Docker Nedir?</strong></h3>



<p>Docker, uygulamaları izole ve taşınabilir hale getiren bir platformdur. Uygulamalar ve bağımlılıkları, Docker container’larında paketlenir ve bu container’lar her türlü işletim sistemi veya bulut altyapısında çalıştırılabilir. Docker’ın sağladığı bu taşınabilirlik, uygulamaların bir sunucudan başka bir sunucuya sorunsuz bir şekilde taşınmasına olanak tanır.</p>



<h3 class="wp-block-heading"><strong>2. Neden Docker Container Taşıma İhtiyacı Duyulur?</strong></h3>



<p>Çeşitli senaryolarda Docker container’larını bir sistemden başka bir sisteme taşımak gerekebilir:</p>



<ul class="wp-block-list">
<li>Geliştirme ortamından test ya da prodüksiyon ortamına geçiş yaparken,</li>



<li>Bir sunucuyu değiştirme veya yükseltme sırasında,</li>



<li>Uygulamanın bir Linux sunucusundan bir Windows sunucusuna aktarılması gerektiğinde.</li>
</ul>



<p>Bu taşıma işlemi sırasında, Docker container imajlarını ve bu container&#8217;larla bağlı volume&#8217;leri eksiksiz bir şekilde taşımalısınız.</p>



<h3 class="wp-block-heading"><strong>3. Taşıma İşlemleri için Script Yapısı</strong></h3>



<p>Şimdi bu taşıma işlemini iki farklı senaryo için gerçekleştirecek script&#8217;ler oluşturalım. Birinci senaryomuzda Linux&#8217;tan Linux&#8217;a taşıma, İkinci senaryomuzda Windows üzerinden Linux&#8217;tan Windows&#8217;a taşıma işlemini gerçekleştirelim.</p>



<p>Öncelikle taşımak istediğimiz container adını ve image bilgilerini alalım ve container çalışır durumda ise durduralım. </p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" 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;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7">Bash</span><span role="button" tabindex="0" data-code="#bu komut ile sistemimize kurulu olan tüm container'ların listesini alalım
docker ps -a 
" style="color:#D4D4D4;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="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #6A9955">#bu komut ile sistemimize kurulu olan tüm container&#39;ların listesini alalım</span></span>
<span class="line"><span style="color: #DCDCAA">docker</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">ps</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-a</span><span style="color: #D4D4D4"> </span></span>
<span class="line"></span></code></pre></div>



<p></p>



<p>Örnek olarak container adımız <strong>mywebcontainer</strong> ve container imagesi  <strong>mywebimage</strong> olsun. Çalışıyor ise container&#8217;imizi aşağıdaki komut ile durduralım. </p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" 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;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7">Bash</span><span role="button" tabindex="0" data-code="#çalışan containeri durdur
docker stop mywebcontainer" style="color:#D4D4D4;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="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #6A9955">#çalışan containeri durdur</span></span>
<span class="line"><span style="color: #DCDCAA">docker</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">stop</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">mywebcontainer</span></span></code></pre></div>



<p></p>



<p>Container&#8217; a bağlı volume&#8217;lar ve kullanılar portları öğrenmek için aşağıdaki komutu kullanalım. </p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" 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;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7">Bash</span><span role="button" tabindex="0" data-code="docker inspect mywebcontainer" style="color:#D4D4D4;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="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">docker</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">inspect</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">mywebcontainer</span></span></code></pre></div>



<p></p>



<p>Bu komut Json yapısında container ile ilgili bilgiler verecektir. Burada bize gerekli olan volume ve port ayarlarını not edelim.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" 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;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7">JSON</span><span role="button" tabindex="0" data-code="&quot;Mounts&quot;: [
    {
        &quot;Type&quot;: &quot;volume&quot;,
        &quot;Name&quot;: &quot;mywebvolume&quot;,
        &quot;Source&quot;: &quot;/var/lib/docker/volumes/mywebvolume/_data&quot;,
        &quot;Destination&quot;: &quot;/app/data&quot;,
        &quot;Driver&quot;: &quot;local&quot;,
        &quot;Mode&quot;: &quot;rw&quot;,
        &quot;RW&quot;: true,
        &quot;Propagation&quot;: &quot;&quot;
    }
]
..
&quot;Ports&quot;: {
    &quot;80/tcp&quot;: [
        {
            &quot;HostIp&quot;: &quot;0.0.0.0&quot;,
            &quot;HostPort&quot;: &quot;8080&quot;
        }
    ],
    &quot;443/tcp&quot;: null
}
" style="color:#D4D4D4;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="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #CE9178">&quot;Mounts&quot;</span><span style="color: #D4D4D4">: [</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">&quot;Type&quot;</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&quot;volume&quot;</span><span style="color: #D4D4D4">,</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">&quot;Name&quot;</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&quot;mywebvolume&quot;</span><span style="color: #D4D4D4">,</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">&quot;Source&quot;</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&quot;/var/lib/docker/volumes/mywebvolume/_data&quot;</span><span style="color: #D4D4D4">,</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">&quot;Destination&quot;</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&quot;/app/data&quot;</span><span style="color: #D4D4D4">,</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">&quot;Driver&quot;</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&quot;local&quot;</span><span style="color: #D4D4D4">,</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">&quot;Mode&quot;</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&quot;rw&quot;</span><span style="color: #D4D4D4">,</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">&quot;RW&quot;</span><span style="color: #D4D4D4">: </span><span style="color: #569CD6">true</span><span style="color: #D4D4D4">,</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">&quot;Propagation&quot;</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&quot;&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"><span style="color: #D4D4D4">]</span></span>
<span class="line"><span style="color: #D4D4D4">..</span></span>
<span class="line"><span style="color: #CE9178">&quot;Ports&quot;</span><span style="color: #D4D4D4">: {</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #9CDCFE">&quot;80/tcp&quot;</span><span style="color: #D4D4D4">: [</span></span>
<span class="line"><span style="color: #D4D4D4">        {</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #9CDCFE">&quot;HostIp&quot;</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&quot;0.0.0.0&quot;</span><span style="color: #D4D4D4">,</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #9CDCFE">&quot;HostPort&quot;</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&quot;8080&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">        }</span></span>
<span class="line"><span style="color: #D4D4D4">    ],</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #9CDCFE">&quot;443/tcp&quot;</span><span style="color: #D4D4D4">: </span><span style="color: #569CD6">null</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"></span></code></pre></div>



<p></p>



<p>Gereken bilgileri topladıktan sonra scriptlerimizi hazırlayalım.</p>



<h4 class="wp-block-heading"><strong>3.1 Linux’tan Linux’a Taşıma</strong></h4>



<p>Linux sunucular arasında Docker container ve volume taşımak için aşağıdakine benzer bash script&#8217;i kullanabilirsiniz. Bu script, mevcut container&#8217;dan yeni bir Docker imajı oluşturur (Bunun nedeni container içinde yapmış olduğumuz değişikliklerin veya kurulan uygulamaların aktarılmasının sağlanmasıdır), imajı ve volume&#8217;ü yedekler, yedeklenen dosyaları hedef sunucuya kopyalar ve orada container&#8217;ı tekrar oluşturur.</p>



<p>Bir editor uygulaması ile aşağıdaki script&#8217;i oluşturalım. Bunun için nano veya vim kullanabilirsiniz. </p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" 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;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7">Bash</span><span role="button" tabindex="0" data-code="nano transfer_container.sh" style="color:#D4D4D4;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="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">nano</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">transfer_container.sh</span></span></code></pre></div>



<p></p>



<p>Aşağıdaki script&#8217;i editörümüze kopyalayıp değişkenler üzerinde kendi sistemimize göre değişiklikleri yaptıktan sonra kayıt edip çıkalım.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" 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;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7">Bash</span><span role="button" tabindex="0" data-code="#!/bin/bash

# Değişkenleri tanımla
SOURCE_CONTAINER=&quot;mywebcontainer&quot;
SOURCE_IMAGE=&quot;mywebimage&quot;
UPDATED_IMAGE_TAG=&quot;updated&quot;
VOLUME_NAME=&quot;mywebvolume&quot;
DESTINATION_SERVER=&quot;root@hedef sunucu ip adresi&quot; # Kullanıcı adımız örneğimizde root olsun
DESTINATION_PATH=&quot;/root/tmp&quot;
IMAGE_FILE=&quot;mywebimage_updated.tar&quot;
VOLUME_FILE=&quot;mywebvolume.tar.gz&quot;
CONTAINER_PORT=&quot;80&quot;
CONTAINER_INTERNAL_PORT=&quot;8080&quot;
VOLUME_MOUNT_PATH=&quot;/app&quot;

# 1. Güncel imajı oluştur
echo &quot;Container'dan yeni imaj oluşturuluyor...&quot;
docker commit $SOURCE_CONTAINER &quot;$SOURCE_IMAGE:$UPDATED_IMAGE_TAG&quot;

# 2. İmajı sıkıştır
echo &quot;Güncellenmiş imaj sıkıştırılıyor...&quot;
docker save -o $IMAGE_FILE &quot;$SOURCE_IMAGE:$UPDATED_IMAGE_TAG&quot;

# 3. Volume'ü sıkıştır
echo &quot;Volume sıkıştırılıyor...&quot;
tar -czvf $VOLUME_FILE -C /var/lib/docker/volumes/$VOLUME_NAME _data

# 4. İmaj ve volume'u hedef sunucuya kopyala
echo &quot;İmaj ve volume dosyaları hedef sunucuya aktarılıyor...&quot;
scp $IMAGE_FILE $VOLUME_FILE $DESTINATION_SERVER:$DESTINATION_PATH

# 5. Hedef sunucuda imajı ve volume'u aç
echo &quot;Hedef sunucuda imaj ve volume açılıyor...&quot;
ssh -t $DESTINATION_SERVER &lt;&lt; EOF
    docker load -i $DESTINATION_PATH/$IMAGE_FILE
    mkdir -p /var/lib/docker/volumes/$VOLUME_NAME/_data
    tar -xzvf $DESTINATION_PATH/$VOLUME_FILE -C /var/lib/docker/volumes/$VOLUME_NAME
    docker run -d --name $SOURCE_CONTAINER -p $CONTAINER_PORT:$CONTAINER_INTERNAL_PORT -v $VOLUME_NAME:$VOLUME_MOUNT_PATH $SOURCE_IMAGE:$UPDATED_IMAGE_TAG
EOF

# 6. Temizlik işlemi
echo &quot;Geçici dosyalar temizleniyor...&quot;
rm -f $IMAGE_FILE $VOLUME_FILE

echo &quot;İşlem tamamlandı. Container başarıyla taşındı ve hedef sunucuda başlatıldı.&quot;
" style="color:#D4D4D4;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="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #6A9955">#!/bin/bash</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># Değişkenleri tanımla</span></span>
<span class="line"><span style="color: #9CDCFE">SOURCE_CONTAINER</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;mywebcontainer&quot;</span></span>
<span class="line"><span style="color: #9CDCFE">SOURCE_IMAGE</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;mywebimage&quot;</span></span>
<span class="line"><span style="color: #9CDCFE">UPDATED_IMAGE_TAG</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;updated&quot;</span></span>
<span class="line"><span style="color: #9CDCFE">VOLUME_NAME</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;mywebvolume&quot;</span></span>
<span class="line"><span style="color: #9CDCFE">DESTINATION_SERVER</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;root@hedef sunucu ip adresi&quot;</span><span style="color: #D4D4D4"> </span><span style="color: #6A9955"># Kullanıcı adımız örneğimizde root olsun</span></span>
<span class="line"><span style="color: #9CDCFE">DESTINATION_PATH</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;/root/tmp&quot;</span></span>
<span class="line"><span style="color: #9CDCFE">IMAGE_FILE</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;mywebimage_updated.tar&quot;</span></span>
<span class="line"><span style="color: #9CDCFE">VOLUME_FILE</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;mywebvolume.tar.gz&quot;</span></span>
<span class="line"><span style="color: #9CDCFE">CONTAINER_PORT</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;80&quot;</span></span>
<span class="line"><span style="color: #9CDCFE">CONTAINER_INTERNAL_PORT</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;8080&quot;</span></span>
<span class="line"><span style="color: #9CDCFE">VOLUME_MOUNT_PATH</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;/app&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># 1. Güncel imajı oluştur</span></span>
<span class="line"><span style="color: #DCDCAA">echo</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&quot;Container&#39;dan yeni imaj oluşturuluyor...&quot;</span></span>
<span class="line"><span style="color: #DCDCAA">docker</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">commit</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">$SOURCE_CONTAINER</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&quot;</span><span style="color: #9CDCFE">$SOURCE_IMAGE</span><span style="color: #CE9178">:</span><span style="color: #9CDCFE">$UPDATED_IMAGE_TAG</span><span style="color: #CE9178">&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># 2. İmajı sıkıştır</span></span>
<span class="line"><span style="color: #DCDCAA">echo</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&quot;Güncellenmiş imaj sıkıştırılıyor...&quot;</span></span>
<span class="line"><span style="color: #DCDCAA">docker</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">save</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-o</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">$IMAGE_FILE</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&quot;</span><span style="color: #9CDCFE">$SOURCE_IMAGE</span><span style="color: #CE9178">:</span><span style="color: #9CDCFE">$UPDATED_IMAGE_TAG</span><span style="color: #CE9178">&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># 3. Volume&#39;ü sıkıştır</span></span>
<span class="line"><span style="color: #DCDCAA">echo</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&quot;Volume sıkıştırılıyor...&quot;</span></span>
<span class="line"><span style="color: #DCDCAA">tar</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-czvf</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">$VOLUME_FILE</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-C</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">/var/lib/docker/volumes/</span><span style="color: #9CDCFE">$VOLUME_NAME</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">_data</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># 4. İmaj ve volume&#39;u hedef sunucuya kopyala</span></span>
<span class="line"><span style="color: #DCDCAA">echo</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&quot;İmaj ve volume dosyaları hedef sunucuya aktarılıyor...&quot;</span></span>
<span class="line"><span style="color: #DCDCAA">scp</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">$IMAGE_FILE</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">$VOLUME_FILE</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">$DESTINATION_SERVER</span><span style="color: #CE9178">:</span><span style="color: #9CDCFE">$DESTINATION_PATH</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># 5. Hedef sunucuda imajı ve volume&#39;u aç</span></span>
<span class="line"><span style="color: #DCDCAA">echo</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&quot;Hedef sunucuda imaj ve volume açılıyor...&quot;</span></span>
<span class="line"><span style="color: #DCDCAA">ssh</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-t</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">$DESTINATION_SERVER</span><span style="color: #D4D4D4"> &lt;&lt; </span><span style="color: #D4D4D4">EOF</span></span>
<span class="line"><span style="color: #CE9178">    docker load -i </span><span style="color: #9CDCFE">$DESTINATION_PATH</span><span style="color: #CE9178">/</span><span style="color: #9CDCFE">$IMAGE_FILE</span></span>
<span class="line"><span style="color: #CE9178">    mkdir -p /var/lib/docker/volumes/</span><span style="color: #9CDCFE">$VOLUME_NAME</span><span style="color: #CE9178">/_data</span></span>
<span class="line"><span style="color: #CE9178">    tar -xzvf </span><span style="color: #9CDCFE">$DESTINATION_PATH</span><span style="color: #CE9178">/</span><span style="color: #9CDCFE">$VOLUME_FILE</span><span style="color: #CE9178"> -C /var/lib/docker/volumes/</span><span style="color: #9CDCFE">$VOLUME_NAME</span></span>
<span class="line"><span style="color: #CE9178">    docker run -d --name </span><span style="color: #9CDCFE">$SOURCE_CONTAINER</span><span style="color: #CE9178"> -p </span><span style="color: #9CDCFE">$CONTAINER_PORT</span><span style="color: #CE9178">:</span><span style="color: #9CDCFE">$CONTAINER_INTERNAL_PORT</span><span style="color: #CE9178"> -v </span><span style="color: #9CDCFE">$VOLUME_NAME</span><span style="color: #CE9178">:</span><span style="color: #9CDCFE">$VOLUME_MOUNT_PATH</span><span style="color: #CE9178"> </span><span style="color: #9CDCFE">$SOURCE_IMAGE</span><span style="color: #CE9178">:</span><span style="color: #9CDCFE">$UPDATED_IMAGE_TAG</span></span>
<span class="line"><span style="color: #D4D4D4">EOF</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># 6. Temizlik işlemi</span></span>
<span class="line"><span style="color: #DCDCAA">echo</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&quot;Geçici dosyalar temizleniyor...&quot;</span></span>
<span class="line"><span style="color: #DCDCAA">rm</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-f</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">$IMAGE_FILE</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">$VOLUME_FILE</span></span>
<span class="line"></span>
<span class="line"><span style="color: #DCDCAA">echo</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&quot;İşlem tamamlandı. Container başarıyla taşındı ve hedef sunucuda başlatıldı.&quot;</span></span>
<span class="line"></span></code></pre></div>



<p></p>



<p>Oluşturduğumuz script&#8217;e çalışma izni vermemiz gerekiyor.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" 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;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7">Bash</span><span role="button" tabindex="0" data-code="#script e çalışma izni ver
chmod +x transfer_container.sh" style="color:#D4D4D4;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="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #6A9955">#script e çalışma izni ver</span></span>
<span class="line"><span style="color: #DCDCAA">chmod</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">+x</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">transfer_container.sh</span></span></code></pre></div>



<p></p>



<p>Ardından script&#8217;imizi çalıştırıp taşıma işlemini gerçekleştirelim.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" 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;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7">Bash</span><span role="button" tabindex="0" data-code="#script i çalıştır
./transfer_container.sh" style="color:#D4D4D4;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="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #6A9955">#script i çalıştır</span></span>
<span class="line"><span style="color: #DCDCAA">./transfer_container.sh</span></span></code></pre></div>



<p></p>



<p>Bu script, taşıma işlemlerini otomatik hale getirir. Öne çıkan adımlar:</p>



<ul class="wp-block-list">
<li><strong>Dosyaların aktarımı ve açılması:</strong> SCP kullanılarak hedef sunucuya dosyalar gönderilir ve orada tekrar açılarak yeni container başlatılır.</li>



<li><strong>Container&#8217;dan yeni bir imaj oluşturuluyor:</strong> docker commit komutuyla mevcut container&#8217;ın güncel haliyle bir imaj oluşturulur.</li>



<li><strong>Volume ve imaj dosyaları sıkıştırılıyor:</strong> tar komutu ile volume dosyaları sıkıştırılır ve docker save ile imaj tar dosyası olarak kaydedilir</li>
</ul>



<h4 class="wp-block-heading">3<strong>.2 Linux’tan Windows’a Taşıma</strong></h4>



<p>Eğer bir Docker container’ını Linux sunucusundan Windows sunucusuna taşımak istiyorsanız, işlem adımları benzer olacak ancak bazı değişiklikler gerekecektir. Özellikle volume verilerinin Windows&#8217;a uygun bir dizine taşınması gerekecek.</p>



<p>Aşağıda, PowerShell üzerinden Linux makinedeki container ve volume&#8217;ü yedekleyen ve ardından Windows makinesine aktararak container&#8217;ı başlatan bir örnek script verilmiştir:</p>



<p>Öncesinde powershell&#8217;i yönetici olarak çalıştırın. ardından notepad ile uzantısı .ps1 olacak şekilde script dosyanızı oluşturun. Script dosyamız <strong>docker_transfer.ps1</strong> olsun.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" 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;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7">PowerShell</span><span role="button" tabindex="0" data-code="# Değişkenleri tanımla
$SOURCE_LINUX_SERVER = &quot;root@kaynakip adresi&quot; # Linux makine IP adresi ve kullanıcı
$SOURCE_CONTAINER = &quot;mywebcontainer&quot;
$SOURCE_IMAGE = &quot;mywebimage&quot;
$UPDATED_IMAGE_TAG = &quot;updated&quot;
$VOLUME_NAME = &quot;mywebvolume&quot;
$LINUX_VOLUME_PATH = &quot;/var/lib/docker/volumes/$VOLUME_NAME/_data&quot;
$WINDOWS_VOLUME_MOUNT_PATH = &quot;C:\docker_volumes\asos_extern_test&quot;
$IMAGE_FILE = &quot;C:\docker_backup\mywebimage_updated.tar&quot;
$VOLUME_FILE = &quot;C:\docker_backup\mywebvolume.tar.gz&quot;
$CONTAINER_PORT = 80
$CONTAINER_INTERNAL_PORT = 8080
$VOLUME_MOUNT_PATH = &quot;/app&quot;
$LINUX_BACKUP_PATH = &quot;/root/docker_backup&quot;

# 1. Linux makineden imaj ve volume dosyalarını yedekle ve aktar
Write-Host &quot;Linux makinede container'dan yeni imaj oluşturuluyor...&quot;
ssh $SOURCE_LINUX_SERVER &quot;docker commit $SOURCE_CONTAINER $SOURCE_IMAGE:$UPDATED_IMAGE_TAG&quot;

Write-Host &quot;Güncellenmiş imaj sıkıştırılıyor...&quot;
ssh $SOURCE_LINUX_SERVER &quot;docker save -o $LINUX_BACKUP_PATH/mywebimage_updated.tar $SOURCE_IMAGE:$UPDATED_IMAGE_TAG&quot;

Write-Host &quot;Volume sıkıştırılıyor...&quot;
ssh $SOURCE_LINUX_SERVER &quot;tar -czvf $LINUX_BACKUP_PATH/mywebvolume.tar.gz -C /var/lib/docker/volumes/$VOLUME_NAME _data&quot;

Write-Host &quot;Yedek dosyaları Windows makineye aktarılıyor...&quot;
scp $SOURCE_LINUX_SERVER:$LINUX_BACKUP_PATH/mywebimage_updated.tar $IMAGE_FILE
scp $SOURCE_LINUX_SERVER:$LINUX_BACKUP_PATH/mywebvolume.tar.gz $VOLUME_FILE

# 2. Windows makinede imaj ve volume dosyalarını aç
Write-Host &quot;Windows makinede imaj ve volume açılıyor...&quot;
docker load -i $IMAGE_FILE

# Windows üzerinde volume dizinini oluştur
if (-Not (Test-Path -Path $WINDOWS_VOLUME_MOUNT_PATH)) {
    Write-Host &quot;Volume dizini oluşturuluyor...&quot;
    New-Item -ItemType Directory -Path $WINDOWS_VOLUME_MOUNT_PATH
}

Write-Host &quot;Volume dosyası çıkarılıyor...&quot;
tar -xzvf $VOLUME_FILE -C $WINDOWS_VOLUME_MOUNT_PATH

# 3. Windows makinede container'ı başlat
Write-Host &quot;Container başlatılıyor...&quot;
docker run -d --name $SOURCE_CONTAINER -p $CONTAINER_PORT:$CONTAINER_INTERNAL_PORT -v $WINDOWS_VOLUME_MOUNT_PATH:$VOLUME_MOUNT_PATH $SOURCE_IMAGE:$UPDATED_IMAGE_TAG

# 4. Temizlik işlemi (İstersen dosyaları temizleyebilirsin)
Write-Host &quot;Geçici dosyalar temizleniyor...&quot;
Remove-Item $IMAGE_FILE
Remove-Item $VOLUME_FILE

Write-Host &quot;İşlem tamamlandı. Container başarıyla taşındı ve Windows sunucuda başlatıldı.&quot;
" style="color:#D4D4D4;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="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #6A9955"># Değişkenleri tanımla</span></span>
<span class="line"><span style="color: #9CDCFE">$SOURCE_LINUX_SERVER</span><span style="color: #D4D4D4"> = </span><span style="color: #CE9178">&quot;root@kaynakip adresi&quot;</span><span style="color: #D4D4D4"> </span><span style="color: #6A9955"># Linux makine IP adresi ve kullanıcı</span></span>
<span class="line"><span style="color: #9CDCFE">$SOURCE_CONTAINER</span><span style="color: #D4D4D4"> = </span><span style="color: #CE9178">&quot;mywebcontainer&quot;</span></span>
<span class="line"><span style="color: #9CDCFE">$SOURCE_IMAGE</span><span style="color: #D4D4D4"> = </span><span style="color: #CE9178">&quot;mywebimage&quot;</span></span>
<span class="line"><span style="color: #9CDCFE">$UPDATED_IMAGE_TAG</span><span style="color: #D4D4D4"> = </span><span style="color: #CE9178">&quot;updated&quot;</span></span>
<span class="line"><span style="color: #9CDCFE">$VOLUME_NAME</span><span style="color: #D4D4D4"> = </span><span style="color: #CE9178">&quot;mywebvolume&quot;</span></span>
<span class="line"><span style="color: #9CDCFE">$LINUX_VOLUME_PATH</span><span style="color: #D4D4D4"> = </span><span style="color: #CE9178">&quot;/var/lib/docker/volumes/</span><span style="color: #9CDCFE">$VOLUME_NAME</span><span style="color: #CE9178">/_data&quot;</span></span>
<span class="line"><span style="color: #9CDCFE">$WINDOWS_VOLUME_MOUNT_PATH</span><span style="color: #D4D4D4"> = </span><span style="color: #CE9178">&quot;C:\docker_volumes\asos_extern_test&quot;</span></span>
<span class="line"><span style="color: #9CDCFE">$IMAGE_FILE</span><span style="color: #D4D4D4"> = </span><span style="color: #CE9178">&quot;C:\docker_backup\mywebimage_updated.tar&quot;</span></span>
<span class="line"><span style="color: #9CDCFE">$VOLUME_FILE</span><span style="color: #D4D4D4"> = </span><span style="color: #CE9178">&quot;C:\docker_backup\mywebvolume.tar.gz&quot;</span></span>
<span class="line"><span style="color: #9CDCFE">$CONTAINER_PORT</span><span style="color: #D4D4D4"> = </span><span style="color: #B5CEA8">80</span></span>
<span class="line"><span style="color: #9CDCFE">$CONTAINER_INTERNAL_PORT</span><span style="color: #D4D4D4"> = </span><span style="color: #B5CEA8">8080</span></span>
<span class="line"><span style="color: #9CDCFE">$VOLUME_MOUNT_PATH</span><span style="color: #D4D4D4"> = </span><span style="color: #CE9178">&quot;/app&quot;</span></span>
<span class="line"><span style="color: #9CDCFE">$LINUX_BACKUP_PATH</span><span style="color: #D4D4D4"> = </span><span style="color: #CE9178">&quot;/root/docker_backup&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># 1. Linux makineden imaj ve volume dosyalarını yedekle ve aktar</span></span>
<span class="line"><span style="color: #DCDCAA">Write-Host</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&quot;Linux makinede container&#39;dan yeni imaj oluşturuluyor...&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">ssh </span><span style="color: #9CDCFE">$SOURCE_LINUX_SERVER</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&quot;docker commit </span><span style="color: #9CDCFE">$SOURCE_CONTAINER</span><span style="color: #CE9178"> </span><span style="color: #9CDCFE">$SOURCE_IMAGE</span><span style="color: #CE9178">:</span><span style="color: #9CDCFE">$UPDATED_IMAGE_TAG</span><span style="color: #CE9178">&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #DCDCAA">Write-Host</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&quot;Güncellenmiş imaj sıkıştırılıyor...&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">ssh </span><span style="color: #9CDCFE">$SOURCE_LINUX_SERVER</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&quot;docker save -o </span><span style="color: #9CDCFE">$LINUX_BACKUP_PATH</span><span style="color: #CE9178">/mywebimage_updated.tar </span><span style="color: #9CDCFE">$SOURCE_IMAGE</span><span style="color: #CE9178">:</span><span style="color: #9CDCFE">$UPDATED_IMAGE_TAG</span><span style="color: #CE9178">&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #DCDCAA">Write-Host</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&quot;Volume sıkıştırılıyor...&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">ssh </span><span style="color: #9CDCFE">$SOURCE_LINUX_SERVER</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&quot;tar -czvf </span><span style="color: #9CDCFE">$LINUX_BACKUP_PATH</span><span style="color: #CE9178">/mywebvolume.tar.gz -C /var/lib/docker/volumes/</span><span style="color: #9CDCFE">$VOLUME_NAME</span><span style="color: #CE9178"> _data&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #DCDCAA">Write-Host</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&quot;Yedek dosyaları Windows makineye aktarılıyor...&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">scp </span><span style="color: #9CDCFE">$SOURCE_LINUX_SERVER</span><span style="color: #D4D4D4">:</span><span style="color: #9CDCFE">$LINUX_BACKUP_PATH</span><span style="color: #D4D4D4">/mywebimage_updated.tar </span><span style="color: #9CDCFE">$IMAGE_FILE</span></span>
<span class="line"><span style="color: #D4D4D4">scp </span><span style="color: #9CDCFE">$SOURCE_LINUX_SERVER</span><span style="color: #D4D4D4">:</span><span style="color: #9CDCFE">$LINUX_BACKUP_PATH</span><span style="color: #D4D4D4">/mywebvolume.tar.gz </span><span style="color: #9CDCFE">$VOLUME_FILE</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># 2. Windows makinede imaj ve volume dosyalarını aç</span></span>
<span class="line"><span style="color: #DCDCAA">Write-Host</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&quot;Windows makinede imaj ve volume açılıyor...&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">docker load -i </span><span style="color: #9CDCFE">$IMAGE_FILE</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># Windows üzerinde volume dizinini oluştur</span></span>
<span class="line"><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (-Not (</span><span style="color: #DCDCAA">Test-Path</span><span style="color: #D4D4D4"> -Path </span><span style="color: #9CDCFE">$WINDOWS_VOLUME_MOUNT_PATH</span><span style="color: #D4D4D4">)) {</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #DCDCAA">Write-Host</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&quot;Volume dizini oluşturuluyor...&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #DCDCAA">New-Item</span><span style="color: #D4D4D4"> -ItemType Directory -Path </span><span style="color: #9CDCFE">$WINDOWS_VOLUME_MOUNT_PATH</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #DCDCAA">Write-Host</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&quot;Volume dosyası çıkarılıyor...&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">tar -xzvf </span><span style="color: #9CDCFE">$VOLUME_FILE</span><span style="color: #D4D4D4"> -C </span><span style="color: #9CDCFE">$WINDOWS_VOLUME_MOUNT_PATH</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># 3. Windows makinede container&#39;ı başlat</span></span>
<span class="line"><span style="color: #DCDCAA">Write-Host</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&quot;Container başlatılıyor...&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">docker run -d --name </span><span style="color: #9CDCFE">$SOURCE_CONTAINER</span><span style="color: #D4D4D4"> -p </span><span style="color: #9CDCFE">$CONTAINER_PORT</span><span style="color: #D4D4D4">:</span><span style="color: #9CDCFE">$CONTAINER_INTERNAL_PORT</span><span style="color: #D4D4D4"> -v </span><span style="color: #9CDCFE">$WINDOWS_VOLUME_MOUNT_PATH</span><span style="color: #D4D4D4">:</span><span style="color: #9CDCFE">$VOLUME_MOUNT_PATH</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">$SOURCE_IMAGE</span><span style="color: #D4D4D4">:</span><span style="color: #9CDCFE">$UPDATED_IMAGE_TAG</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># 4. Temizlik işlemi (İstersen dosyaları temizleyebilirsin)</span></span>
<span class="line"><span style="color: #DCDCAA">Write-Host</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&quot;Geçici dosyalar temizleniyor...&quot;</span></span>
<span class="line"><span style="color: #DCDCAA">Remove-Item</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">$IMAGE_FILE</span></span>
<span class="line"><span style="color: #DCDCAA">Remove-Item</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">$VOLUME_FILE</span></span>
<span class="line"></span>
<span class="line"><span style="color: #DCDCAA">Write-Host</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&quot;İşlem tamamlandı. Container başarıyla taşındı ve Windows sunucuda başlatıldı.&quot;</span></span>
<span class="line"></span></code></pre></div>



<p></p>



<p>Script&#8217;i çalıştırabilmek için PowerShell script çalıştırma ilkelerini kontrol edin. Varsayılan olarak, script&#8217;lerin çalıştırılmasına izin verilmez. Bunu geçici olarak şu komutla değiştirebilirsiniz ve ardından çalıştırabilirsiniz.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" 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;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7">PowerShell</span><span role="button" tabindex="0" data-code="Set-ExecutionPolicy RemoteSigned #geçici izin verme
.\docker_transfer.ps1 #çalıştırma" style="color:#D4D4D4;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="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">Set-ExecutionPolicy</span><span style="color: #D4D4D4"> RemoteSigned </span><span style="color: #6A9955">#geçici izin verme</span></span>
<span class="line"><span style="color: #D4D4D4">.\docker_transfer.ps1 </span><span style="color: #6A9955">#çalıştırma</span></span></code></pre></div>



<p></p>



<h4 class="wp-block-heading">Açıklamalar</h4>



<ul class="wp-block-list">
<li><strong>PowerShell&#8217;de SSH ve SCP</strong>: Windows&#8217;da PowerShell&#8217;de SSH ve SCP komutlarını kullanarak Linux sunucuya bağlanıyor ve dosyaları yedekliyoruz. Bunun için Windows 10 ve üzeri işletim sistemlerinde SSH istemcisinin yüklü olduğundan emin olun.</li>



<li><strong>Docker Komutları</strong>: Linux makinede Docker komutları <code>ssh</code> üzerinden çalıştırılıyor ve yedekleme işlemi yapılır. İmaj ve volume dosyaları Windows makineye <code>scp</code> ile aktarılıyor.</li>



<li><strong>Volume Mount</strong>: Windows&#8217;da Docker volume dosyasını doğru bir dizine çıkarıp ardından container oluştururken bu volume&#8217;ü mount ediyoruz.</li>
</ul>



<h4 class="wp-block-heading">Gereksinimler</h4>



<ul class="wp-block-list">
<li><strong>PowerShell SSH Client</strong>: Windows üzerinde SSH ve SCP komutlarını çalıştırabilmek için <code>OpenSSH Client</code> yüklü olmalıdır. Bunu <code>Settings &gt; Apps &gt; Optional Features</code> altında bulabilirsiniz.</li>



<li><strong>Docker for Windows</strong>: Windows üzerinde Docker Desktop yüklü olmalıdır.</li>
</ul>



<h3 class="wp-block-heading"><strong>4. Sonuç</strong></h3>



<p>Bu script yapıları ile Docker container’larını Linux sunucular arasında ya da Linux&#8217;tan Windows&#8217;a taşımak oldukça kolay hale geliyor. Docker imajlarını ve volume&#8217;lerini taşırken, imajlarınızı güncelleyebilir, volume&#8217;lerinizi eksiksiz yedekleyebilir ve herhangi bir ortamda hızla yeni bir container oluşturabilirsiniz.</p>



<p>Bu yöntem, Docker&#8217;ın sağladığı taşınabilirlik avantajlarını tam anlamıyla kullanarak, sunucular arasında sorunsuz geçişler sağlar.</p>
<p><a href="https://www.kesifruhu.com/yazilim/yeni-tekno-diller/docker-container-tasima/">Docker Container Taşıma</a> yazısı ilk önce <a href="https://www.kesifruhu.com">Keşif Ruhu</a> üzerinde ortaya çıktı.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.kesifruhu.com/yazilim/yeni-tekno-diller/docker-container-tasima/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
