<?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>داکر آرشیو - بلاگ هم‌روش</title>
	<atom:link href="https://hamravesh.com/blog/category/docker/feed/" rel="self" type="application/rss+xml" />
	<link>https://hamravesh.com/blog/category/docker/</link>
	<description>بلاگ رسمی هم‌روش</description>
	<lastBuildDate>Sat, 20 Jun 2026 14:53:24 +0000</lastBuildDate>
	<language>fa-IR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>

<image>
	<url>https://hamravesh.com/blog/wp-content/uploads/2026/05/cropped-typeGeneral-32x32.png</url>
	<title>داکر آرشیو - بلاگ هم‌روش</title>
	<link>https://hamravesh.com/blog/category/docker/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>آموزش داکرایز کردن اپلیکیشن‌ها</title>
		<link>https://hamravesh.com/blog/how-to-dockerize-application/</link>
					<comments>https://hamravesh.com/blog/how-to-dockerize-application/#respond</comments>
		
		<dc:creator><![CDATA[ارسطو عباسی]]></dc:creator>
		<pubDate>Tue, 10 Dec 2024 11:11:29 +0000</pubDate>
				<category><![CDATA[داکر]]></category>
		<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=3723</guid>

					<description><![CDATA[<p>داکرایز کردن اپلیکیشن فرآیندی است که به شما امکان می‌دهد برنامه‌های خود را به شکلی مستقل از محیط اجرا بسته‌بندی و اجرا کنید</p>
<p>The post <a href="https://hamravesh.com/blog/how-to-dockerize-application/">آموزش داکرایز کردن اپلیکیشن‌ها</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>داکر ابزاری قدرتمند برای ایجاد، توسعه و استقرار اپلیکیشن‌ها به‌صورت کانتینر است. کانتینرها محیط‌های ایزوله‌ای هستند که به برنامه‌ها اجازه می‌دهند بدون نیاز به تنظیمات محیطی پیچیده اجرا شوند. منظور از <strong>داکرایز کردن</strong> (Dockerize) یک برنامه، فرآیندی است که در آن برنامه را در قالب یک <strong>کانتینر داکر</strong> قرار می‌دهید. این کار باعث می‌شود که برنامه به‌صورت ایزوله و مستقل از سیستم‌عامل یا تنظیمات خاص هر محیطی اجرا شود. به عبارت دیگر، داکرایز کردن یعنی بسته‌بندی برنامه و تمامی وابستگی‌های آن (مانند کتابخانه‌ها، فایل‌های پیکربندی، و&#8230;) در یک واحد قابل‌حمل به نام «کانتینر». این کانتینر می‌تواند در هر سیستم عاملی که داکر روی آن نصب شده باشد، بدون نیاز به پیکربندی‌های خاص اجرا شود.</p>



<p>در این مطلب از وبلاگ هم‌روش با نحوه داکرایز کردن اپلیکیشن‌ها به‌صورت قدم‌ به قدم آشنا خواهید شد.</p>



<h3 class="wp-block-heading" id="h-۱-نصب-docker">۱: نصب Docker</h3>



<p>ابتدا باید Docker را روی سیستم خودتان نصب کنید. برای این‌کار می‌توانید Docker را از سایت رسمی <a href="https://www.docker.com/">Docker</a> دانلود و نصب کنید. برای این‌کار می‌توانید راهنماهای «<strong><a href="https://hamravesh.com/blog/install-docker-ubuntu/">آموزش نصب داکر روی اوبونتو</a></strong>» یا «<strong><a href="https://hamravesh.com/blog/install-docker-on-windows/">آموزش نصب داکر روی ویندوز</a></strong>» را مطالعه کنید.</p>



<h3 class="wp-block-heading" id="h-۲-ایجاد-یک-فایل-dockerfile">۲: ایجاد یک فایل <code>Dockerfile</code></h3>



<p>فایل Dockerfile یکی از اصلی‌ترین بخش‌های داکرایز کردن یک اپلیکیشن است. این فایل شامل دستورالعمل‌هایی است که Docker از آن برای ساخت تصویر (image) اپلیکیشن استفاده می‌کند. در زیر یک نمونه ساده از فایل Dockerfile برای یک اپلیکیشن Node.js را مشاهده می‌کنید:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--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:#2d333d;color:#9eadbd">Dockerfile</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly># انتخاب تصویر پایه
FROM node:14

# تنظیم دایرکتوری کاری در کانتینر
WORKDIR /app

# کپی کردن فایل‌های package.json و package-lock.json
COPY package*.json ./

# نصب وابستگی‌ها
RUN npm install

# کپی کردن بقیه فایل‌ها
COPY . .

# باز کردن پورت مورد نیاز
EXPOSE 3000

# دستور اجرا برای شروع اپلیکیشن
CMD &#91;"npm", "start"&#93;
</textarea></pre><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 github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #768390"># انتخاب تصویر پایه</span></span>
<span class="line"><span style="color: #F47067">FROM</span><span style="color: #ADBAC7"> node:14</span></span>
<span class="line"></span>
<span class="line"><span style="color: #768390"># تنظیم دایرکتوری کاری در کانتینر</span></span>
<span class="line"><span style="color: #F47067">WORKDIR</span><span style="color: #ADBAC7"> /app</span></span>
<span class="line"></span>
<span class="line"><span style="color: #768390"># کپی کردن فایل‌های package.json و package-lock.json</span></span>
<span class="line"><span style="color: #F47067">COPY</span><span style="color: #ADBAC7"> package*.json ./</span></span>
<span class="line"></span>
<span class="line"><span style="color: #768390"># نصب وابستگی‌ها</span></span>
<span class="line"><span style="color: #F47067">RUN</span><span style="color: #ADBAC7"> npm install</span></span>
<span class="line"></span>
<span class="line"><span style="color: #768390"># کپی کردن بقیه فایل‌ها</span></span>
<span class="line"><span style="color: #F47067">COPY</span><span style="color: #ADBAC7"> . .</span></span>
<span class="line"></span>
<span class="line"><span style="color: #768390"># باز کردن پورت مورد نیاز</span></span>
<span class="line"><span style="color: #F47067">EXPOSE</span><span style="color: #ADBAC7"> 3000</span></span>
<span class="line"></span>
<span class="line"><span style="color: #768390"># دستور اجرا برای شروع اپلیکیشن</span></span>
<span class="line"><span style="color: #F47067">CMD</span><span style="color: #ADBAC7"> &#91;</span><span style="color: #96D0FF">&quot;npm&quot;</span><span style="color: #ADBAC7">, </span><span style="color: #96D0FF">&quot;start&quot;</span><span style="color: #ADBAC7">&#93;</span></span>
<span class="line"></span></code></pre></div>



<p>این فایل به طور خلاصه مراحل زیر را انجام می‌دهد:</p>



<ul class="wp-block-list">
<li>استفاده از یک image پایه (در اینجا Node.js نسخه ۱۴).</li>



<li>تنظیم دایرکتوری کاری برای اپلیکیشن.</li>



<li>کپی کردن فایل‌های package.json برای نصب وابستگی‌ها.</li>



<li>کپی کردن سایر فایل‌های پروژه.</li>



<li>باز کردن پورت ۳۰۰۰ برای دسترسی به اپلیکیشن.</li>



<li>اجرای دستور <code>npm start</code> برای اجرای اپلیکیشن.</li>
</ul>



<p>نکته: معمولا برای هر پروژه یک یا چند تکنولوژی خاص وجود دارد که در دنیای داکر، ایمیج‌های رسمی داشته و می‌توان از آن‌ها استفاده کرد. برای مثال، در زیر سه نمونه از Base imageهای پر کاربرد را مشاهده می‌کنید:</p>



<ul class="wp-block-list">
<li><a href="https://hub.docker.com/_/java/">https://hub.docker.com/_/java</a></li>



<li><a href="https://hub.docker.com/_/python/">https://hub.docker.com/_/python</a></li>



<li><a href="https://hub.docker.com/_/nginx/">https://hub.docker.com/_/nginx</a></li>
</ul>



<p>افرادی که هیچکدام از تکنولوژی‌ها در Docker Hub برای‌شان مفید نیست، نیز می‌توانند از یک Base OS استفاده کرده و پکیج‌های مورد نیازشان را روی آن نصب کنند. برای مثال شما می‌توانید از Ubuntu استفاده کنید. البته از آنجایی که حجم این ایمیج‌ها زیاد است، پیشنهاد می‌شود که از نسخه Alpine استفاده کنید.&nbsp;</p>



<h3 class="wp-block-heading" id="h-۳-ساخت-ایمیج-داکری-پروژه-تان">۳. ساخت ایمیج داکری پروژه‌تان</h3>



<p>پس از ساخت Dockerfile، حالا می‌توانید ایمیج Docker را با استفاده از دستور زیر ایجاد کنید:</p>



<pre class="wp-block-preformatted">docker build -t my-node-app .</pre>



<p>در اینجا <code>my-node-app</code> نام تصویر شماست و <code>.</code> به معنای آن است که Dockerfile در دایرکتوری فعلی قرار دارد. نتیجه این دستور، تبدیل پروژه شما به یک داکر ایمیج است که می‌توانید بعدا از آن برای دیپلوی ساده استفاده کنید. </p>



<h3 class="wp-block-heading">۴. اجرای کانتینر Docker</h3>



<p>پس از ساخت ایمیج، حالا می‌توانید کانتینر اپلیکیشن خود را اجرا کنید:</p>



<pre class="wp-block-preformatted">docker run -p 3000:3000 my-node-app</pre>



<p>در اینجا پورت ۳۰۰۰ از کامپیوتر میزبان به پورت ۳۰۰۰ داخل کانتینر متصل می‌شود و اپلیکیشن به صورت لوکال در دسترس خواهد بود.</p>



<h3 class="wp-block-heading">۵. تست و بهینه‌سازی</h3>



<p>بعد از اجرای کانتینر، اپلیکیشن شما باید به درستی کار کند. می‌توانید با تست‌های مختلف عملکرد و کارایی کانتینر خود را بررسی کنید. همچنین بهتر است برخی از بهینه‌سازی‌ها مانند استفاده از <strong>multi-stage builds</strong> برای کاهش حجم تصویر نهایی یا تنظیمات مربوط به <strong>caching</strong> را در نظر بگیرید.</p>



<h4 class="wp-block-heading">نکات پیشرفته</h4>



<ul class="wp-block-list">
<li><strong>ذخیره‌سازی پایدار (Volume):</strong> اگر اپلیکیشن شما نیاز به ذخیره‌سازی داده‌ها دارد، می‌توانید از Volume‌های Docker برای مدیریت داده‌های پایدار استفاده کنید.</li>



<li><strong>شبکه‌ها و چند کانتینر:</strong> برای ارتباط بین چندین سرویس (مثلاً اپلیکیشن و دیتابیس)، Docker قابلیت ایجاد شبکه‌های خصوصی بین کانتینرها را فراهم می‌کند.</li>



<li><strong>Docker Compose:</strong> برای مدیریت اپلیکیشن‌های چندکانتینری، ابزار Docker Compose به شما این امکان را می‌دهد که به راحتی تمام سرویس‌های مرتبط را با یک فایل پیکربندی مدیریت کنید.</li>
</ul>



<h2 class="wp-block-heading" id="h-مزایا-داکرایز-کردن-اپلیکیشن-ها">مزایا داکرایز کردن اپلیکیشن‌ها</h2>



<p>دلایل مختلفی برای داکرایز کردن اپلیکیشن‌ها وجود دارد که برخی از اصلی‌ترین این دلایل، به خود اکوسیستم داکر و مزایا آن مربوط می‌شود. در ادامه برخی از اصلی‌ترین این مزایا را بررسی می‌کنیم:</p>



<h3 class="wp-block-heading">1. <strong>قابلیت حمل (Portability)</strong></h3>



<p>داکرایز کردن اپلیکیشن‌ها به شما این امکان را می‌دهد که برنامه‌ها را بدون نگرانی از تفاوت‌های محیطی (مانند نسخه‌های مختلف سیستم‌عامل یا کتابخانه‌ها) در هر مکانی اجرا کنید. کانتینر Docker شامل تمام وابستگی‌های لازم برای اجرای اپلیکیشن است و تضمین می‌کند که اپلیکیشن شما در هر محیطی (سرور، لپ‌تاپ توسعه‌دهنده، یا سرویس‌های ابری) به طور یکسان اجرا می‌شود.</p>



<h3 class="wp-block-heading">2. <strong>سازگاری و جداسازی وابستگی‌ها</strong></h3>



<p>هر کانتینر شامل تمام وابستگی‌های اپلیکیشن، مانند کتابخانه‌ها و پکیج‌ها، است. این یعنی اگر شما چندین اپلیکیشن با نیازمندی‌های مختلف داشته باشید، می‌توانید هر کدام را در کانتینر جداگانه‌ای اجرا کنید بدون اینکه نگران تداخل وابستگی‌ها باشید.</p>



<h3 class="wp-block-heading">3. <strong>کاهش خطاهای محیطی</strong></h3>



<p>یکی از مشکلات رایج در توسعه نرم‌افزار این است که اپلیکیشنی که روی سیستم توسعه‌دهنده به درستی کار می‌کند، ممکن است روی سرور یا در محیط‌های دیگر به درستی اجرا نشود. Docker با فراهم کردن یک محیط ایزوله، این مشکلات را به حداقل می‌رساند و اطمینان می‌دهد که اپلیکیشن‌ها در هر محیطی به درستی اجرا خواهند شد.</p>



<h3 class="wp-block-heading">4. <strong>مدیریت ساده‌تر استقرار (Deployment)</strong></h3>



<p>با Docker، فرآیند استقرار اپلیکیشن به شدت ساده می‌شود. می‌توان یک بار تصویر Docker را ساخت و سپس آن را روی هر سیستمی که Docker نصب است، اجرا کرد. این روش باعث کاهش پیچیدگی در مدیریت محیط‌های مختلف توسعه، آزمایش و تولید می‌شود.</p>



<h3 class="wp-block-heading">5. <strong>مقیاس‌پذیری بهتر</strong></h3>



<p>Docker به شما این امکان را می‌دهد که به راحتی چندین نمونه از یک اپلیکیشن را در کانتینرهای جداگانه اجرا کنید. این موضوع مخصوصاً در برنامه‌های بزرگ و توزیع‌شده (distributed) بسیار مفید است، چرا که به شما این امکان را می‌دهد تا به سرعت مقیاس اپلیکیشن خود را افزایش دهید.</p>



<h3 class="wp-block-heading">6. <strong>سرعت بیشتر در توسعه و تحویل نرم‌افزار</strong></h3>



<p>با استفاده از Docker، توسعه‌دهندگان می‌توانند به راحتی یک محیط استاندارد و یکپارچه را برای تیم‌های مختلف فراهم کنند. این امر باعث تسریع در فرآیندهای توسعه و یکپارچگی بین تیم‌ها می‌شود. همچنین کانتینرها سبک و سریع هستند، بنابراین می‌توانند در چند ثانیه شروع به کار کنند.</p>



<h3 class="wp-block-heading">7. <strong>کارایی بهتر و بهینه‌تر</strong></h3>



<p>کانتینرهای Docker بسیار سبک‌تر از ماشین‌های مجازی هستند. به جای آنکه یک سیستم‌عامل کامل را اجرا کنند، فقط لایه‌های مورد نیاز اپلیکیشن را اجرا می‌کنند. این به معنای مصرف منابع کمتر و کارایی بهتر است.</p>



<h3 class="wp-block-heading">8. <strong>آزمایش و CI/CD آسان‌تر</strong></h3>



<p>Docker به شما امکان می‌دهد تا به راحتی اپلیکیشن‌ها را در محیط‌های تست و تولید یکسان اجرا کنید. این قابلیت، بهینه‌سازی فرآیندهای CI/CD (یکپارچه‌سازی مداوم و تحویل مداوم) را تسهیل می‌کند و باعث می‌شود مشکلات کمتر و فرآیندهای تحویل نرم‌افزار روان‌تر شود.</p>



<h2 class="wp-block-heading" id="h-جمع-بندی">جمع‌بندی</h2>



<p>داکرایز کردن اپلیکیشن فرآیندی است که به شما امکان می‌دهد برنامه‌های خود را به شکلی مستقل از محیط اجرا بسته‌بندی و اجرا کنید. این کار باعث می‌شود برنامه‌ها در هر سیستم‌عاملی که از Docker پشتیبانی می‌کند به صورت یکسان اجرا شوند. در این مطلب شیوه داکرایز کردن یک اپلیکیشن را بررسی کردیم.</p>
<p>The post <a href="https://hamravesh.com/blog/how-to-dockerize-application/">آموزش داکرایز کردن اپلیکیشن‌ها</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/how-to-dockerize-application/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>راهنمای جامع Tag در داکر</title>
		<link>https://hamravesh.com/blog/docker-image-tag/</link>
					<comments>https://hamravesh.com/blog/docker-image-tag/#respond</comments>
		
		<dc:creator><![CDATA[بابک خوش‌نویس]]></dc:creator>
		<pubDate>Fri, 18 Oct 2024 19:48:30 +0000</pubDate>
				<category><![CDATA[داکر]]></category>
		<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=3577</guid>

					<description><![CDATA[<p>در این بلاگ‌پست به مفهوم Tag در داکر می‌پردازیم. تگ در داکر، هویت منحصربه‌فردی به داکر ایمیج‌ می‌دهد. </p>
<p>The post <a href="https://hamravesh.com/blog/docker-image-tag/">راهنمای جامع Tag در داکر</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>در این آموزش، با مفهوم Tag در داکر آشنا می‌شویم. داکر امکان ذخیره ایمیج‌ها را در مخزن Docker Hub فراهم می‌کند. Tag در داکر، هویت منحصر‌به‌فردی به <a href="https://hamravesh.com/blog/what-is-docker-image/">داکر ایمیج</a> می‌دهد. در یک مخزن داکر، مجموعه‌ای از تصاویر مشابه با نسخه‌های مختلف وجود دارد که به‌وسیله تگ‌ها شناسایی می‌شوند. در این مطلب یاد می‌گیریم چگونه با استفاده از دستورهای docker build و docker tag به یک ایمیج داکر برچسب (تگ) بزنیم.</p>



<h2 class="wp-block-heading" id="h-tag-در-داکر-چیست">Tag در داکر چیست؟</h2>



<p>Tag در داکر یا برچسب داکر به ما کمک می‌کند تا بیلد ورژن‌ها را برای ارسال ایمیج به Docker Hub مدیریت کنیم. داکر هاب به ما اجازه می‌دهد ایمیج‌ها را بر اساس نام و Tag گروه‌بندی کنیم. چندین تگ <a href="https://hamravesh.com/blog/what-is-docker/">Docker</a> می‌توانند به یک ایمیج خاص اشاره کنند.</p>



<p>در واقع، برچسب‌های داکر مشابه یک کامیت خاص در <a href="https://hamravesh.com/blog/10-git-command/">Git</a> هستند. برچسب‌های داکر فقط یک نام مستعار برای شناسه ایمیج محسوب می‌شوند. نام Tag باید رشته‌ای از کاراکترهای ASCII باشد و می‌تواند شامل حروف کوچک و بزرگ، اعداد، Underline، نقطه و خط تیره شود. همچنین، نام تگ‌ها در داکر نباید با نقطه یا خط تیره شروع شود و می‌تواند حداکثر ۱۲۸ کاراکتر داشته باشد.</p>



<h2 class="wp-block-heading" id="h-ساخت-image-با-استفاده-از-tag-در-داکر">ساخت image با استفاده از Tag در داکر</h2>



<p>قبل از ادامه، بیایید ابتدا Dockerfile نمونه‌ای را ایجاد کنیم تا بعد نحوه برچسب‌گذاری یا Tag در داکر را نشان دهیم:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--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:#2d333d;color:#9eadbd">Dockerfile</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>FROM centos:7
RUN yum -y install wget 
RUN yum -y install unzip 
RUN yum -y install java-1.8.0-openjdk 
RUN yum clean all
ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/
RUN export JAVA_HOME</textarea></pre><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 github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F47067">FROM</span><span style="color: #ADBAC7"> centos:7</span></span>
<span class="line"><span style="color: #F47067">RUN</span><span style="color: #ADBAC7"> yum -y install wget </span></span>
<span class="line"><span style="color: #F47067">RUN</span><span style="color: #ADBAC7"> yum -y install unzip </span></span>
<span class="line"><span style="color: #F47067">RUN</span><span style="color: #ADBAC7"> yum -y install java-1.8.0-openjdk </span></span>
<span class="line"><span style="color: #F47067">RUN</span><span style="color: #ADBAC7"> yum clean all</span></span>
<span class="line"><span style="color: #F47067">ENV</span><span style="color: #ADBAC7"> JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/</span></span>
<span class="line"><span style="color: #F47067">RUN</span><span style="color: #ADBAC7"> export JAVA_HOME</span></span></code></pre></div>



<p>در این Dockerfile، ما تمام دستورات لازم برای نصب جاوا را با استفاده از «centos:7» به عنوان ایمیج پایه اجرا کردیم.</p>



<h3 class="wp-block-heading" id="h-بیلد-کردن-ایمیج-با-یک-docker-tag">بیلد کردن ایمیج با یک Docker Tag</h3>



<p>در داکر، می‌توانیم در زمان بیلد کردن، به یک ایمیچ تگ بزنیم. برای نمونه، بیایید دستور برچسب‌زدن یا Tag زدن به یک ایمیج را بررسی کنیم:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--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:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>docker build -t baeldung-java:5 .
Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM centos:7
 ---> eeb6ee3f44bd
Step 2/2 : RUN yum -y install wget
 ---> Using cache
 ---> 46ee47a7422d
Successfully built 46ee47a7422d
Successfully tagged baeldung-java:5</textarea></pre><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 github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">docker</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">build</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-t</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">baeldung-java:5</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">.</span></span>
<span class="line"><span style="color: #F69D50">Sending</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">build</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">context</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">to</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">Docker</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">daemon</span><span style="color: #ADBAC7">  </span><span style="color: #6CB6FF">2.048</span><span style="color: #96D0FF">kB</span></span>
<span class="line"><span style="color: #F69D50">Step</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #96D0FF">/2</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">FROM</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">centos:7</span></span>
<span class="line"><span style="color: #ADBAC7"> </span><span style="color: #F69D50">---&gt;</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">eeb6ee3f44bd</span></span>
<span class="line"><span style="color: #F69D50">Step</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">2</span><span style="color: #96D0FF">/2</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">RUN</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">yum</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-y</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">install</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">wget</span></span>
<span class="line"><span style="color: #ADBAC7"> </span><span style="color: #F69D50">---&gt;</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">Using</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">cache</span></span>
<span class="line"><span style="color: #ADBAC7"> </span><span style="color: #F69D50">---&gt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">46</span><span style="color: #96D0FF">ee47a7422d</span></span>
<span class="line"><span style="color: #F69D50">Successfully</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">built</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">46</span><span style="color: #96D0FF">ee47a7422d</span></span>
<span class="line"><span style="color: #F69D50">Successfully</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">tagged</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">baeldung-java:5</span></span></code></pre></div>



<p>در کامند بالا، ما «baeldung-java:5» را به عنوان برچسب به ایمیج داکر دادیم. Tag در داکر برای مدیریت نسخه‌های بیلد شده و ارسال ایمیج به داکر هاب مفید است. ورژن‌بندی (Versioning) معمولاً برای استقرار (دیپلوی کردن) هر ایمیج داکر یا بازگشت به نسخه قدیمی‌تر استفاده می‌شود. همچنین می‌توانیم برچسب را با نام کاربری و نام ایمیج با استفاده از ساختار زیر ارائه دهیم:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--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:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>docker build -t baeldung/baeldung-java:5 .
Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM centos:7
 ---> eeb6ee3f44bd
....
Successfully built 46ee47a7422d
Successfully tagged baeldung/baeldung-java:5</textarea></pre><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 github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">docker</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">build</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-t</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">baeldung/baeldung-java:5</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">.</span></span>
<span class="line"><span style="color: #F69D50">Sending</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">build</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">context</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">to</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">Docker</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">daemon</span><span style="color: #ADBAC7">  </span><span style="color: #6CB6FF">2.048</span><span style="color: #96D0FF">kB</span></span>
<span class="line"><span style="color: #F69D50">Step</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #96D0FF">/2</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">FROM</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">centos:7</span></span>
<span class="line"><span style="color: #ADBAC7"> </span><span style="color: #F69D50">---&gt;</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">eeb6ee3f44bd</span></span>
<span class="line"><span style="color: #6CB6FF">....</span></span>
<span class="line"><span style="color: #F69D50">Successfully</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">built</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">46</span><span style="color: #96D0FF">ee47a7422d</span></span>
<span class="line"><span style="color: #F69D50">Successfully</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">tagged</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">baeldung/baeldung-java:5</span></span></code></pre></div>



<p>در این دستور، ما نام کاربری «baeldung» را همراه با نام ایمیج«baeldung-java» و برچسب «5» ارائه کرده‌ایم.</p>



<h3 class="wp-block-heading" id="h-بیلد-کردن-ایمیج-با-چند-tag-در-داکر">بیلد کردن ایمیج با چند Tag در داکر</h3>



<p>در داکر، می‌توانیم چندین برچسب یا Tag را به یک Image اختصاص دهیم. در اینجا، از دستور docker build برای اختصاص چندین برچسب به یک ایمیج در یک دستور واحد استفاده می‌کنیم. برای نمایش این موضوع، بیایید از همان دستور مربوط به Dockerfile قبلی این بار با ۲ تگ استفاده کنیم.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--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:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>docker build -t baeldung-java:5 -t baeldung-java:6 .
Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM centos:7
---> eeb6ee3f44bd....
Successfully built 46ee47a7422d
Successfully tagged baeldung-java:5
Successfully tagged baeldung-java:6</textarea></pre><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 github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">docker</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">build</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-t</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">baeldung-java:5</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-t</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">baeldung-java:6</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">.</span></span>
<span class="line"><span style="color: #F69D50">Sending</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">build</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">context</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">to</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">Docker</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">daemon</span><span style="color: #ADBAC7">  </span><span style="color: #6CB6FF">2.048</span><span style="color: #96D0FF">kB</span></span>
<span class="line"><span style="color: #F69D50">Step</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #96D0FF">/2</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">FROM</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">centos:7</span></span>
<span class="line"><span style="color: #F69D50">---&gt;</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">eeb6ee3f44bd....</span></span>
<span class="line"><span style="color: #F69D50">Successfully</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">built</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">46</span><span style="color: #96D0FF">ee47a7422d</span></span>
<span class="line"><span style="color: #F69D50">Successfully</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">tagged</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">baeldung-java:5</span></span>
<span class="line"><span style="color: #F69D50">Successfully</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">tagged</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">baeldung-java:6</span></span></code></pre></div>



<p>در اینجا می‌بینیم که ۲ برچسب «baeldung-java:5» و «baeldung-java:6» برای شناسه تصویر «46ee47a7422d» ایجاد شده‌اند.</p>



<h3 class="wp-block-heading" id="h-بیلد-کردن-ایمیج-بدون-tag-در-داکر">بیلد کردن ایمیج بدون Tag‌ در داکر</h3>



<p>می‌توانیم ایمیج داکر را بدون استفاده از هیچ برچسبی بیلد کنیم. اما برای پیگیری بهتر وضعیت و امور ایمیج، همیشه بهتر است حداقل یک Tag را همراه با نام ایمیج استفاده کنیم. بیایید دستور بیلد کردن یک ایمیج را بدون تگ بررسی کنیم:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--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:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>docker build -t baeldung-java .
Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM centos:7
 ---> eeb6ee3f44bd
...
Successfully built 46ee47a7422d
Successfully tagged baeldung-java:latest</textarea></pre><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 github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">docker</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">build</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">-t</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">baeldung-java</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">.</span></span>
<span class="line"><span style="color: #F69D50">Sending</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">build</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">context</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">to</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">Docker</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">daemon</span><span style="color: #ADBAC7">  </span><span style="color: #6CB6FF">2.048</span><span style="color: #96D0FF">kB</span></span>
<span class="line"><span style="color: #F69D50">Step</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">1</span><span style="color: #96D0FF">/2</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">FROM</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">centos:7</span></span>
<span class="line"><span style="color: #ADBAC7"> </span><span style="color: #F69D50">---&gt;</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">eeb6ee3f44bd</span></span>
<span class="line"><span style="color: #6CB6FF">...</span></span>
<span class="line"><span style="color: #F69D50">Successfully</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">built</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">46</span><span style="color: #96D0FF">ee47a7422d</span></span>
<span class="line"><span style="color: #F69D50">Successfully</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">tagged</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">baeldung-java:latest</span></span></code></pre></div>



<p>در این دستور، ما تصویر را بدون هیچ برچسبی ساختیم، بنابراین داکر به طور پیش‌فرض تگ «latest» را به صورت «baeldung-java:latest» به تصویر اختصاص می‌دهد. داکر همیشه با استفاده از تگ latest به آخرین نسخه پایدار اشاره می‌کند. حتی نسخه‌های قدیمی هم می‌توانند latest نامیده شوند. اما نمی‌توانیم پیش‌بینی کنیم که این نسخه اصلی است یا نسخه فرعی محسوب می‌شود.</p>



<h2 class="wp-block-heading" id="h-تگ-زدن-ایمیج-با-استفاده-از-دستور-docker-tag">تگ زدن ایمیج با استفاده از دستور docker tag</h2>



<p>تا اینجا درباره برچسب‌گذاری تصویر با استفاده از دستور docker build صحبت کردیم. اما می‌توانیم به‌طور مستقیم با استفاده از دستور docker tag نیز به یک ایمیج  در داکر برچسب بزنیم. برچسب‌گذاری ایمیج فقط یک نام مستعار برای نام ایمیج یا شناسه تصویر ایجاد می‌کند. در اینجا هر ۲ روش برچسب‌گذاری را بررسی می‌کنیم. فرمت کلی نام ایمیج‌های داکر به صورت زیر است:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--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:#22272e"><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="#adbac733" stroke="#adbac74d" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#adbac733" stroke="#adbac74d" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#adbac733" stroke="#adbac74d" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>&lt;user-name>/&lt;image-name>:&lt;tag-name></textarea></pre><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 github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">user-name</span><span style="color: #F47067">&gt;</span><span style="color: #ADBAC7">/</span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">image-name</span><span style="color: #F47067">&gt;</span><span style="color: #ADBAC7">:</span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7">tag-name</span><span style="color: #F47067">&gt;</span></span></code></pre></div>



<p>در این ساختار، بخشِ بعد از دونقطه نشان‌دهنده برچسب متصل به تصویر است. بیایید دستور برچسب‌گذاری ایمیج را با استفاده از نام ایمیج بررسی کنیم:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--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:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>docker tag baeldung-java:6 baeldung-java:8 </textarea></pre><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 github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">docker</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">tag</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">baeldung-java:6</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">baeldung-java:8</span><span style="color: #ADBAC7"> </span></span></code></pre></div>



<p>دستور برچسب‌گذاری یک ایمیج با استفاده از شناسه ایمیج به صورت زیر است:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--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:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>docker tag 46ee47a7422d baeldung-java:9 </textarea></pre><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 github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">docker</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">tag</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">46</span><span style="color: #96D0FF">ee47a7422d</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">baeldung-java:9</span><span style="color: #ADBAC7"> </span></span></code></pre></div>



<p>حالا بیایید تمام ایمیج‌هایی که تا کنون ایجاد شده‌اند را بررسی کنیم:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--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:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
baeldung-java       5                   46ee47a7422d        13 minutes ago      370MB
baeldung-java       6                   46ee47a7422d        13 minutes ago      370MB
baeldung-java       8                   46ee47a7422d        13 minutes ago      370MB
baeldung-java       9                   46ee47a7422d        13 minutes ago      370MB
baeldung-java       latest              46ee47a7422d        13 minutes ago      370MB
centos              7                   eeb6ee3f44bd        7 months ago        204MB</textarea></pre><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 github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">docker</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">images</span></span>
<span class="line"><span style="color: #F69D50">REPOSITORY</span><span style="color: #ADBAC7">          </span><span style="color: #96D0FF">TAG</span><span style="color: #ADBAC7">                 </span><span style="color: #96D0FF">IMAGE</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">ID</span><span style="color: #ADBAC7">            </span><span style="color: #96D0FF">CREATED</span><span style="color: #ADBAC7">             </span><span style="color: #96D0FF">SIZE</span></span>
<span class="line"><span style="color: #F69D50">baeldung-java</span><span style="color: #ADBAC7">       </span><span style="color: #6CB6FF">5</span><span style="color: #ADBAC7">                   </span><span style="color: #6CB6FF">46</span><span style="color: #96D0FF">ee47a7422d</span><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">13</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">minutes</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">ago</span><span style="color: #ADBAC7">      </span><span style="color: #6CB6FF">370</span><span style="color: #96D0FF">MB</span></span>
<span class="line"><span style="color: #F69D50">baeldung-java</span><span style="color: #ADBAC7">       </span><span style="color: #6CB6FF">6</span><span style="color: #ADBAC7">                   </span><span style="color: #6CB6FF">46</span><span style="color: #96D0FF">ee47a7422d</span><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">13</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">minutes</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">ago</span><span style="color: #ADBAC7">      </span><span style="color: #6CB6FF">370</span><span style="color: #96D0FF">MB</span></span>
<span class="line"><span style="color: #F69D50">baeldung-java</span><span style="color: #ADBAC7">       </span><span style="color: #6CB6FF">8</span><span style="color: #ADBAC7">                   </span><span style="color: #6CB6FF">46</span><span style="color: #96D0FF">ee47a7422d</span><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">13</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">minutes</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">ago</span><span style="color: #ADBAC7">      </span><span style="color: #6CB6FF">370</span><span style="color: #96D0FF">MB</span></span>
<span class="line"><span style="color: #F69D50">baeldung-java</span><span style="color: #ADBAC7">       </span><span style="color: #6CB6FF">9</span><span style="color: #ADBAC7">                   </span><span style="color: #6CB6FF">46</span><span style="color: #96D0FF">ee47a7422d</span><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">13</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">minutes</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">ago</span><span style="color: #ADBAC7">      </span><span style="color: #6CB6FF">370</span><span style="color: #96D0FF">MB</span></span>
<span class="line"><span style="color: #F69D50">baeldung-java</span><span style="color: #ADBAC7">       </span><span style="color: #96D0FF">latest</span><span style="color: #ADBAC7">              </span><span style="color: #6CB6FF">46</span><span style="color: #96D0FF">ee47a7422d</span><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">13</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">minutes</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">ago</span><span style="color: #ADBAC7">      </span><span style="color: #6CB6FF">370</span><span style="color: #96D0FF">MB</span></span>
<span class="line"><span style="color: #F69D50">centos</span><span style="color: #ADBAC7">              </span><span style="color: #6CB6FF">7</span><span style="color: #ADBAC7">                   </span><span style="color: #96D0FF">eeb6ee3f44bd</span><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">7</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">months</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">ago</span><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">204</span><span style="color: #96D0FF">MB</span></span></code></pre></div>



<p>در اینجا تمام ایمیج‌هایی را مشاهده کردید که تا کنون ایجاد کرده‌ایم.</p>



<h2 class="wp-block-heading" id="h-استفاده-از-tag-داکر-در-دستور-docker-pull">استفاده از Tag داکر در دستور Docker pull</h2>



<p>تگ‌های داکر برای ایجاد ایمیج یا دریافت ایمیج از مخزن داکر‌هاب مفید هستند. در Dockerfile ما، از دستور FROM centos:7 استفاده کردیم. این دستور نسخه «7» ایمیج عمومی centos را دریافت می‌کند. می‌توانیم یک ایمیج را با یا بدون برچسب دریافت کنیم. بیایید یک دستور با تگ مشخص را بررسی کنیم:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--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:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>docker pull centos:7</textarea></pre><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 github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">docker</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">pull</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">centos:7</span></span></code></pre></div>



<p>دستور docker pull بدون هیچ برچسبی به صورت زیر استفاده می‌شود:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(24px, 1.5rem, 36px);--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:#2d333d;color:#9eadbd">Bash</span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>docker pull centos</textarea></pre><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 github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">docker</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">pull</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">centos</span></span></code></pre></div>



<p>دستور بالا ایمیج «centos:latest» را از مخزن عمومی داکر هاب دریافت می‌کند. همچنین می‌توانیم چندین برچسب را معمولاً برای مشخص کردن نسخه‌های اصلی و فرعی به یک ایمیج اعمال کنیم.</p>



<h2 class="wp-block-heading" id="h-جمع-بندی">جمع‌بندی</h2>



<p>در این مقاله، یاد گرفتیم چگونه Tag در داکر را ایجاد و مدیریت کنیم. روش‌های مختلف برچسب‌گذاری یک ایمیج را بررسی کردیم. ابتدا با استفاده از دستور docker build، به یک ایمیج برچسب زدیم. سپس، دستور docker tag را بررسی کردیم. علاوه بر این، نحوه استفاده از Tag در دستور docker pull را هم مورد بررسی قرار دادیم.</p>
<p>The post <a href="https://hamravesh.com/blog/docker-image-tag/">راهنمای جامع Tag در داکر</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/docker-image-tag/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>۵ روش کاربردی برای کاهش حجم Docker Imageها</title>
		<link>https://hamravesh.com/blog/5-tips-for-reducing-docker-image-size/</link>
					<comments>https://hamravesh.com/blog/5-tips-for-reducing-docker-image-size/#respond</comments>
		
		<dc:creator><![CDATA[ارسطو عباسی]]></dc:creator>
		<pubDate>Sun, 08 Sep 2024 09:43:11 +0000</pubDate>
				<category><![CDATA[داکر]]></category>
		<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=2610</guid>

					<description><![CDATA[<p>هر چه Imageهای شما کوچک‌تر باشد فرایند دیپلوی و انتقال سریع‌تری دارد. در این مطلب قصد داریم شما را با پنج روش برای کاهش حجم داکر ایمیج‌ها آشنا کنیم. </p>
<p>The post <a href="https://hamravesh.com/blog/5-tips-for-reducing-docker-image-size/">۵ روش کاربردی برای کاهش حجم Docker Imageها</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>با یادگیری Docker و استفاده از تکنولوژی کانتینرها متوجه خواهید شد که <strong><a href="https://hamravesh.com/blog/what-is-docker-image/" target="_blank" rel="noreferrer noopener">Docker Image</a></strong>ها نقش بسیار اساسی و مهمی را در کانتینرسازی ایفا می‌کنند. اما به‌دنبال آن ممکن است مشکلاتی را نیز بوجود بیاورند. اصلی‌ترین این مشکلات، افزایش حجم اپلیکیشن در هنگام دیپلوی کردن و یا انتقال آن است. </p>



<p>هر چه imageهای شما کوچک‌تر باشد، فرایند دیپلوی و انتقال سریع‌تری خواهید داشت. به همین دلیل نیاز است که کارهایی را برای کاهش حجم آن‌ها انجام دهید. در این مطلب قصد داریم شما را با پنج روش برای کاهش حجم داکر ایمیج‌ها آشنا کنیم.</p>



<h2 class="wp-block-heading" id="h-روش-اول-بهینه-سازی-لایه-بندی-ها">روش اول: بهینه‌سازی لایه‌بندی‌ها</h2>



<p>اندازه هر Docker Image ارتباط مستقیمی با حجم لایه‌های آن دارد. در واقع هرچقدر تعداد لایه‌های ما کمتر و البته کم‌حجم‌تر باشد اندازه داکر ایمیج ما نیز کاهش پیدا می‌کند. برای اینکه به‌صورت عملی با کاهش حجم این لایه‌ها آشنا شوید می‌توانیم از مثال زیر استفاده کنیم:</p>



<pre class="wp-block-code"><code>FROM python:3.9-slim
RUN apt-get update -y
RUN apt-get install some_package
RUN apt-get install some_other_package</code></pre>



<p>در این مثال می‌توانیم با کاهش تعداد دستورهای RUN و نصب پکیج‌های مورد نظر تنها با استفاده از یک دستور، حجم داکر ایمیج را کاهش دهیم. برای این‌کار کدهای بالا را به‌صورت زیر تغییر می‌دهیم:</p>



<pre class="wp-block-code"><code>FROM python:3.9-slim
RUN apt-get update -y &amp;&amp; apt install -y \
   package_one \
   package_two</code></pre>



<p>با وجود اینکه چنین تکنیکی حجم زیادی را کاهش نمی‌دهد، اما پس از انجام این عملیات حدود ۱۰ مگابایت از حجم Docker Image مورد نظر را کاهش دادیم:</p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="1000" height="109" src="https://hamravesh.com/blog/wp-content/uploads/2024/05/docker-image-reduction.webp" alt="کاهش ده مگابایتی حجم داکر ایمیج" class="wp-image-2620" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/05/docker-image-reduction.webp 1000w, https://hamravesh.com/blog/wp-content/uploads/2024/05/docker-image-reduction-300x33.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2024/05/docker-image-reduction-768x84.webp 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></figure>



<h2 class="wp-block-heading" id="h-روش-دوم-پکیج-های-غیرضروری-را-نصب-نکنید">روش دوم: پکیج‌های غیرضروری را نصب نکنید</h2>



<p>اگر پکیج‌های‌تان را با استفاده از دستور <code>apt-get</code> نصب می‌کنید برچسب <code>--no-install-recommends</code> را به آن اضافه کنید. این برچسب پکیج‌هایی که پیشنهاد می‌شوند در کنار پکیج اصلی نصب شوند (اما ضروری نیستند) را نصب نمی‌کند. در نتیجه حجم داکر ایمیج شما با نصب نشدن چنین پکیج‌هایی کاهش می‌یابد. </p>



<p>در زیر مثالی از این حالت دیده می‌شود. البته حتما بعد از نصب پکیج‌ مورد نظر آن را تست کنید تا مشکلی بوجود نیاید:</p>



<pre class="wp-block-code"><code>FROM python:3.9-slim
RUN apt-get update -y &amp;&amp; apt install -y --no-install-recommends \
   package_one \
   package_two</code></pre>



<p>با انجام این‌کار حجم Docker Image به‌نسبت حالت قبلی ۴۰ مگابایت کاهش پیدا کرده است. </p>



<h2 class="wp-block-heading" id="h-روش-سوم-پاکسازی-کنید"><strong>روش سوم: پاکسازی کنید!</strong></h2>



<p>با نصب برخی از پکیج‌ها و انجام یکسری از عملیات‌ها، فایل‌های اضافی تولید می‌شوند که حذف کردن آن‌ها به کاهش حجم داکر ایمیج کمک می‌کند. برای این‌کار می‌توانید دستور <code>rm -rf /var/lib/apt/lists<em>/*</em></code> را اضافه کنید.</p>



<pre class="wp-block-code"><code>FROM python:3.9-slim
RUN apt-get update -y &amp;&amp; apt install -y --no-install-recommends \
    package_one \
    package_two \
    &amp;&amp; rm -rf /var/lib/apt/lists/* </code></pre>



<p>پس از اضافه کردن این دستور حجم داکر ایمیج ۴۰ مگابایت دیگر کاهش پیدا کرد. </p>



<h2 class="wp-block-heading" id="h-روش-چهارم-استفاده-از-ایمیج-های-کوچکتر"><strong>روش چهارم: استفاده از ایمیج‌های کوچکتر</strong></h2>



<p>اگر توجه کرده باشید تا اینجا کار ما بجای <code>python:3.9</code> از <code>python:3.9-slim</code> استفاده کرده‌ایم. پکیج اصلی پایتون حدود ۱.۳ گیگابایت حجم دارد اما slim حدود ۱ گیگابایت. در نتیجه شما می‌توانید ۳۰۰ مگابایت حجم داکر ایمیج خود را کاهش دهید. </p>



<p>اما ایمیج‌های بسیار کوچک‌تری نیز برای چنین حالتی وجود دارد که Alpline نام دارند. برای مثال پکیج <code>python:3.9-alpine</code> حدود ۴۹ مگابایت حجم داشته و نزدیک به ۲۰ برابر کوچک‌تر از حالت Slim است. پس بنظر می‌رسد که بسیار بهتر از هر حالتی باشد؟ بله همینطور است. اما در نظر داشته باشید که <strong><a href="https://www.docker.com/blog/how-to-use-the-alpine-docker-official-image/" target="_blank" rel="noreferrer noopener">نسخه Alpline</a></strong> معایبی دارد:</p>



<ul class="wp-block-list">
<li><strong>مشکلات سازگاری</strong>: اگر بخواهیم پایتون را با استفاده از نسخه Alpline نصب کنیم ممکن است برای برخی از کتابخانه‌ها و کدها مشکلات اجرایی بوجود بیاید. در این صورت مطمئن شوید ابزارهایی که از آن‌ها در کنار پایتون استفاده می‌کنید با نسخه Alpline سازگاری داشته و مشکلات اجرایی ندارند.   </li>



<li><strong>پکیج‌ها: </strong>به‌نسبت دبیان، توزیع Alpline ممکن است با محدودیت‌هایی در نصب پکیج‌های مختلف روبرو شود. به همین دلیل نیاز است که از وجود پکیج‌های مورد نظر در پکیج‌منیجر Alpline مطمئن شوید.</li>
</ul>



<h2 class="wp-block-heading" id="h-روش-پنجم-حجم-build-context-را-کاهش-دهید">روش پنجم: حجم Build Context را کاهش دهید </h2>



<p>اگر قصد ساختن داکر ایمیج جدیدی را دارید باید به داکر دسترسی فایل‌هایی که می‌خواهید ایمیج از روی آن ساخته شود را بدهید. به این فایل‌ها build context گفته می‌شود. هر بار که ایمیج مورد نظر ایجاد می‌شود به این فایل‌ها اشاره خواهد شد. سعی کنید حجم این فایل‌ها را در کمترین حالت ممکن نگهدارید.</p>



<p>جدای از آن، استفاده از فایل <code>.dockerignore</code> می‌تواند روشی کاربردی برای بالا بردن امنیت اپلیکیشن‌تان باشد. اگر برای کپی کردن فایل‌ها به داکر ایمیج از دستوراتی مانند ADD و COPY استفاده می‌کنید ممکن است فایل‌های حساسی را نیز به‌صورت اشتباه وارد داکر ایمیج کنید. در این حالت می‌توانید لیست این فایل‌ها را در یک فایل <code>.dockerignore</code> قرار دهید تا از این مشکل جلوگیری کنید. </p>



<h2 class="wp-block-heading" id="h-آشنایی-با-روش-multi-stage-build">آشنایی با روش Multi-Stage Build</h2>



<figure class="wp-block-image size-full"><img decoding="async" width="926" height="397" src="https://hamravesh.com/blog/wp-content/uploads/2024/09/multi-stage-hamravesh.webp" alt="روش multi-stage برای کاهش حجم داکر ایمیج" class="wp-image-4075" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/09/multi-stage-hamravesh.webp 926w, https://hamravesh.com/blog/wp-content/uploads/2024/09/multi-stage-hamravesh-300x129.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2024/09/multi-stage-hamravesh-768x329.webp 768w" sizes="(max-width: 926px) 100vw, 926px" /></figure>



<p>تکنیک<strong> Multi-Stage Build </strong>به شما اجازه می‌دهد چندین مرحله‌ی پشت سر هم را در یک Dockerfile تعریف کنید. در هر مرحله می‌توانید از ایمیج‌های مختلف به عنوان پایه استفاده کرده و کارهای مورد نیاز را انجام دهید؛ برای مثال، در مرحله اول کد را کامپایل کرده و در مرحله دوم تنها فایل‌های نهایی کامپایل‌شده را در یک ایمیج سبک‌تر کپی و اجرا کنید.</p>



<p>این ساختار باعث می‌شود شما نیاز نباشد تمام ابزارهای کامپایل، دیباگ و کتابخانه‌های اضافی را در ایمیج نهایی نگه دارید.</p>



<p style="font-size:22px"><strong>مثال:</strong></p>



<p>تصور کنید یک برنامه‌ی Go دارید که کد منبع آن در دایرکتوری app است. برای ساخت آن نیازمند یک محیط ساخت (Build Environment) و برای اجرای نهایی یک محیط سبک (Runtime Environment) هستید.</p>



<pre class="wp-block-code"><code># مرحله اول: Build stage
FROM golang:1.19-alpine AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp

# مرحله دوم: Final stage (Runtime)
FROM alpine:3.17
WORKDIR /app
COPY --from=builder /app/myapp .
EXPOSE 8080
CMD &#91;"./myapp"]</code></pre>



<p>• در مرحله اول (builder)، ما از ایمیج golang:1.19-alpine که ابزارهای لازم برای ساخت (کامپایل) برنامه Go را دارد استفاده می‌کنیم. کد منبع را کپی کرده و go build را اجرا می‌کنیم تا یک فایل اجرایی myapp تولید شود.</p>



<p>• در مرحله دوم (final) از یک ایمیج بسیار سبک (alpine:3.17) استفاده می‌کنیم، تنها فایل اجرایی تولید شده را از مرحله اول کپی کرده و آن را اجرا می‌کنیم. در این مرحله هیچ ابزار ساخت، هیچ کتابخانه اضافی و هیچ فایل سورس کدی وجود ندارد.</p>



<h2 class="wp-block-heading" id="h-روشی-دیگر-استفاده-از-تکنیک-کامپایل-استاتیک">روشی دیگر: استفاده از تکنیک کامپایل استاتیک</h2>



<p>کامپایل استاتیک به فرآیندی اشاره دارد که در آن تمام وابستگی‌های مورد نیاز یک برنامه در زمان کامپایل به صورت مستقیم به باینری نهایی اضافه می‌شوند. در مقابل، در کامپایل داینامیک، وابستگی‌ها و کتابخانه‌های خارجی به صورت جداگانه در سیستم میزبان حضور دارند و برنامه در زمان اجرا به آن‌ها متصل می‌شود.</p>



<p>در دنیای داکر و کانتینرها، استفاده از کامپایل استاتیک می‌تواند به کاهش حجم ایمیج‌های داکر کمک کند. این کار به دلایل زیر مفید است:</p>



<ol class="wp-block-list">
<li><strong>حذف وابستگی‌های خارجی:</strong> وقتی برنامه به صورت استاتیک کامپایل می‌شود، دیگر نیازی به وجود کتابخانه‌های خارجی و پکیج‌های اضافی در ایمیج داکر نیست، چون همه چیز داخل باینری استاتیک گنجانده شده است. به این ترتیب، می‌توان فایل‌های غیرضروری را از ایمیج حذف کرد.</li>



<li><strong>بهینه‌سازی اندازه ایمیج:</strong> با حذف کتابخانه‌های غیرضروری و فایل‌های وابسته، حجم ایمیج به طور قابل توجهی کاهش می‌یابد. این کاهش حجم باعث بهبود سرعت بارگذاری و استقرار کانتینرها در محیط‌های مختلف می‌شود.</li>



<li><strong>افزایش امنیت:</strong> کامپایل استاتیک همچنین می‌تواند به امنیت بیشتر کمک کند، زیرا سطح حمله برای وابستگی‌های خارجی کمتر می‌شود. وقتی کتابخانه‌های داینامیک به ایمیج اضافه نمی‌شوند، آسیب‌پذیری‌های احتمالی ناشی از آن‌ها نیز کاهش می‌یابد.</li>
</ol>



<p>در داکر، برای دستیابی به این روش، اغلب از ایمیج‌های بسیار کوچک مانند <code>alpine</code> یا حتی <code>scratch</code> استفاده می‌شود. ایمیج <code>scratch</code> به عنوان پایه‌ای برای ساخت باینری‌های استاتیک کامپایل‌شده به کار می‌رود، زیرا هیچ کتابخانه‌ای به‌طور پیش‌فرض در آن وجود ندارد، و تنها چیزی که در ایمیج نهایی باقی می‌ماند، باینری استاتیک خود برنامه است.</p>



<h2 class="wp-block-heading" id="h-آشنایی-با-ابزار-docker-slim">آشنایی با ابزار Docker Slim</h2>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="585" src="https://hamravesh.com/blog/wp-content/uploads/2024/09/docker-slim-1024x585.webp" alt="کم کردن حجم داکر ایمیج‌ها با استفاده از docker slim" class="wp-image-3906" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/09/docker-slim-1024x585.webp 1024w, https://hamravesh.com/blog/wp-content/uploads/2024/09/docker-slim-300x171.webp 300w, https://hamravesh.com/blog/wp-content/uploads/2024/09/docker-slim-768x439.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2024/09/docker-slim-1536x878.webp 1536w, https://hamravesh.com/blog/wp-content/uploads/2024/09/docker-slim.webp 1792w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong><a href="https://github.com/slimtoolkit/slim">Docker Slim</a></strong> یک ابزار متن‌باز است که با هدف بهینه‌سازی داکر ایمیج‌ها، عملکرد و امنیت آن‌ها را بهبود می‌بخشد. این ابزار به صورت خودکار بخش‌های غیرضروری از ایمیج‌ها را شناسایی و حذف می‌کند، بدون اینکه تاثیری بر روی عملکرد برنامه‌های موجود در آن ایمیج‌ها داشته باشد. به‌طور خاص، Docker Slim به سه مورد زیر کمک می‌کند:</p>



<ol class="wp-block-list">
<li><strong>کاهش حجم ایمیج‌ها:</strong> Docker Slim با آنالیز ایمیج و بررسی برنامه‌ها و فایل‌های مورد نیاز در حین اجرا، فایل‌ها، کتابخانه‌ها و تنظیماتی که برای اجرای برنامه حیاتی نیستند را حذف می‌کند. این کاهش حجم می‌تواند تا ۳۰ برابر باشد، که منجر به بهبود سرعت دانلود، بارگذاری و انتقال ایمیج‌ها در شبکه می‌شود.</li>



<li><strong>بهبود امنیت:</strong> این ابزار با شناسایی و حذف فایل‌ها و وابستگی‌های ناامن و غیرضروری، سطح حمله را کاهش می‌دهد. با کاهش سطح حمله، امکان بهره‌برداری از آسیب‌پذیری‌ها کمتر می‌شود. همچنین، Docker Slim می‌تواند تنظیمات امنیتی بهتری را پیشنهاد دهد و به شما کمک کند تا ایمیج‌های امن‌تری ایجاد کنید.</li>



<li><strong>سازگاری با تمامی زبان‌ها و فریم‌ورک‌ها:</strong> این ابزار از هر زبان برنامه‌نویسی و فریم‌ورکی که درون داکر اجرا می‌شود، پشتیبانی می‌کند. مهم نیست که ایمیج شامل برنامه‌های Node.js، پایتون، جاوا یا هر زبان دیگری باشد، Docker Slim می‌تواند فرآیند بهینه‌سازی را بر روی آن اعمال کند.</li>
</ol>



<p>نحوه کار Docker Slim به این شکل است که ابتدا ایمیج را اجرا کرده و بررسی می‌کند که کدام فایل‌ها و کتابخانه‌ها در زمان اجرای برنامه واقعاً استفاده می‌شوند. سپس با حذف موارد غیرضروری، یک نسخه بهینه شده از ایمیج ایجاد می‌کند که کوچک‌تر و امن‌تر است.</p>



<h2 class="wp-block-heading" id="h-در-پایان">در پایان</h2>



<p>در این مطلب، ۵ روش عملی برای کاهش حجم Docker Image‌ها ارائه شد. انتخاب این روش‌ها براساس تجربه‌های عملی در پروژه‌های واقعی و آزمایش‌های مختلف بوده است. حجم کمتر، به معنای سرعت بیشتر و عملکرد بهتر است. به همین دلیل این روش‌ها را انتخاب کردیم تا شما نیز بتوانید بهره‌وری بیشتری از Docker و کانتینرسازی داشته باشید.</p>
<p>The post <a href="https://hamravesh.com/blog/5-tips-for-reducing-docker-image-size/">۵ روش کاربردی برای کاهش حجم Docker Imageها</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/5-tips-for-reducing-docker-image-size/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>نحوه استفاده از پلاگین داکر در vscode</title>
		<link>https://hamravesh.com/blog/docker-in-vscode/</link>
					<comments>https://hamravesh.com/blog/docker-in-vscode/#respond</comments>
		
		<dc:creator><![CDATA[بابک خوش‌نویس]]></dc:creator>
		<pubDate>Thu, 29 Aug 2024 19:19:41 +0000</pubDate>
				<category><![CDATA[داکر]]></category>
		<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=3259</guid>

					<description><![CDATA[<p>نحوه استفاده از پلاگین داکر در vscode به شما کمک می‌کند تا روند توسعۀ نرم‌افزار را بهینه کنید. با نصب پلاگین داکر در vscode، می‌توانید دستورات داکر را اجرا کرده و تمام عملیات لازم روی تصاویر و کانتینرهای داکر را مستقیماً از محیط vscode انجام دهید. در این مقاله، نحوۀ نصب افزونۀ داکر برای vscode، [&#8230;]</p>
<p>The post <a href="https://hamravesh.com/blog/docker-in-vscode/">نحوه استفاده از پلاگین داکر در vscode</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>نحوه استفاده از پلاگین داکر در vscode به شما کمک می‌کند تا روند توسعۀ نرم‌افزار را بهینه کنید. با نصب پلاگین داکر در vscode، می‌توانید دستورات داکر را اجرا کرده و تمام عملیات لازم روی تصاویر و کانتینرهای داکر را مستقیماً از محیط vscode انجام دهید. در این مقاله، نحوۀ نصب افزونۀ داکر برای vscode، ایجاد یک تصویر کانتینر و اجرای آن در محیط vscode‌را به شما آموزش خواهیم داد.</p>



<h2 class="wp-block-heading" id="h-پیش-نیازهای-استفاده-از-پلاگین-داکر-در-vscode">پیش‌نیازهای استفاده از پلاگین داکر در vscode</h2>



<p>برای شروع کار، لازم است داکر را روی رایانۀ خود نصب کنید. دستورالعمل‌های نصب و اجرای داکر در وب‌سایت رسمی آن موجود است. این دستورالعمل‌ها برای سیستم‌عامل‌های مختلف متفاوت هستند، پس حتماً نسخۀ مناسب سیستم‌عامل خود را دنبال کنید. </p>



<p>علاوه بر این، باید ویژوال استودیو کد را نیز روی سیستم خود نصب داشته باشید. این نرم‌افزار محیط توسعۀ یکپارچه‌ای است که در ادامۀ کار از آن استفاده خواهیم کرد. برای پکیج کردن برنامۀ نود‌جی‌اس یا استفاده از dependencyهای مربوط به سایر پلتفرم‌ها و مجموعه‌ابزارها، لازم است نود‌جی‌اس و مدیر بستۀ آن یعنی NPM را هم روی سیستم خود نصب کنید.</p>



<h2 class="wp-block-heading" id="h-نصب-پلاگین-داکر-در-vscode">نصب پلاگین داکر در vscode</h2>



<p>داکر از طریق افزونۀ رسمی تأیید شده توسط مایکروسافت با ویژوال استودیو کد یکپارچه می‌شود. برای نصب این افزونه در ویژوال استودیو کد، مراحل زیر را دنبال کنید:</p>



<ul class="wp-block-list">
<li>از نوار کناری سمت چپ پنجرۀ ویژوال استودیو کد، دکمۀ «Extensions» را انتخاب کنید.</li>



<li>در کادر جستجو، عبارت «Docker» را تایپ کنید. فهرستی از افزونه‌های مرتبط با داکر در زیر آن نمایان می‌شود.</li>



<li>دکمۀ «Install» را در کنار افزونۀ داکر انتخاب کنید. پس از فعال شدن افزونه، دکمۀ داکر ظاهر می‌شود.</li>
</ul>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="800" height="323" src="https://hamravesh.com/blog/wp-content/uploads/2024/06/image-2.png" alt="دکمۀ داکر ظاهر می‌شود" class="wp-image-3260" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/06/image-2.png 800w, https://hamravesh.com/blog/wp-content/uploads/2024/06/image-2-300x121.png 300w, https://hamravesh.com/blog/wp-content/uploads/2024/06/image-2-768x310.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></figure>



<ul class="wp-block-list">
<li>دکمۀ Docker را در منوی سمت چپ صفحه انتخاب کنید. این دکمه پنل داکر را با ۳ بخش بارگذاری می‌کند:
<ul class="wp-block-list">
<li><strong>Containers</strong>: این بخش را بزرگ کنید تا بتوانید تمام کانتِینرهای ایجاد شده در سیستم را مشاهده کنید.</li>



<li><strong>Images</strong>: این بخش تمام تصاویر موجود در سیستم شما را فهرست می‌کند.</li>



<li><strong>Registries</strong>: اگر نصب داکر خود را به یک مخزن متصل کرده باشید، در این بخش نمایش داده می‌شود.</li>
</ul>
</li>
</ul>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="800" height="371" src="https://hamravesh.com/blog/wp-content/uploads/2024/06/image-3.png" alt="دکمه داکر پنل داکر را با ۳ بخش بارگذاری می‌کند" class="wp-image-3261" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/06/image-3.png 800w, https://hamravesh.com/blog/wp-content/uploads/2024/06/image-3-300x139.png 300w, https://hamravesh.com/blog/wp-content/uploads/2024/06/image-3-768x356.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></figure>



<p>یکی دیگر از ویژگی‌های پلاگین داکر در vscode، دسترسی به دستورات داکر از طریق پالت فرمان (Control Palette) است. برای باز کردن این پالت، کلیدهای ترکیبی Ctrl + Shift + P را فشار دهید. سپس عبارت «Docker» را در نوار جستجو تایپ کنید تا فهرستی از دستورات قابل استفادۀ داکر نمایش داده شود.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="800" height="246" src="https://hamravesh.com/blog/wp-content/uploads/2024/06/image-4.png" alt="جستجوی عبارت «Docker» در نوار جستجو فهرستی از دستورات قابل استفادۀ داکر را نمایش می‌دهد." class="wp-image-3263" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/06/image-4.png 800w, https://hamravesh.com/blog/wp-content/uploads/2024/06/image-4-300x92.png 300w, https://hamravesh.com/blog/wp-content/uploads/2024/06/image-4-768x236.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></figure>



<h2 class="wp-block-heading" id="h-ساخت-dockerfile-با-پلاگین-داکر-در-vscode">ساخت dockerfile با پلاگین داکر در vscode</h2>



<p>اگر پوشۀ برنامۀ خود را در ویژوال استودیو کد باز کرده‌اید، می‌توانید با استفاده از افزونۀ داکر، به‌طور خودکار Dockerfile و سایر فایل‌های لازم برای ایجاد یک <a href="https://hamravesh.com/blog/what-is-docker-image/">ایمیج داکر</a> را در آن پوشه ایجاد کنید. مراحل زیر، روند ایجاد فایل‌های داکر برای یک برنامۀ نود‌جی‌اس است:</p>



<ul class="wp-block-list">
<li>برای باز کردن پالت فرمان، کلیدهای ترکیبی Ctrl + Shift + P را فشار دهید.</li>



<li>عبارت «Docker» را در کادر جستجو تایپ کنید.</li>



<li>از فهرست نتایج جستجو، گزینۀ «Docker: Add Docker Files to Workspace…» را انتخاب کنید.</li>
</ul>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="800" height="287" src="https://hamravesh.com/blog/wp-content/uploads/2024/06/image-5.png" alt="گزینۀ «Docker: Add Docker Files to Workspace…»" class="wp-image-3264" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/06/image-5.png 800w, https://hamravesh.com/blog/wp-content/uploads/2024/06/image-5-300x108.png 300w, https://hamravesh.com/blog/wp-content/uploads/2024/06/image-5-768x276.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></figure>



<ul class="wp-block-list">
<li>مجموعه‌ابزار یا پلتفرمی را انتخاب کنید که برای توسعۀ برنامۀ خود از آن استفاده کرده‌اید. در این مثال، ما از نود‌جی‌اس استفاده می‌کنیم.</li>
</ul>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="800" height="286" src="https://hamravesh.com/blog/wp-content/uploads/2024/06/image-6.png" alt="انتخاب مجموعه‌ابزار یا پلتفرمی که برای توسعۀ برنامۀ خود از آن استفاده کرده‌ایم" class="wp-image-3265" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/06/image-6.png 800w, https://hamravesh.com/blog/wp-content/uploads/2024/06/image-6-300x107.png 300w, https://hamravesh.com/blog/wp-content/uploads/2024/06/image-6-768x275.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></figure>



<ul class="wp-block-list">
<li>شمارۀ پورتی را وارد کنید که برنامۀ شما به آن گوش می‌دهد. اگر برنامۀ شما هیچ پورتی را در دسترس قرار نمی‌دهد، این فیلد را خالی بگذارید.</li>
</ul>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="800" height="191" src="https://hamravesh.com/blog/wp-content/uploads/2024/06/image-7.png" alt="وارد کردن شماره پورت" class="wp-image-3266" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/06/image-7.png 800w, https://hamravesh.com/blog/wp-content/uploads/2024/06/image-7-300x72.png 300w, https://hamravesh.com/blog/wp-content/uploads/2024/06/image-7-768x183.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></figure>



<ul class="wp-block-list">
<li>حالا در این مرحله انتخاب کنید که آیا فایل‌های داکر کامپوز شامل شوند یا خیر.</li>
</ul>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="800" height="191" src="https://hamravesh.com/blog/wp-content/uploads/2024/06/image-8.png" alt="انتخاب این که آیا فایل‌های داکر کامپوز شامل شوند یا خیر" class="wp-image-3267" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/06/image-8.png 800w, https://hamravesh.com/blog/wp-content/uploads/2024/06/image-8-300x72.png 300w, https://hamravesh.com/blog/wp-content/uploads/2024/06/image-8-768x183.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></figure>



<p>ویژوال استودیو کد به طور خودکار سینتکس فایل‌ها را بررسی کرده و فایل‌های ضروری داکر را ایجاد می‌کند. در مثال زیر، افزونۀ داکر ۲ فایل <code>.dockerignore</code> و <code>Dockerfile</code> را می‌سازد. فایل <code>Dockerfile</code> حاوی دستورالعمل‌هایی است که برای ایجاد یک ایمیج کانتینر از برنامۀ نود‌جی‌اس مورد نیاز خواهد بود.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="800" height="290" src="https://hamravesh.com/blog/wp-content/uploads/2024/06/image-9.png" alt="فایل Dockerfile در vscode" class="wp-image-3268" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/06/image-9.png 800w, https://hamravesh.com/blog/wp-content/uploads/2024/06/image-9-300x109.png 300w, https://hamravesh.com/blog/wp-content/uploads/2024/06/image-9-768x278.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></figure>



<h2 class="wp-block-heading" id="h-ساخت-و-اجرای-ایمیج-داکر">ساخت و اجرای ایمیج داکر</h2>



<p>حالا که تمام فایل‌های لازم ایجاد شده‌اند، می‌توانید از داکر در ویژوال استودیو کد برای ساخت ایمیج داکر برنامۀ خود و اجرای یک کانتینر با استفاده از آن تصویر استفاده کنید. برای انجام این کار، باید مراحل زیر را دنبال کنیم:</p>



<ul class="wp-block-list">
<li>برای باز کردن پالت فرمان، کلیدهای ترکیبی Ctrl + Shift + P را فشار دهید.</li>



<li>عبارت Docker Images: Build Image… را جستجو کرده و آن را انتخاب کنید.</li>
</ul>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="800" height="145" src="https://hamravesh.com/blog/wp-content/uploads/2024/06/image-10.png" alt="جستجوی عبارت Docker Images: Build Image… و انتخاب آن" class="wp-image-3269" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/06/image-10.png 800w, https://hamravesh.com/blog/wp-content/uploads/2024/06/image-10-300x54.png 300w, https://hamravesh.com/blog/wp-content/uploads/2024/06/image-10-768x139.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></figure>



<p>داکر مراحل موجود در فایل Dockerfile را خوانده و اجرا می‌کند و یک ایمیج از برنامۀ نود‌جی‌اس می‌سازد.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="800" height="221" src="https://hamravesh.com/blog/wp-content/uploads/2024/06/image-11.png" alt="ساخت ایمیج از برنامه نود جی اس" class="wp-image-3270" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/06/image-11.png 800w, https://hamravesh.com/blog/wp-content/uploads/2024/06/image-11-300x83.png 300w, https://hamravesh.com/blog/wp-content/uploads/2024/06/image-11-768x212.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></figure>



<ul class="wp-block-list">
<li>در پالت فرمان، دستور <code>Docker Images: Run</code> را جستجو کرده و انتخاب کنید تا یک کانتینر بر اساس تصویر ساخته شده اجرا شود.</li>
</ul>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="800" height="145" src="https://hamravesh.com/blog/wp-content/uploads/2024/06/image-12.png" alt="" class="wp-image-3271" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/06/image-12.png 800w, https://hamravesh.com/blog/wp-content/uploads/2024/06/image-12-300x54.png 300w, https://hamravesh.com/blog/wp-content/uploads/2024/06/image-12-768x139.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></figure>



<ul class="wp-block-list">
<li>حالا امیجی را باید انتخاب کنیم که می‌خوایم برای کانتینر استفاده شود.</li>
</ul>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="800" height="194" src="https://hamravesh.com/blog/wp-content/uploads/2024/06/image-13.png" alt="" class="wp-image-3272" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/06/image-13.png 800w, https://hamravesh.com/blog/wp-content/uploads/2024/06/image-13-300x73.png 300w, https://hamravesh.com/blog/wp-content/uploads/2024/06/image-13-768x186.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></figure>



<ul class="wp-block-list">
<li>در این مرحله image tag را انتخاب می‌کنیم.</li>
</ul>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="800" height="101" src="https://hamravesh.com/blog/wp-content/uploads/2024/06/image-14.png" alt="" class="wp-image-3273" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/06/image-14.png 800w, https://hamravesh.com/blog/wp-content/uploads/2024/06/image-14-300x38.png 300w, https://hamravesh.com/blog/wp-content/uploads/2024/06/image-14-768x97.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></figure>



<p>داکر با موفقیت کانتینر را اجرا و ID آن را در خروجی چاپ می‌کند.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="800" height="221" src="https://hamravesh.com/blog/wp-content/uploads/2024/06/image-15.png" alt="" class="wp-image-3274" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/06/image-15.png 800w, https://hamravesh.com/blog/wp-content/uploads/2024/06/image-15-300x83.png 300w, https://hamravesh.com/blog/wp-content/uploads/2024/06/image-15-768x212.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></figure>



<h2 class="wp-block-heading" id="h-جمع-بندی">جمع‌بندی</h2>



<p>پس از مطالعۀ این مقاله، اکنون باید بدانیم چگونه افزونۀ داکر را برای ویژوال استودیو کد نصب و چطور از آن برای بسته‌بندی برنامه‌ها و اجرای کانتینرها استفاده کنیم. با بهره‌گیری از این افزونه، زمان کمتری را صرف جابه‌جایی بین ویژوال استودیو کد و ترمینال خواهیم کرد و در نتیجه می‌توانیم تمرکز بیشتری روی پروژۀ خود داشته باشید. اگر به طور مکرر از داکر استفاده می‌کنید، توصیه می‌کنیم راهنمای دستورات داکر [<a href="https://phoenixnap.com/kb/docker-commands-cheat-sheet">+</a>] را برای مراجعات بعدی ذخیره کنید.</p>
<p>The post <a href="https://hamravesh.com/blog/docker-in-vscode/">نحوه استفاده از پلاگین داکر در vscode</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/docker-in-vscode/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>بهترین روش‌ها برای نوشتن Dockerfile</title>
		<link>https://hamravesh.com/blog/dockerfile-best-practices/</link>
					<comments>https://hamravesh.com/blog/dockerfile-best-practices/#respond</comments>
		
		<dc:creator><![CDATA[ارسطو عباسی]]></dc:creator>
		<pubDate>Sat, 10 Aug 2024 07:37:15 +0000</pubDate>
				<category><![CDATA[داکر]]></category>
		<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=3305</guid>

					<description><![CDATA[<p>Dockerfile یکی از اصلی‌ترین بخش‌های معماری داکر است. به همین دلیل نیاز است که با بهترین روش‌ها برای پیاده‌سازی داکرفایل آشنا شویم. </p>
<p>The post <a href="https://hamravesh.com/blog/dockerfile-best-practices/">بهترین روش‌ها برای نوشتن Dockerfile</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>همانطور که می‌دانید <strong><a href="https://hamravesh.com/blog/what-is-docker/" target="_blank" rel="noreferrer noopener">داکر</a></strong> از جمله اصلی‌ترینِ ابزارها برای مدیریت و اجرای کانتینرها است. اما یکی از اجزای کلیدی خود داکر، فایل Dockerfile است که به تعریف نحوه ساخت یک ایمیج (Image) در محیط Docker کمک می‌کند. در این مطلب از وبلاگ هم‌روش ابتدا قصد داریم با Dockerfile و ساختار آن آشنا شویم، سپس بهترین رویکردها و ترفندهایی را که به نوشتن Dockerfile بهتر منتهی می‌شود بپردازیم.</p>



<h2 class="wp-block-heading" id="h-آشنایی-با-dockerfile">آشنایی با Dockerfile</h2>



<p>Dockerfile یک فایل متنی ساده است و شامل دستوراتی می‌شود که برای ساخت ایمیج در Docker استفاده می‌شود. این دستورات به Docker می‌گویند که چگونه یک محیط اجرایی مشخص را از صفر ایجاد کند. هر Dockerfile معمولاً از موارد زیر تشکیل می‌شود:</p>



<ol class="wp-block-list">
<li><strong>مشخص کردن پایه</strong>: با استفاده از دستور <code>FROM</code> مشخص می‌شود که ایمیج پایه‌ای که باید استفاده شود چیست. این ایمیج می‌تواند یک سیستم عامل ساده یا یک ایمیج پیچیده‌تر با نرم‌افزارهای از پیش نصب شده باشد.</li>



<li><strong>اضافه کردن فایل‌ها و دایرکتوری‌ها</strong>: با دستور <code>COPY</code> یا <code>ADD</code> فایل‌ها و دایرکتوری‌ها به ایمیج اضافه می‌شوند.</li>



<li><strong>اجرای دستورات</strong>: با دستور <code>RUN</code> دستورات مختلفی اجرا می‌شوند، مانند نصب نرم‌افزارها و بسته‌های مورد نیاز.</li>



<li><strong>تنظیم متغیرهای محیطی</strong>: با استفاده از دستور <code>ENV</code> متغیرهای محیطی تنظیم می‌شوند.</li>



<li><strong>مشخص کردن نقطه ورودی</strong>: با دستور <code>ENTRYPOINT</code> یا <code>CMD</code> مشخص می‌شود که چه برنامه‌ای باید هنگام اجرای کانتینر اجرا شود.</li>



<li><strong>باز کردن پورت‌ها</strong>: با دستور <code>EXPOSE</code> پورت‌هایی که کانتینر برای ارتباطات خارجی استفاده می‌کند تعریف می‌شوند. </li>
</ol>



<p>در زیر نمونه‌ای از سینتکس این فایل را مشاهده خواهید کرد:</p>



<pre class="wp-block-code"><code>FROM node:18-alpine
WORKDIR /app
COPY . .
RUN yarn install --production
CMD &#91;"node", "src/index.js"]
EXPOSE 3000</code></pre>



<h2 class="wp-block-heading" id="h-بهترین-روش-ها-برای-نوشتن-dockerfile">بهترین روش‌ها برای نوشتن Dockerfile</h2>



<p>هر چند که <strong><a href="https://docs.docker.com/guides/workshop/02_our_app/">مستندات داکر</a></strong> مکان بسیار مناسبی برای یادگیری شیوه نوشتن درست فایل‌های Dockerfile است، اما جدای از روش‌های استاندارد، ترفندها و روش‌هایی وجود دارد که به بهینه‌تر شدن Dockerfile کمک می‌کند. در ادامه سعی می‌کنیم تا برخی از اصلی‌ترین این موارد را بررسی کنیم.</p>



<h3 class="wp-block-heading" id="h-استفاده-از-ایمیج-پایه-مناسب"><strong>استفاده از ایمیج پایه مناسب</strong></h3>



<p>از ایمیج‌های رسمی و مورد تایید Docker استفاده کنید تا از امنیت و کیفیت آن‌ها مطمئن شوید. همچنین ترجیحاً از ایمیج‌های پایه کوچک مانند <code>alpine</code> استفاده کنید تا حجم نهایی ایمیج کاهش یابد. استفاده از ایمیج‌های پایه سبک در Dockerfile به معنای انتخاب سیستم‌عامل‌ها و توزیع‌هایی است که اندازه کوچکتری دارند و بهینه‌تر هستند. این کار می‌تواند مزایای زیادی به همراه داشته باشد. برای مثال، می‌توان از توزیع لینوکس Alpine به عنوان ایمیج پایه استفاده کرد. Alpine یک توزیع بسیار کوچک و سبک لینوکس است که برای ساختن ایمیج‌های Docker بسیار مناسب است.</p>



<p>اغلب ایمیج‌های رسمی یک نسخه کوچک شده از ایمیج اصلی را در داکرهاب خود قرار می‌دهند. وجود پسوند Alpine در کنار نام ایمیج‌ها بیانگر کوچک و سبک‌ بودن آن‌هاست. </p>



<h3 class="wp-block-heading" id="h-بهره-گیری-از-کش-docker"><strong>بهره‌گیری از کش Docker</strong></h3>



<p>دستورات را طوری سازماندهی کنید که لایه‌های کوچک‌تر و کمتری ایجاد شوند. دستورات پر تغییر (مانند نصب پکیج‌ها) را در لایه‌های انتهایی قرار دهید تا از کش لایه‌های قبلی بهره ببرید. بهره‌گیری از کش Docker می‌تواند به طور چشمگیری زمان ساخت ایمیج‌های Docker را کاهش دهد. داکر از کش برای ذخیره‌سازی لایه‌هایی که در مراحل قبلی ساخته شده‌اند استفاده می‌کند، به طوری که در صورت عدم تغییر محتوای آن‌ها، نیاز به ساخت مجدد آن‌ها نیست. برای بهینه‌سازی در بهره‌گیری از کش، می‌توان دستورات را به گونه‌ای ترتیب داد که بخش‌های ثابت‌تر در ابتدا قرار گیرند.</p>



<h3 class="wp-block-heading" id="h-حفظ-امنیت"><strong>حفظ امنیت</strong></h3>



<p>اطلاعات حساس مانند کلیدهای API و رمز عبورها را در Dockerfile ذخیره نکنید. همواره از آخرین نسخه‌های بسته‌ها و نرم‌افزارها استفاده کنید و آن‌ها را به‌روز نگه دارید. همچنین بهتر است از اجرای کانتینرها با کاربر root خودداری کنید و یک کاربر Non-Root را برای این‌کار مشخص کنید. </p>



<h3 class="wp-block-heading" id="h-کاهش-حجم-ایمیج-ها"><strong>کاهش حجم ایمیج‌ها</strong></h3>



<p>پس از نصب بسته‌ها، فایل‌های موقت و کش را حذف کنید تا حجم نهایی ایمیج کاهش یابد. از تکنیک‌های ساخت چند مرحله‌ای (multi-stage builds) استفاده کنید تا فقط فایل‌های ضروری در ایمیج نهایی قرار گیرند. Multi-stage Builds در داکر به یک تکنیک ساخت ایمیج اشاره دارد که در آن از چندین مرحله (استیج) برای ساخت یک ایمیج نهایی استفاده می‌شود. این تکنیک به شما اجازه می‌دهد تا فایل‌های موقت و ابزارهای غیرضروری که فقط در مراحل ساخت و توسعه نیاز است، را در مرحله نهایی (مرحله اجرا) حذف کرده و حجم ایمیج خود را کاهش دهید. </p>



<h2 class="wp-block-heading" id="h-بهینه-سازی-دستورات"><strong>بهینه‌سازی دستورات</strong></h2>



<p>برای اینکه به‌صورت عملی نکات گفته شده را درک کنیم در ادامه به‌صورت جداگانه چندین تکنیک برای بهینه‌تر شدن Dockerfile را به همراه نمونه کدهای آن بررسی می‌کنیم:</p>



<h4 class="wp-block-heading" id="h-کاهش-تعداد-لایه-ها"><strong>کاهش تعداد لایه‌ها</strong>:</h4>



<p>در Docker، هر دستور <code>RUN</code>, <code>COPY</code>, <code>ADD</code>, <code>FROM</code> یک لایه جدید ایجاد می‌کند. ترکیب چندین دستور <code>RUN</code> در یک دستور واحد می‌تواند به کاهش تعداد لایه‌ها کمک کند. به عنوان مثال:</p>



<pre class="wp-block-code"><code>RUN apt-get update &amp;&amp; apt-get install -y \
    package1 \
    package2 \
    &amp;&amp; apt-get clean \
    &amp;&amp; rm -rf /var/lib/apt/lists/*</code></pre>



<h4 class="wp-block-heading" id="h-استفاده-از-کش-موثر"><strong>استفاده از کش موثر</strong>:</h4>



<p>دستورات <code>COPY</code> و <code>ADD</code> را به گونه‌ای ترتیب دهید که فایل‌هایی که کمتر تغییر می‌کنند زودتر کپی شوند تا Docker بتواند از کش استفاده کند. به عنوان مثال، فایل‌های وابستگی‌ها مانند <code>requirements.txt</code> را قبل از سایر فایل‌ها کپی کنید.</p>



<pre class="wp-block-code"><code>COPY requirements.txt /app/
RUN pip install --no-cache-dir -r /app/requirements.txt
COPY . /app/</code></pre>



<h4 class="wp-block-heading" id="h-پاکسازی-پس-از-نصب"><strong>پاکسازی پس از نصب</strong>:</h4>



<p>بسته‌های موقت و فایل‌های نصبی را پس از نصب پاک کنید تا حجم نهایی ایمیج کاهش یابد. به عنوان مثال:</p>



<pre class="wp-block-code"><code>RUN apt-get update &amp;&amp; apt-get install -y package \
    &amp;&amp; apt-get clean \
    &amp;&amp; rm -rf /var/lib/apt/lists/*</code></pre>



<h4 class="wp-block-heading" id="h-استفاده-از-ساخت-چند-مرحله-ای-یا-multi-stage-builds"><strong>استفاده از ساخت چند مرحله‌ای یا (Multi-stage builds)</strong>:</h4>



<p>برای کاهش اندازه نهایی ایمیج، از ساخت چند مرحله‌ای استفاده کنید تا فقط فایل‌های نهایی و مورد نیازِ ایمیج نهایی اضافه شوند.</p>



<pre class="wp-block-code"><code>FROM golang:1.16 AS builder
WORKDIR /src
COPY . .
RUN go build -o myapp

FROM alpine:latest
COPY --from=builder /src/myapp /app/
CMD &#91;"/app/myapp"]</code></pre>



<h4 class="wp-block-heading" id="h-استفاده-build-arguments"><strong>استفاده Build Arguments</strong>:</h4>



<p>استفاده از <code>ARG</code> برای تعریف Build Arguments می‌تواند به تنظیم بهتر و انعطاف‌پذیری بیشتر کمک کند.</p>



<pre class="wp-block-code"><code>ARG BASE_IMAGE=python:3.9-slim
FROM ${BASE_IMAGE}</code></pre>



<h2 class="wp-block-heading" id="h-در-پایان">در پایان</h2>



<p>با رعایت بهترین شیوه‌های نگارش Dockerfile می‌توانید ایمیج‌های کارآمد، بهینه و امن‌تری ایجاد کنید. در این مطلب به‌صورت خلاصه در ارتباط با بهترین تکنیک‌ها برای نوشتن Dockerfileهای بهتر صحبت کردیم. اما مطمئنا روش‌های بیشتری برای این موضوع وجود دارد که باید با جستجو و کسب تجربه آن‌ها را پیدا کنید. </p>
<p>The post <a href="https://hamravesh.com/blog/dockerfile-best-practices/">بهترین روش‌ها برای نوشتن Dockerfile</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/dockerfile-best-practices/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>شبکه در داکر – شرح Docker Networking به زبان ساده</title>
		<link>https://hamravesh.com/blog/docker-networking/</link>
					<comments>https://hamravesh.com/blog/docker-networking/#respond</comments>
		
		<dc:creator><![CDATA[بابک خوش‌نویس]]></dc:creator>
		<pubDate>Wed, 07 Aug 2024 20:37:07 +0000</pubDate>
				<category><![CDATA[داکر]]></category>
		<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=3285</guid>

					<description><![CDATA[<p>داکر پلتفرم کانتِینرسازی است که با استفاده از مجازی‌سازی در سطح سیستم‌عامل، نرم‌افزارها و وابستگی‌های آن‌ها را در واحدهای قابل استفاده مجدد به نام «کانتِینر» بسته‌بندی می‌کند. داکر شامل سیستم شبکه برای مدیریت ارتباطات بین کانتینرها، میزبان داکر و دنیای خارج است. این سیستم از چندین نوع شبکه مختلف پشتیبانی می‌کند که امکان استفاده در [&#8230;]</p>
<p>The post <a href="https://hamravesh.com/blog/docker-networking/">شبکه در داکر – شرح Docker Networking به زبان ساده</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><a href="https://hamravesh.com/blog/what-is-docker/">داکر</a> پلتفرم کانتِینرسازی است که با استفاده از مجازی‌سازی در سطح سیستم‌عامل، نرم‌افزارها و وابستگی‌های آن‌ها را در واحدهای قابل استفاده مجدد به نام «کانتِینر» بسته‌بندی می‌کند. داکر شامل <strong>سیستم شبکه</strong> برای <strong>مدیریت ارتباطات بین کانتینرها</strong>، <strong>میزبان داکر و دنیای خارج</strong> است. این سیستم از چندین نوع شبکه مختلف پشتیبانی می‌کند که امکان استفاده در موارد متنوع را فراهم می‌آورد. در این نوشته، نحوه‌ی عملکرد شبکه‌های داکر را توضیح خواهیم داد و سپس اصول اولیه‌ی شبکه در داکر را در پیاده‌سازی‌های کانتِینری بررسی خواهیم کرد.</p>



<h2 class="wp-block-heading" id="h-انواع-شبکه-در-داکر-چیست">انواع شبکه در داکر چیست؟</h2>



<p>شبکه‌های داکر، ارتباطات بین کانتینرهای مجاور و سرویس‌های خارجی را پیکربندی می‌کنند. برای برقراری هرگونه اتصال شبکه، کانتینرها باید به یک شبکه‌ داکر متصل شوند. مسیرهای ارتباطی در دسترس هر کانتینر، به اتصالات شبکه‌ای آن بستگی دارد. داکر به‌طور پیش‌فرض دارای ۵ درایور (قالب) شبکه‌ داخلی است که قابلیت‌های اصلی شبکه را پیاده‌سازی می‌کنند:</p>



<ul class="wp-block-list">
<li>پُل (bridge)</li>



<li>میزبان (host)</li>



<li>هم‌پوشان (overlay)</li>



<li>آی‌پی‌وی‌لن (IPvLAN)</li>



<li>مک‌ولن (macvlan)</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="450" height="450" src="https://hamravesh.com/blog/wp-content/uploads/2024/06/docker-networking.png" alt="انواع شبکه در داکر چیست" class="wp-image-3288" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/06/docker-networking.png 450w, https://hamravesh.com/blog/wp-content/uploads/2024/06/docker-networking-300x300.png 300w, https://hamravesh.com/blog/wp-content/uploads/2024/06/docker-networking-150x150.png 150w, https://hamravesh.com/blog/wp-content/uploads/2024/06/docker-networking-250x250.png 250w, https://hamravesh.com/blog/wp-content/uploads/2024/06/docker-networking-100x100.png 100w" sizes="auto, (max-width: 450px) 100vw, 450px" /></figure>
</div>


<p>حالا در ادامه در خصوص هر کدام از این قالب‌ها یا همان درایورها توضیحات بیشتری را ارائه می‌دهیم.</p>



<h3 class="wp-block-heading" id="h-شبکه-های-bridge-در-داکر">شبکه‌های bridge در داکر</h3>



<p>شبکه‌های پُل، <strong>ارتباط نرم‌افزاری بین سیستم میزبان و کانتینر</strong> را ایجاد می‌کنند. کانتینرهایی که به این شبکه متصل هستند، می‌توانند با یکدیگر ارتباط برقرار کنند، اما از کانتینرهای خارج از این شبکه جدا و ایزوله هستند. به هر کانتینر در این شبکه، یک آدرس آی‌پی اختصاصی داده می‌شود. از آنجا که این شبکه به‌صورت پل با سیستم میزبان شما مرتبط است، کانتینرها می‌توانند با شبکه‌ محلی (LAN) و اینترنت نیز ارتباط برقرار کنند.</p>



<p>با این حال، این کانتینرها به‌عنوان دستگاه‌های فیزیکی در شبکه‌ محلی شما ظاهر نمی‌شوند. این نوع شبکه، انتخاب پیش‌فرض و مناسبی برای اکثر کاربردهای معمول داکر است. شبکه پل در عین حال که لایه‌ ایزوله‌سازی برای امنیت بیشتر ایجاد می‌کند، امکان ارتباط بین کانتینرها و دسترسی به اینترنت را فراهم می‌سازد.</p>



<h3 class="wp-block-heading" id="h-شبکه-میزبان-در-داکر">شبکه میزبان در داکر</h3>



<p>کانتینرهایی که از حالت شبکه‌ی میزبان استفاده می‌کنند، بدون هیچ‌گونه جداسازی، شبکه‌ی سیستم میزبان را به اشتراک می‌گذارند. به این کانتینرها آدرس آی‌پی مجزا اختصاص داده نمی‌شود و پورت‌های آن‌ها مستقیماً روی رابط شبکه‌ی سیستم میزبان منتشر می‌شوند. به عبارت دیگر، اگر فرآیندی در کانتینر به پورت ۸۰ گوش دهد، این پورت مستقیماً به آدرس <code>&lt;your_host_ip&gt;:80</code> متصل می‌شود.</p>



<h3 class="wp-block-heading" id="h-شبکه-همپوشان-در-داکر">شبکه همپوشان در داکر</h3>



<p>شبکه‌های همپوشان، <strong>شبکه‌های توزیع‌شده‌ای هستند که چندین میزبان داکر را پوشش می‌دهند</strong>. این نوع شبکه به تمام کانتینرهایی که روی هر یک از این میزبان‌ها اجرا می‌شوند، اجازه می‌دهد بدون نیاز به پشتیبانی مسیریابی در سطح سیستم‌عامل، با یکدیگر ارتباط برقرار کنند.</p>



<p>شبکه‌های همپوشان، زیرساخت ارتباطی را برای خوشه‌های Docker Swarm فراهم می‌کنند. با این حال، می‌توانید از آن‌ها در مواردی که ۲ نمونه‌ی جداگانه از موتور داکر را اجرا می‌کنید و کانتینرهای آن‌ها نیاز به ارتباط مستقیم با یکدیگر دارند نیز استفاده کنید. این قابلیت به شما امکان می‌دهد محیط‌هایی شبیه به Swarm را برای خود ایجاد کنید.</p>



<p>این نوع شبکه برای سناریوهایی مناسب است که <strong>نیاز دارید کانتینرهای شما در چندین سرور مختلف با یکدیگر ارتباط داشته باشند</strong>، مانند اپلیکیشن‌های توزیع‌شده یا میکروسرویس‌ها. شبکه همپوشان، پیچیدگی‌های مدیریت ارتباطات بین سرورها را از بین می‌برد و یک لایه‌ی ارتباطی یکپارچه برای تمام کانتینرها فراهم می‌کند.</p>



<h3 class="wp-block-heading" id="h-شبکه-ipvlan">شبکه ipvlan</h3>



<p>آی‌پی‌وی‌لن درایور پیشرفته‌ای است که کنترل دقیقی بر آدرس‌های IPv4 و IPv6 اختصاص داده شده به کانتینرهای شما فراهم می‌کند. علاوه بر این، امکان برچسب‌گذاری و مسیریابی VLAN در لایه‌های ۲ و ۳ را نیز ارائه می‌دهد.</p>



<p>این درایور زمانی مفید است که می‌خواهید سرویس‌های کانتینری را با یک شبکه‌ی فیزیکی موجود یکپارچه کنید. شبکه‌های ipvlan دارای رابط‌های شبکه‌ی اختصاصی هستند که مزایای عملکردی بیشتری نسبت به شبکه‌سازی مبتنی بر پل (bridge) ارائه می‌دهند.</p>



<p>استفاده از این نوع شبکه برای سناریوهایی مناسب است که نیاز به کنترل دقیق‌تر بر آدرس‌دهی و مدیریت ترافیک شبکه دارید. به عنوان مثال، در محیط‌های سازمانی که نیاز به یکپارچگی بیشتر با زیرساخت‌های شبکه موجود دارند یا در مواردی که نیاز به عملکرد بالاتر و تأخیر کمتر در ارتباطات شبکه وجود دارد، ipvlan می‌تواند گزینه‌ی مناسبی باشد.</p>



<h3 class="wp-block-heading" id="h-شبکه-macvlan">شبکه macvlan</h3>



<p>macvlan گزینه‌ی پیشرفته‌ی دیگری است که به کانتینرها اجازه می‌دهد به عنوان دستگاه‌های فیزیکی در شبکه شما ظاهر شوند. این کار با اختصاص یک مک آدرس منحصر به فرد به هر کانتینر در شبکه انجام می‌شود.</p>



<p>این نوع شبکه نیاز دارد که شما یکی از رابط‌های فیزیکی سیستم میزبان خود را به شبکه‌ی مجازی اختصاص دهید. همچنین، شبکه گسترده‌تر باید به‌طور مناسب پیکربندی شود تا از تعداد زیاد آدرس‌های MAC پشتیبانی کند که ممکن است توسط یک میزبان داکر فعال با کانتینرهای متعدد ایجاد شود.</p>



<p>استفاده از macvlan برای مواردی مناسب است که می‌خواهید کانتینرها دقیقاً مانند دستگاه‌های فیزیکی در شبکه شما رفتار کنند. این می‌تواند در محیط‌هایی که نیاز به یکپارچگی عمیق با زیرساخت‌های شبکه موجود دارند، مفید باشد. با این حال، باید توجه داشت که پیکربندی و مدیریت این نوع شبکه پیچیده‌تر است و نیاز به دانش عمیق‌تری از مفاهیم شبکه وجود دارد.</p>



<h2 class="wp-block-heading" id="h-کدام-شبکه-در-داکر-را-انتخاب-کنیم">کدام شبکه در داکر را انتخاب کنیم؟</h2>



<p>شبکه‌های پل (Bridge) برای اکثر سناریوهایی که با آن‌ها روبرو می‌شوید، مناسب‌ترین گزینه هستند. کانتینرها در این شبکه می‌توانند با استفاده از آدرس‌های IP و نام‌های DNS خود با یکدیگر ارتباط برقرار کنند. همچنین به شبکه‌ی سیستم میزبان شما دسترسی دارند، بنابراین می‌توانند به اینترنت و شبکه‌ی محلی شما متصل شوند.</p>



<p>شبکه‌های میزبان (Host) زمانی بهترین گزینه هستند که می‌خواهید پورت‌ها را مستقیماً به رابط‌های سیستم میزبان خود متصل کنید و نگران جداسازی شبکه نیستید. آن‌ها به برنامه‌های کانتِینری اجازه می‌دهند تا مشابه سرویس‌های شبکه‌ای که مستقیماً روی سیستم میزبان شما اجرا می‌شوند، عمل کنند.</p>



<p>شبکه‌های همپوشان (Overlay) زمانی مورد نیاز هستند که کانتینرها روی میزبان‌های داکر مختلف نیاز به ارتباط مستقیم با یکدیگر دارند. این شبکه‌ها به شما امکان می‌دهند محیط‌های توزیع‌شده‌ی خود را برای دسترسی‌پذیری بالا راه‌اندازی کنید.</p>



<p>شبکه‌های Macvlan در مواردی مفید هستند که کانتینرها باید به عنوان یک دستگاه فیزیکی در شبکه‌ی میزبان شما ظاهر شوند، مانند زمانی که برنامه‌ای را اجرا می‌کنند که ترافیک شبکه را نظارت می‌کند. شبکه‌های IPvLAN گزینه پیشرفته‌ای برای زمانی هستند که نیازهای خاصی در مورد آدرس‌های IP، برچسب‌ها و مسیریابی کانتینرها دارید.</p>



<p>داکر همچنین از پلاگین‌های شبکه‌ی شخص ثالث پشتیبانی می‌کند که سیستم شبکه را با حالت‌های عملیاتی اضافی گسترش می‌دهند. این موارد شامل Kuryr، که شبکه‌سازی را با استفاده از OpenStack Neutron پیاده‌سازی می‌کند، و Weave، یک شبکه‌ی همپوشان با تأکید بر کشف سرویس، امنیت و تحمل خطا، می‌شوند.</p>



<p>در نهایت، «شبکه‌سازی داکر» (Docker networking) همیشه در سطح کانتینر اختیاری است: تنظیم شبکه یک کانتینر روی <code>none</code> به طور کامل پشته شبکه آن را غیرفعال می‌کند. کانتینر قادر نخواهد بود به همسایگان خود، سرویس‌های سیستم میزبان یا اینترنت دسترسی پیدا کند. این امر به بهبود امنیت از طریق محدودسازی برنامه‌هایی که انتظار نمی‌رود به اتصال نیاز داشته باشند، کمک می‌کند.</p>



<h2 class="wp-block-heading" id="h-شبکه-در-داکر-چطور-کار-می-کند">شبکه در داکر چطور کار می‌کند؟</h2>



<p>داکر از پشته‌ی شبکه‌ی سیستم میزبان شما برای پیاده‌سازی سیستم شبکه‌ی خود استفاده می‌کند. این کار با دستکاری قوانین iptables برای هدایت ترافیک به کانتینرهای شما انجام می‌شود. این روش همچنین جداسازی بین شبکه‌های داکر و سیستم میزبان را فراهم می‌کند.</p>



<p>iptables ابزار استاندارد فیلترینگ بسته‌ها در لینوکس است. قوانین اضافه شده به iptables تعیین می‌کنند که چگونه ترافیک هنگام عبور از پشته‌ی شبکه‌ی سیستم میزبان شما مسیریابی شود. شبکه‌های داکر قوانین فیلترینگ را اضافه می‌کنند که ترافیک مطابق را به برنامه کانتینر شما هدایت می‌کنند. این قوانین به طور خودکار پیکربندی می‌شوند، بنابراین نیازی نیست شما به طور دستی با iptables تعامل داشته باشید.</p>



<p>به کانتینرهای داکر یک فضای نام شبکه‌ی اختصاصی تخصیص داده می‌شود که ویژگی هسته لینوکس به حساب می‌آید و محیط‌های شبکه مجازی ایزوله شده را فراهم می‌کند. کانتینرها همچنین رابط‌های شبکه‌ی مجازی روی سیستم میزبان شما ایجاد می‌کنند که به آن‌ها اجازه می‌دهد با استفاده از شبکه سیستم میزبان، خارج از فضای نام خود ارتباط برقرار کنند.</p>



<p>جزئیات نحوه پیاده‌سازی شبکه‌سازی داکر نسبتاً پیچیده و در سطح پایین است. داکر این پیچیدگی‌ها را از کاربران نهایی پنهان می‌کند و تجربه شبکه‌سازی کانتینری یکپارچه، قابل پیش‌بینی و مؤثری ارائه می‌دهد. با این حال، اطلاعات بیشتر در مستندات داکر در دسترس است.</p>



<p>این سیستم شبکه‌سازی پیچیده به شما امکان می‌دهد تا کانتینرها را به راحتی و با کارایی بالا در محیط‌های مختلف اجرا کنید، بدون اینکه نگران جزئیات فنی زیرساخت شبکه باشید.</p>



<h2 class="wp-block-heading" id="h-مقایسه-docker-networking-با-vm-networking">مقایسه Docker Networking با VM Networking</h2>



<p>مدل شبکه‌سازی داکر، محیط‌های مجازی ایزوله شده را برای کانتینرها فراهم می‌کند. این شبکه‌ها نیازهای رایج را برآورده می‌کنند، اما تفاوت‌های کلیدی با شبکه‌های مجازی ایجاد شده توسط ماشین‌های مجازی سُنتی دارند.</p>



<p>در حالی که داکر با استفاده از فضاهای نام و قوانین iptables به ایزوله‌سازی شبکه دست می‌یابد، ماشین‌های مجازی معمولاً پشته شبکه جداگانه‌ای را برای هر ماشین مجازی اجرا می‌کنند. همچنین تفاوت‌هایی در اصطلاحات وجود دارد که می‌تواند باعث سردرگمی شود: آنچه داکر یک شبکه‌ی «پل» (bridge) می‌نامد، مشابه یک شبکه‌ی مبتنی بر NAT در اکثر راهکارهای ماشین مجازی است.</p>



<p>به طور کلی، ماشین‌های مجازی می‌توانند طیف گسترده‌تری از توپولوژی‌های شبکه را نسبت به آنچه داکر به طور پیش‌فرض اجازه می‌دهد، پشتیبانی کنند. با این حال، داکر تمام ابزارهای لازم برای ایجاد راهکار شبکه‌ی مورد نیاز شما را شامل می‌شود، خواه با استفاده از macvlan برای اختصاص آدرس‌ها به کانتینرها در شبکه‌ی فیزیکی شما، یا با استفاده از یک پلاگین شخص ثالث برای پیاده‌سازی مدل‌های شبکه‌ی از دست رفته.</p>



<p>این تفاوت‌ها به این معنا است که در حالی که داکر برای بسیاری از کاربردها ساده‌تر و کارآمدتر است، ماشین‌های مجازی ممکن است برای برخی سناریوهای پیچیده‌تر شبکه مناسب‌تر باشند. با این حال، انعطاف‌پذیری داکر به شما امکان می‌دهد تا در صورت نیاز، تقریباً هر نوع پیکربندی شبکه‌ای را پیاده‌سازی کنید.</p>



<h2 class="wp-block-heading" id="h-استفاده-از-شبکه-های-داکر">استفاده از شبکه‌های داکر</h2>



<p>در اینجا نحوه‌ی استفاده از شبکه‌ها برای مدیریت ارتباطات کانتینر را توضیح می‌دهیم. برای همراهی با این آموزش، شما به ۳ پنجره‌ی ترمینال نیاز خواهید داشت.</p>



<h3 class="wp-block-heading" id="h-ایجاد-شبکه-در-داکر">ایجاد شبکه در داکر</h3>



<p>برای ایجاد شبکه جدید در داکر، از دستور <code>docker network create</code> استفاده کنید. می‌توانید با تنظیم پرچم <code>-d</code>، درایور مورد نظر مانند <code>bridge</code> یا <code>host</code> را مشخص کنید. اگر این پرچم را حذف کنید، یک شبکه <code>bridge</code> ایجاد خواهد شد. دستور زیر را در اولین پنجره‌ی ترمینال خود اجرا کنید:</p>



<pre class="wp-block-code"><code>$ docker network create demo-network -d bridge
50ed05634f6a3312e56700ef683ca39df44bfc826e2e4da9179c2593c79910f9</code></pre>



<p>شناسه شبکه ایجاد شده در ترمینال شما نمایش داده می‌شود. در حال حاضر، شبکه جدید بی‌استفاده خواهد بود، زیرا هیچ کانتینری به آن متصل نشده است.</p>



<h3 class="wp-block-heading" id="h-اتصال-کانتینرها-به-شبکه-ها-در-داکر">اتصال کانتینرها به شبکه‌ها در داکر</h3>



<p>می‌توانید کانتینرهای جدید را با تنظیم پرچم <code>--network</code> در دستور <code>docker run</code> به یک شبکه متصل کنید. این دستور را در پنجره‌ی دوم ترمینال خود اجرا کنید:</p>



<pre class="wp-block-code"><code>$ docker run -it --rm --name container1 --network demo-network busybox:latest</code></pre>



<p>سپس، پنجره‌ی سوم ترمینال خود را باز کنید و یک کانتینر busybox دیگر را اجرا کنید، این بار بدون پرچم <code>--network</code>:</p>



<pre class="wp-block-code"><code>$ docker run -it --rm --name container2 busybox:latest</code></pre>



<p>حالا سعی کنید با استفاده از نام‌هایشان بین دو کانتینر ارتباط برقرار کنید:</p>



<pre class="wp-block-code"><code># در container1
/ # ping container2
ping: bad address 'container2'</code></pre>



<p>کانتینرها هنوز در یک شبکه مشترک نیستند، بنابراین نمی‌توانند مستقیماً با یکدیگر ارتباط برقرار کنند. از پنجره‌ی اول ترمینال خود استفاده کنید تا <code>container2</code> را به شبکه متصل کنید:</p>



<pre class="wp-block-code"><code>$ docker network connect demo-network container2</code></pre>



<p>اکنون کانتینرها یک شبکه را به اشتراک می‌گذارند، که به آن‌ها اجازه می‌دهد یکدیگر را پیدا کنند:</p>



<pre class="wp-block-code"><code># در container1
/ # ping container2
PING container2 (172.22.0.3): 56 data bytes
64 bytes from 172.22.0.3: seq=0 ttl=64 time=4.205 ms</code></pre>



<h3 class="wp-block-heading" id="h-استفاده-از-روش-شبکه-میزبان-در-داکر">استفاده از روش شبکه میزبان در داکر</h3>



<p>شبکه‌های پل (bridge) رایج‌ترین نوع شبکه برای اتصال کانتینرهای شما هستند. حال بیایید قابلیت‌های شبکه‌های میزبان را نیز بررسی کنیم، جایی که کانتینرها مستقیماً به رابط‌های سیستم میزبان شما متصل می‌شوند. می‌توانید شبکه‌سازی میزبان را برای یک کانتینر با اتصال آن به شبکه داخلی host فعال کنید:</p>



<pre class="wp-block-code"><code>$ docker run -d --name nginx --network host nginx:latest</code></pre>



<p>NGINX به طور پیش‌فرض روی پورت 80 گوش می‌دهد. از آنجا که کانتینر از یک شبکه‌ی میزبان استفاده می‌کند، می‌توانید به سرور NGINX خود روی <code>localhost:80</code> سیستم میزبان خارج از کانتینر دسترسی پیدا کنید، حتی بدون اینکه هیچ پورتی به طور صریح متصل شده باشد:</p>



<pre class="wp-block-code"><code>$ curl localhost:80
&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Welcome to nginx!&lt;/title&gt;</code></pre>



<h3 class="wp-block-heading" id="h-غیرفعال-کردن-نتورکینگ-در-داکر">غیرفعال کردن نتورکینگ در داکر</h3>



<p>زمانی که شبکه یک کانتینر غیرفعال شود، هیچ اتصالی در دسترس نخواهد بود، نه به کانتینرهای دیگر و نه به شبکه‌ی گسترده‌تر شما. برای غیرفعال کردن شبکه، کانتینر خود را به شبکه <code>none</code> متصل کنید:</p>



<pre class="wp-block-code"><code>$ docker run -it --rm --network none busybox:latest
/ # ping google.com
ping: bad address 'google.com'</code></pre>



<p>این امکان به شما اجازه می‌دهد به راحتی سرویس‌های ناشناخته را ایزوله کنید.</p>



<h3 class="wp-block-heading" id="h-حذف-کانتینرها-از-شبکه">حذف کانتینرها از شبکه</h3>



<p>داکر به شما اجازه می‌دهد بدون راه‌اندازی مجدد کانتینرها، اتصالات شبکه را آزادانه مدیریت کنید. در بخش قبلی، دیدید که چگونه می‌توان یک کانتینر را پس از ایجاد آن به شبکه متصل کرد؛ همچنین امکان حذف کانتینرها از شبکه‌هایی که دیگر نیازی به مشارکت در آن‌ها ندارند نیز وجود دارد:</p>



<pre class="wp-block-code"><code>$ docker network disconnect demo-network container2</code></pre>



<p>هر تغییری که ایجاد کنید، بلافاصله اعمال خواهد شد.</p>



<h3 class="wp-block-heading" id="h-مدیریت-شبکه-های-داکر">مدیریت شبکه‌های داکر</h3>



<p>می‌توانید با استفاده از دستور network ls تمام شبکه‌های داکر خود را فهرست کنید:</p>



<pre class="wp-block-code"><code>$ docker network ls
NETWORK ID     NAME           DRIVER    SCOPE
44edcc537a6f   bridge         bridge    local
2cf9f8f370ad   demo-network   bridge    local
4d60b27f787a   host           host      local
288376a0a4f8   none           null      local</code></pre>



<p>خروجی این دستور شامل شبکه‌های پیش‌فرض «bridge»، «host» و «none»، و همچنین شبکه‌هایی است که خودتان ایجاد کرده‌اید. برای حذف یک شبکه، ابتدا باید تمام کانتینرهای داکر که از آن استفاده می‌کنند را قطع یا متوقف کنید. سپس شناسه یا نام شبکه را به دستور <code>network rm</code> بدهید:</p>



<pre class="wp-block-code"><code>$ docker network rm demo-network</code></pre>



<p>برای حذف خودکار تمام شبکه‌های بلااستفاده، می‌توانید از دستور network prune استفاده کنید:</p>



<pre class="wp-block-code"><code>$ docker network prune</code></pre>



<h2 class="wp-block-heading" id="h-جمع-بندی">جمع‌بندی</h2>



<p>شبکه در داکر یکی از مهم‌ترین جنبه‌های این پلتفرم است که امکان ارتباط موثر و ایمن بین کانتینرها را فراهم می‌کند. داکر پنج نوع اصلی شبکه شامل bridge ،host ،overlay ،IPvLAN و macvlan را ارائه می‌دهد که هر کدام برای سناریوهای خاصی مناسب هستند. شبکه bridge به عنوان گزینه پیش‌فرض، برای اکثر کاربردها کافی است. </p>



<p>سیستم شبکه‌سازی داکر با استفاده از قابلیت‌های هسته لینوکس مانند فضاهای نام و iptables پیاده‌سازی شده و به کاربران امکان می‌دهد بدون درگیر شدن با جزئیات پیچیده، به راحتی کانتینرها را مدیریت کنند. درک صحیح و استفاده مناسب از قابلیت‌های شبکه‌سازی داکر می‌تواند به بهبود امنیت، کارایی و مقیاس‌پذیری برنامه‌های کانتینری کمک شایانی کند.</p>
<p>The post <a href="https://hamravesh.com/blog/docker-networking/">شبکه در داکر – شرح Docker Networking به زبان ساده</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/docker-networking/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>بهترین کتاب‌های آموزش داکر</title>
		<link>https://hamravesh.com/blog/docker-books/</link>
					<comments>https://hamravesh.com/blog/docker-books/#respond</comments>
		
		<dc:creator><![CDATA[ارسطو عباسی]]></dc:creator>
		<pubDate>Fri, 19 Jul 2024 15:12:07 +0000</pubDate>
				<category><![CDATA[داکر]]></category>
		<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=2697</guid>

					<description><![CDATA[<p>در این مطلب قصد داریم شما را با پنج مورد از بهترین کتاب‌های آموزش داکر آشنا کنیم که براساس تجربیات دیگران بعد از مطالعه این کتاب‌ها، به‌خوبی توانسته‌اند با داکر آشنا شده و در پروژه‌های‌شان از آن استفاده کنند.</p>
<p>The post <a href="https://hamravesh.com/blog/docker-books/">بهترین کتاب‌های آموزش داکر</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>یادگیری و آموزش <strong class="global-rtl"><a class="global-rtl" href="https://hamravesh.com/blog/what-is-docker/" target="_blank" rel="noreferrer noopener">داکر</a></strong> می‌تواند به‌ روش‌های مختلفی اتفاق بیفتد. برخی از افراد دیدن ویدیوهای آموزشی را دوست دارند، برخی دیگر ترجیح می‌دهند سراغ مستندات رسمی بروند. اما کتاب روش دیگری است که برای بسیاری از افراد جذاب بوده و یادگیری را با آن کامل‌تر و بنیادی‌تر می‌بینند.</p>



<p>با در نظر گرفتن این موضوع، در این مطلب از وبلاگ هم‌روش قصد داریم شما را با پنج مورد از بهترین کتاب‌های آموزش داکر آشنا کنیم که براساس تجربیات دیگران بعد از مطالعه این کتاب‌ها، به‌خوبی توانسته‌اند با داکر آشنا شده و در پروژه‌های‌شان از آن استفاده کنند.</p>



<h2 class="wp-block-heading" id="h-۱-the-docker-book">۱. <a href="https://dockerbook.com/" target="_blank" rel="noreferrer noopener">The Docker Book</a></h2>


<div class="wp-block-image">
<figure class="alignleft size-large is-resized"><img loading="lazy" decoding="async" width="640" height="1024" src="https://hamravesh.com/blog/wp-content/uploads/2024/05/آموزش-داکر-The-Docker-Book-640x1024.webp" alt="کتاب داکر بوک" class="wp-image-2704" style="width:204px;height:auto" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/05/آموزش-داکر-The-Docker-Book-640x1024.webp 640w, https://hamravesh.com/blog/wp-content/uploads/2024/05/آموزش-داکر-The-Docker-Book-188x300.webp 188w, https://hamravesh.com/blog/wp-content/uploads/2024/05/آموزش-داکر-The-Docker-Book-768x1229.webp 768w, https://hamravesh.com/blog/wp-content/uploads/2024/05/آموزش-داکر-The-Docker-Book-960x1536.webp 960w, https://hamravesh.com/blog/wp-content/uploads/2024/05/آموزش-داکر-The-Docker-Book-1280x2048.webp 1280w, https://hamravesh.com/blog/wp-content/uploads/2024/05/آموزش-داکر-The-Docker-Book-scaled.webp 1600w" sizes="auto, (max-width: 640px) 100vw, 640px" /></figure>
</div>


<p>اگر تا به حال چند بار شروع به یادگیری داکر کرده‌اید و نتوانسته‌اید با آن ارتباط برقرار کنید، نگران نباشید. کتاب The Docker Book با این هدف ساخته شده که به زبانی بسیار ساده و با توضیح مثال‌های مختلف، به شما داکر را آموزش دهد. </p>



<p>همچنین این کتاب برای کسانی که قصد دارند برای اولین بار وارد فرایند یادگیری داکر شوند بسیار مناسب است. </p>



<p>هر بخش از این کتاب ابتدا با توضیحات تئوری شروع می‌شود و سپس مثال‌های عملی آن را مطرح می‌کند. در نتیجه شما هم بنیاد مفهومی خوبی از داکر پیدا می‌کنید و هم می‌توانید در عمل از آن‌ها استفاده نمایید. </p>



<p>فهرست محتوایی کتاب The Docker Book شامل موضوعات متنوعی بوده که برخی از آن‌ها شامل این موارد است: مقدمه‌ای بر داکر، نصب داکر، کار با داکر ایمیج‌ها و مخازن، تستینگ با داکر، ایجاد سرویس با داکر، ارکستریشن با داکر کامپوز، کار با Docker Swarm، استفاده از Docker API و&#8230; .</p>



<h2 class="wp-block-heading" id="h-۲-docker-in-action">۲. <a href="https://www.manning.com/books/docker-in-action" target="_blank" rel="noreferrer noopener">Docker in Action</a></h2>


<div class="wp-block-image">
<figure class="alignleft size-full is-resized"><img loading="lazy" decoding="async" width="796" height="1000" src="https://hamravesh.com/blog/wp-content/uploads/2024/05/آموزش-داکر-Docker-In-Action.webp" alt="کتاب داکر این اکشن" class="wp-image-2705" style="width:212px;height:auto" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/05/آموزش-داکر-Docker-In-Action.webp 796w, https://hamravesh.com/blog/wp-content/uploads/2024/05/آموزش-داکر-Docker-In-Action-239x300.webp 239w, https://hamravesh.com/blog/wp-content/uploads/2024/05/آموزش-داکر-Docker-In-Action-768x965.webp 768w" sizes="auto, (max-width: 796px) 100vw, 796px" /></figure>
</div>


<p>همانگونه که از نام کتاب (داکر در عمل) مشخص است، در این کتاب قرار است که شما به‌صورت کاملا عملی و با استفاده از مثال‌های دنیای واقعی، داکر را یاد بگیرید.</p>



<p>در این کتاب شما با موضوعات بسیار زیادی از جمله موارد زیر آشنا خواهید شد:</p>



<p>اجرا و کانتینرسازی برنامه‌ها در محیط داکر، دیپلوی یا مستقر کردن کانتینرها، استفاده از داکرهاب برای مدیریت ایمیج‌ها، تستینگ و توزیع اپلیکیشن‌ها و&#8230; .</p>



<p>از تمام این موارد می‌توان نتیجه گرفت که اگر قصد دارید بدون مقدمه از قابلیت‌های داکر استفاده کنید و به مفاهیم تئوری نیاز چندانی ندارید می‌توانید سراغ این کتاب بروید.  </p>



<h2 class="wp-block-heading" id="h-۳-learning-docker">۳. <a href="https://www.packtpub.com/product/learning-docker-second-edition/9781786462923" target="_blank" rel="noreferrer noopener">Learning Docker</a></h2>


<div class="wp-block-image">
<figure class="alignleft size-full is-resized"><img loading="lazy" decoding="async" width="657" height="810" src="https://hamravesh.com/blog/wp-content/uploads/2024/05/cover_image_large.avif" alt="کتاب لرنینگ داکر" class="wp-image-2707" style="width:227px;height:auto"/></figure>
</div>


<p>کتاب Learning Docker مختص به توسعه‌دهندگان وب نوشته شده است. در این کتاب با استفاده از مثال‌ها و چالش‌هایی که در دنیای اپلیکیشن‌های وب وجود دارد، داکر آموزش داده می‌شود. بنابراین اگر با توسعه وب آشنایی ندارید ممکن است مثال‌های آورده شده در این کتاب برای‌تان چندان ملموس نباشد. </p>



<p>در این کتاب تمام موضوعاتی که در فرایند توسعه اپلیکیشن و نیازمندی‌های آن برای داکر وجود دارد مطرح می‌شود: از نصب داکر، استفاده از داکرفایل و کار با ایمیج‌ها تا استفاده از قابلیت‌های داکرهاب و دیپلوی کردن اپلیکیشن‌ها. </p>



<p>برای آشنایی بیشتر با این کتاب نیاز است که انتشارات Packt را نیز بررسی کنیم. این انتشارات بیشتر از اینکه هدفی برای نوشتن یک کتاب کامل و جامع داشته باشد، دنبال نوشتن کتاب‌هایی‌ست که کاربرد عملی مستقیم دارند. در نتیجه اغلب کتاب‌های انتشارات Packt سناریو محور هستند.</p>



<h2 class="wp-block-heading" id="h-۴-docker-up-and-running">۴. <a href="https://www.oreilly.com/library/view/docker-up/9781098131814/" target="_blank" rel="noreferrer noopener">Docker: Up and Running</a></h2>


<div class="wp-block-image">
<figure class="alignleft size-full is-resized"><img loading="lazy" decoding="async" width="398" height="522" src="https://hamravesh.com/blog/wp-content/uploads/2024/05/آموزش-داکر-Docker-Up-and-Running.webp" alt="کتاب داکر آپ &amp; رانینگ" class="wp-image-2708" style="width:220px;height:auto" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/05/آموزش-داکر-Docker-Up-and-Running.webp 398w, https://hamravesh.com/blog/wp-content/uploads/2024/05/آموزش-داکر-Docker-Up-and-Running-229x300.webp 229w" sizes="auto, (max-width: 398px) 100vw, 398px" /></figure>
</div>


<p>بعد از مطالعه هر کدام از ۳ کتاب قبلی، حال نیاز است که سراغ یک کتاب پیشرفته‌تر برویم. بنابراین اگر به دنبال کتابی برای یادگیری مباحث پیشرفته هستید Docker Up &amp; Running می‌تواند به نیازهای شما پاسخ دهد.</p>



<p>همانطور هم که پیداست این کتاب برای مبتدی‌ها ابداً مناسب نبوده و در نتیجه نیاز است با پیش‌زمینه‌ای مناسب از داکر سراغ این کتاب بروید. </p>



<p>در این کتاب مفاهیم و مثال‌های عملی پیچیده از دنیای داکر معرفی خواهد شد که با الهام‌گیری از چالش‌های دنیای واقعی (در سطح کلان) جمع‌آوری شده‌اند. </p>



<h2 class="wp-block-heading" id="h-۵-docker-deep-dive-by-nigel-poulton">۵. <a href="https://www.amazon.com/Nigel-Poulton-ebook/dp/B01LXWQUFF" target="_blank" rel="noreferrer noopener">Docker Deep Dive by Nigel Poulton</a></h2>


<div class="wp-block-image">
<figure class="alignleft size-full is-resized"><img loading="lazy" decoding="async" width="396" height="522" src="https://hamravesh.com/blog/wp-content/uploads/2024/05/آموزش-داکر-Docker-Deep-Dive.webp" alt="کتاب داکر دیپ دایو" class="wp-image-2706" style="width:215px;height:auto" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/05/آموزش-داکر-Docker-Deep-Dive.webp 396w, https://hamravesh.com/blog/wp-content/uploads/2024/05/آموزش-داکر-Docker-Deep-Dive-228x300.webp 228w" sizes="auto, (max-width: 396px) 100vw, 396px" /></figure>
</div>


<p>اگر به مطالعه بسیار عمیق یک تکنولوژی علاقه‌مند هستید و دوست دارید که دانش‌تان از آن تکنولوژی به حد اعلای خود برسد باید سراغ مجموعه کتاب‌های Deep Dive بروید. خوشبختانه این انتشارات برای داکر نیز کتاب Docker Deep Dive را معرفی کرده که در واقع از سیر تا پیاز داکر را آموزش می‌دهد. </p>



<p>از آنجایی که این کتاب جامع‌ترین کتاب داکر به حساب می‌آید می‌توان هم در سطح مبتدی و هم در سطح پیشرفته از آن استفاده کرد. بسیاری از متخصصان داکر از این کتاب به‌عنوان دیکشنری استفاده می‌کنند. به این معنا که اگر به چالشی برخورد کردند و نتوانستند در جایی راه‌حلی را پیدا کنند سراغ این کتاب می‌روند. </p>



<p>یکی از مشکلات این کتاب برای افراد مبتدی این است که بسیار جامع بوده و برای افرادی که می‌خواهند به سرعت حداقلی از داکر را یاد بگیرند بسیار خسته‌کننده خواهد بود.</p>



<h2 class="wp-block-heading" id="h-در-پایان">در پایان</h2>



<p>داکر از جمله مهمترین ابزارهای حوزه DevOps است که به مدیریت و استقرار اپلیکیشن‌ها کمک می‌کند. با در نظر گرفتن اینکه روش‌های مختلفی برای یادگیری داکر وجود دارد در این مطلب سعی کردیم تا شما را با ۵ مورد از بهترین کتاب‌های آموزشی داکر آشنا کنیم که براساس تجربیات دیگران، از مناسب‌ترین کتاب‌های حوزه داکر به‌شمار می‌روند. </p>
<p>The post <a href="https://hamravesh.com/blog/docker-books/">بهترین کتاب‌های آموزش داکر</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/docker-books/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>تفاوت داکر و کوبرنتیز</title>
		<link>https://hamravesh.com/blog/docker-vs-kubernetes/</link>
					<comments>https://hamravesh.com/blog/docker-vs-kubernetes/#respond</comments>
		
		<dc:creator><![CDATA[ارسطو عباسی]]></dc:creator>
		<pubDate>Wed, 29 May 2024 07:26:21 +0000</pubDate>
				<category><![CDATA[داکر]]></category>
		<category><![CDATA[مقالات]]></category>
		<category><![CDATA[کوبرنتیز]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=2327</guid>

					<description><![CDATA[<p>با درک تفاوت‌های میان داکر و کوبرنتیز می‌توانیم فهم درست‌تری از هر کدام این تکنولوژی‌ها داشته باشیم. هدف این مطلب یافتن درک درست از تفاوت‌های این دو ابزار است.</p>
<p>The post <a href="https://hamravesh.com/blog/docker-vs-kubernetes/">تفاوت داکر و کوبرنتیز</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>در مقابل همدیگر قرار دادن دو ابزار، همواره به این معنا نیست که ما در نهایت یک برنده و یک بازنده داشته باشیم. در بسیاری از موارد، با مقایسه کردن دو ابزار، می‌توانیم درک بهتری از چیستی هر‌کدام و مرزبندی کاربردهای آن‌ها داشته باشیم. این دقیقا هدفی‌ست که ما در این مطلب از وبلاگ هم‌روش به دنبال آن هستیم. </p>



<p><strong><a href="https://hamravesh.com/blog/what-is-docker/" target="_blank" rel="noreferrer noopener">داکر</a></strong> و کوبرنتیز دو ابزار بسیار مهم و ضروری در توسعه و استقرار <strong>نرم‌افزارهای امروزی</strong> هستند و نادیده گرفتن هرکدام از این موارد در فرایند ساخت یک اپلیکیشن، ممکن است به ضررتان تمام شود.</p>



<h2 class="wp-block-heading" id="h-تفاوت-داکر-و-کوبرنتیز-در-چیست">تفاوت‌ داکر و کوبرنتیز در چیست؟</h2>



<p>ما در کنار هرکدام از اسامی داکر و کوبرنتیز دو عنوان دیگر را نیز می‌شنویم: کانتینر و <strong class="global-rtl"><a class="global-rtl" href="https://hamravesh.com/blog/what-is-orchestration/">ا</a></strong><strong><a class="global-rtl" href="https://hamravesh.com/blog/what-is-orchestration/">ُ</a></strong><strong class="global-rtl"><a class="global-rtl" href="https://hamravesh.com/blog/what-is-orchestration/">رکستریشن</a></strong>. کانتینر همواره با عنوان داکر جفت بوده و ارکستریشن نیز در کنار کوبرنتیز استفاده می‌شود. تفاوت اصلی داکر و کوبرنتیز نیز دقیقا در همین دو عنوان است.</p>



<p><strong class="global-rtl">کانتینرها</strong> را مانند بسته‌هایی در نظر بگیرید که تمام نیازمندی‌های لازم برای اجرا یک اپلیکیشن را در خود نگهداری می‌کنند. برای مثال تصور کنید که شما اپلیکیشنی تحت عنوان x نوشته‌اید و برای اجرا کردن آن نیاز است که روی سیستم‌عامل میزبان، آخرین نسخه پایتون، جنگو، MySQL و Kafka نصب شده باشد. در این حالت شما نیاز دارید که تمام این ابزارها را به‌صورت تک‌به‌تک روی سیستم‌عامل نصب و پیکربندی کنید. حقیقتا انجام چنین کاری، سخت و اشتباه‌پذیر است.</p>



<p>کانتینرها که توسط داکر ایجاد می‌شوند در حل این مشکل به شما کمک خواهند کرد. در واقع زمانی که شما پروژه x را توسعه می‌دهید، می‌توانید آن را به همراه تمام نیازمندی‌ها (پایتون، جنگو، MySQL و Kafka) درون یک پکیج یا بسته قرار داده و با استفاده از یک دستور به‌صورت کامل روی سیستم‌عامل میزبان اجرا کنید. </p>



<p>بنظر همه چیز به‌خوبی پیش‌ می‌رود، پس چرا به ابزار دیگری مانند <strong class="global-rtl"><a href="https://hamravesh.com/blog/what-is-kubernetes/" target="_blank" rel="noreferrer noopener">کوبرنتیز</a></strong> برای ارکستریشن نیاز داریم؟ زمانی که اپلیکیشن شما بزرگ شود و یا در توسعه آن از معماری میکروسرویس استفاده کنید، نیاز دارید که کانتینرهای بیشتری را ایجاد کنید و مدیریت تعداد زیادی از کانتینرها واقعا کار دشواری است.</p>



<p>به همین دلیل است که در کنار داکر نیاز است که از کوبرنتیز نیز استفاده کنیم. در نتیجه این دو مکمل یکدیگر هستند. البته داکر ابزاری مشابه با کوبرنتیز با نام <strong><a href="https://docs.docker.com/engine/swarm/" target="_blank" rel="noreferrer noopener">Docker Swarm</a></strong> ارائه کرده که البته در مقایسه با کوبرنتیز در انجام بسیاری از کارها ناتوان است.</p>



<p>حال برای اینکه به صورت خلاصه و البته ساده‌تر تفاوت میان داکر و کوبرنتیز را به شما نشان دهیم، یک جدول کُلی از این تفاوت‌ها را آماده کرده‌ایم: <em>(البته هر بخش می‌تواند شامل موضوعات مختلف دیگری نیز باشد اما این جدول تنها برای آشنایی اولیه است)</em></p>



<figure class="wp-block-table alignright"><table class="has-fixed-layout"><thead><tr><th></th><th>کوبرنتیز</th><th>داکر</th></tr></thead><tbody><tr><td><strong>استفاده‌ و کاربرد اصلی</strong></td><td>کوبرنتیز یک سیستم ارکستریشن برای اجرا کانتینرهاست. با استفاده از کوبرنتیز می‌توان پروسه‌هایی مانند دیپلوی کردن، مدیریت و مقیاس‌دهی به اپلیکیشن‌های کانتینرسازی شده را خودکارسازی کرد. </td><td>داکر پلتفرمی برای ایجاد کانتینرهاست. اپلیکیشن‌های کانتینرسازی شده با استفاده از داکر می‌توانند به صورت دستی و یا توسط ابزارهای ارکستریشن اجرا شوند. </td></tr><tr><td><strong class="global-rtl">چه چالشی را حل می‌ک</strong><strong>ند؟</strong></td><td>زمانی از کوبرنتیز استفاده می‌شود که اپلیکیشن‌‌ها به کانتینرهای مختلفی تبدیل شده و مدیریت کانتینرها با تعداد زیاد، چالش‌برانگیز و سخت می‌شود.</td><td>زمانی که قصد Build و تست اپلیکیشن داشته باشیم و بخواهیم که به سادگی اپلیکیشن در هر محیطی اجرا شود، از داکر استفاده می‌کنیم. البته دلایل بسیار بیشتری برای این موضوع می‌توان عنوان کرد.</td></tr><tr><td><strong>چگونه کار می‌کند؟</strong></td><td>کوبرنتیز، کانتینرهای مختلفی که مرتبط با یک اپلیکیشن هستند را در کنار همدیگر قرار می‌دهد. هر کانتینر ممکن است چندین نمونه از خود داشته باشد، در نتیجه اگر چندین درخواست برای یک سرویس ارسال شود، کوبرنتیز می‌تواند درخواست‌ها را بین نمونه‌های (Replica) مختلف توزیع کند. بررسی سلامت و درست عمل کردن هر کدام از این سرویس‌ها نیز برعهده کوبرنتیز خواهد بود.</td><td>کانتینرها شامل کدبیس اپلیکیشن و تمام نیازمندی‌های آن است. در نتیجه مهم نیست که روی سیستم‌عامل میزبان نیازمندی‌های شما نصب شده باشد یا نه، با اجرا کردن کانتینر، اپلیکیشن شما نیز به درستی اجرا خواهد شد.</td></tr></tbody></table></figure>



<p>برای درک هرچه بهتر هرکدام از این ابزارها نیاز است که با اصلی‌ترین کاربردها و فواید آن‌ها آشنا شویم. به همین دلیل در ادامه مطلب به صورت جداگانه، با فواید و کاربردهای داکر و کوبرنتیز آشنا خواهیم شد.</p>



<h2 class="wp-block-heading" id="h-فواید-و-کاربردهای-داکر">فواید و کاربردهای داکر</h2>



<ul class="wp-block-list">
<li><strong class="global-rtl">حمل‌پذیری یا Portability</strong>: یکی از اصلی‌ترین کاربردهای داکر قابلیت اجرا کردن اپلیکیشن‌ها در هر سیستم‌عاملی بدون در نظر گرفتن نصب شدن وابستگی‌هاست. در نتیجه شما به آسانی می‌توانید نرم‌افزارتان را بدون دردسر در هر محیطی به سادگی نصب کرده و بدون نگرانی از درست اجرا نشدن برای هم‌تیمی‌های‌تان ارسال کنید. </li>



<li><strong>محیط ایزوله</strong>: داکر به توسعه‌دهندگان امکان فراهم کردن محیط‌های ایزوله برای برنامه‌ها را می‌دهد. این به این معنی است که هر برنامه و تمام وابستگی‌هایش در یک کانتینر جداگانه قرار می‌گیرند، که از تداخل با برنامه‌ها و سرویس‌های دیگر جلوگیری می‌کند.</li>



<li><strong class="global-rtl">مدیریت منابع بهینه</strong>: داکر به مدیران سیستم امکان مدیریت بهینه منابع را می‌دهد. با استفاده از داکر، می‌توان برنامه‌ها را در بسترهای مختلف اجرا کرد و منابع را به‌صورت بهینه مدیریت کرد.</li>



<li><strong>استقرار سریع</strong>: استقرار برنامه‌ها با داکر بسیار ساده و سریع است. این به توسعه‌دهندگان اجازه می‌دهد که برنامه‌هایشان را با کمترین زمان ممکن در محیط تولیدی (Production) قرار دهند.</li>
</ul>



<h2 class="wp-block-heading" id="h-فواید-و-کاربردهای-کوبرنتیز">فواید و کاربردهای کوبرنتیز</h2>



<ul class="wp-block-list">
<li><strong>استقرار و مدیریت کانتینرها</strong>: کوبرنتیز به توسعه‌دهندگان امکان مدیریت و استقرار برنامه‌های کانتینری را در محیط‌های بزرگ و پیچیده فراهم می‌کند. این به مدیران امکان مدیریت هزاران کانتینر در یک سیستم را می‌دهد.</li>



<li><strong class="global-rtl">مقیاس‌پذیری</strong>: کوبرنتیز به سادگی امکان مقیاس‌پذیری برنامه‌ها را فراهم می‌کند. با افزایش بار کاری، می‌توان منابع را به صورت خودکار افزایش داد و سپس پس از کاهش بار کاری، مقدار آن‌ها را کاهش داد.</li>



<li><strong>خودکارسازی</strong>: کوبرنتیز ابزارهایی برای خودکارسازی فرایندهای مدیریتی و عملیاتی در محیط کانتینری فراهم می‌کند. خودکارسازی این امکان را فراهم می‌کند تا فرایندهایی مانند استقرار، مقیاس‌پذیری و پایش به صورت خودکار انجام شوند و نیازی به مدیریت دستی نباشد.</li>



<li><strong class="global-rtl">امنیت</strong><strong>: </strong>کوبرنتیز با ایجاد قابلیت‌هایی مانند <strong class="global-rtl">دسترسی مبتنی بر نقش، ایزوله‌سازی شبکه‌ای و اسکن ایمیج‌ه</strong><strong>ا </strong>به امنیت بیشتر اپلیکیشن‌های شما کمک خواهد کرد. </li>



<li><strong>اطمینان از پایداری و قابلیت اطمینان</strong>: کوبرنتیز به دلیل معماری توزیع‌شده و ابزارهای مدیریت شبکه، اطمینان از پایداری و قابلیت اطمینان بالایی برای برنامه‌های کانتینری فراهم می‌کند.</li>
</ul>



<h2 class="wp-block-heading" id="h-در-پایان">در پایان</h2>



<p>اگر به دنبال انتخاب یک برنده میان این دو ابزار بودید، ببخشید که ناامیدتان کردیم! اما مهمترین قضیه‌ای که باید یاد بگیریم این است که داکر و کوبرنتیز رقیب یکدیگر نیستند، بلکه همدیگر را کامل می‌کنند. هدف این مطلب در نهایت پیدا کردن درک درستی از چگونه کار کردن هر کدام از این موارد و سناریوهای استفاده‌های آن‌ها بود. امید است که این موضوع را به خوبی یاد گرفته باشیم. </p>
<p>The post <a href="https://hamravesh.com/blog/docker-vs-kubernetes/">تفاوت داکر و کوبرنتیز</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/docker-vs-kubernetes/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>کاربردهای داکر</title>
		<link>https://hamravesh.com/blog/docker-usecases/</link>
					<comments>https://hamravesh.com/blog/docker-usecases/#respond</comments>
		
		<dc:creator><![CDATA[ارسطو عباسی]]></dc:creator>
		<pubDate>Mon, 13 May 2024 13:35:28 +0000</pubDate>
				<category><![CDATA[داکر]]></category>
		<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=2212</guid>

					<description><![CDATA[<p>در این مطلب شما را با اصلی‌ترین کاربردها و استفاده‌های داکر آشنا می‌کنیم و همچنین شرکت‌هایی که از داکر استفاده می‌کنند را معرفی خواهیم کرد. </p>
<p>The post <a href="https://hamravesh.com/blog/docker-usecases/">کاربردهای داکر</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>داکر (Docker) یک پلتفرم نرم‌افزاری است که فرایند ساخت، اجرا و مدیریت برنامه‌ها را در محیط‌های جداگانه‌ای به نام کانتینرها ساده می‌کند. کانتینرها اجازه می‌دهند که برنامه به همراه تمام وابستگی‌هایش در یک بسته واحد بسته‌بندی شود. در نتیجه برنامه به شکلی یکنواخت و بدون نیاز به تنظیمات اضافی در هر محیطی اجرا می‌شود.</p>



<p><strong><a class="global-rtl" href="https://hamravesh.com/blog/what-is-docker/" target="_blank" rel="noreferrer noopener">داکر </a></strong>با ارائه‌ رویکردی استاندارد برای بسته‌بندی و توزیع نرم‌افزار، تحولی بزرگ در فرایند توسعه نرم‌افزار ایجاد کرده است. با استفاده از داکر، توسعه‌دهندگان می‌توانند نرم‌افزارهای خود را به سرعت در محیط‌های مختلف از جمله محیط توسعه، آزمایش و پروداکشن بدون نگرانی در مورد تفاوت‌های محیطی اجرا کنند. این امر، سرعت و کارایی فرایندهای توسعه را افزایش داده و اطمینان می‌دهد که برنامه‌ها با حداقل خطا و وابستگی به زیرساخت اجرا می‌شوند.</p>



<p>با توجه به این مقدمات، امروز در این مطلب از وبلاگ‌ هم‌روش قصد داریم شما را با اصلی‌ترین کاربردهای داکر آشنا کرده و به صورت دقیق متوجه شویم که در چه حالت‌هایی می‌توانیم از داکر استفاده کنیم.&nbsp;</p>



<h2 class="wp-block-heading" id="h-کاربرد-اول-ایجاد-محیط-های-توسعه-یکنواخت">کاربرد اول: ایجاد محیط‌های توسعه یکنواخت</h2>



<p>داکر اجازه می‌دهد تا توسعه‌دهندگان با استفاده از کانتینرها، محیط‌های توسعه‌ای را ایجاد کنند که کاملاً قابل انتقال و یکپارچه هستند. با استفاده از فایل‌های <code>Dockerfile</code>، توسعه‌دهندگان می‌توانند تنظیمات و وابستگی‌های دقیق مورد نیاز برای اجرای برنامه‌های خود را تعریف کنند. این امکان، تضمین می‌کند که هر عضوی از تیم، بدون توجه به سیستم‌عامل یا تنظیمات محلی خود، بتواند برنامه را در شرایطی مشابه اجرا کند.</p>



<p>داکر همچنین به تیم‌های توسعه امکان می‌دهد تا محیط‌های آزمایشی را به سرعت و با دقت بالا ایجاد و مدیریت کنند. این کار با استفاده از کانتینرهایی که می‌توانند به سادگی ایجاد و حذف شوند، انجام می‌پذیرد. توانایی سریع برای تنظیم و ریست کردن محیط‌های آزمایشی، فرآیند توسعه را سریع‌تر و کارآمدتر می‌کند، و اطمینان می‌دهد که آزمایش‌ها در محیط‌هایی انجام می‌شوند که به دقت، محیط تولید را شبیه‌سازی می‌کنند.</p>



<h2 class="wp-block-heading" id="h-کاربرد-دوم-ساده-سازی-مدیریت-میکروسرویس-ها">کاربرد دوم: ساده‌سازی مدیریت میکروسرویس‌ها</h2>



<p>داکر و معماری میکروسرویس هر دو نقش مهمی در تغییر و تحول صنعت توسعه نرم‌افزار داشته‌اند. این دو تکنولوژی، هرچند مستقل از یکدیگر هستند، اما وقتی با هم استفاده شوند، می‌توانند اثربخشی بسیار بالایی در بهبود فرآیندهای توسعه و عملیات نرم‌افزار داشته باشند.</p>



<p>معماری میکروسرویس به توسعه نرم‌افزار به صورت مجموعه‌ای از سرویس‌های کوچک و مستقل اشاره دارد که هر کدام می‌توانند به طور جداگانه توسعه یافته، مستقر و مدیریت شوند. این رویکرد به تیم‌ها امکان می‌دهد تا بر روی بخش‌های کوچکتری از یک برنامه تمرکز کنند، که این امر سرعت توسعه را افزایش می‌دهد و انعطاف‌پذیری بیشتری در مدیریت و نگهداری نرم‌افزار فراهم می‌کند.</p>



<p>امکانات و ویژگی‌هایی که داکر ارائه می‌دهد باعث شده تا فرایند توسعه معماری میکروسرویس ساده‌تر و مدیریت‌پذیرتر شود. در ادامه با برخی از اصلی‌ترین مزایا داکر برای معماری میکروسرویس آشنا خواهیم شد:</p>



<ul class="wp-block-list">
<li><strong>سهولت در بسته‌بندی و توزیع</strong>: داکر به توسعه‌دهندگان اجازه می‌دهد تا هر میکروسرویس را به طور مستقل بسته‌بندی و توزیع کنند، که این امر فرآیند توسعه را ساده‌تر می‌کند.</li>



<li><strong>یکنواختی محیط</strong>: کانتینرها اطمینان می‌دهند که نرم‌افزار در هر محیطی به یک شکل اجرا می‌شود، که این امر به حل مشکل «<strong>رو دستگاه من کار می‌کرد نمی‌دونم چرا رو کامپیوتر تو کار نمی‌کنه</strong>» کمک می‌کند.</li>



<li><strong>مقیاس‌پذیری و انعطاف‌پذیری</strong>: داکر امکان مدیریت و مقیاس‌پذیری هر میکروسرویس را به طور جداگانه فراهم می‌آورد، که این امر انعطاف‌پذیری بالایی را در مدیریت منابع و پاسخ به نیازهای تغییرپذیر برنامه‌ها می‌دهد.</li>



<li><strong>سرعت دیپلویمنت</strong>: کانتینرها سریع‌تر از ماشین‌های مجازی راه‌اندازی می‌شوند، که این امر به سرعت بخشیدن به فرآیند دیپلویمنت و تست سریع‌تر تغییرات کمک می‌کند.</li>
</ul>



<h2 class="wp-block-heading">کاربرد سوم: داکر و توسعه وب</h2>



<p>یکی از چالش‌های اصلی در فرایند توسعه اپلیکیشن‌های مبتنی بر وب، وجود کتابخانه‌های زیادی است که در بیشتر پروژه‌ها استفاده می‌شود. نصب و پیکربندی این کتابخانه‌ها در محیط‌های مختلف کاری تکراری و زمان‌بر است. داکر در حل این مشکل می‌تواند به‌خوبی عمل کند.  </p>



<p>داکر نقش بسزایی در تسهیل و بهبود فرآیندهای توسعه وب دارد. استفاده از داکر در توسعه وب، به توسعه‌دهندگان امکان می‌دهد تا با اطمینان بیشتری بر روی برنامه‌های خود کار کنند، زیرا داکر از مزایای متعددی برخوردار است که به حل مشکلات رایج در توسعه وب کمک می‌کند. در اینجا به برخی از این مزایا و کاربردهای داکر در توسعه وب می‌پردازیم:</p>



<ul class="wp-block-list">
<li><strong>سهولت در مدیریت وابستگی‌ها: </strong>داکر به توسعه‌دهندگان اجازه می‌دهد تا کل محیط توسعه وب خود را در یک کانتینر بسته‌بندی کنند، این امر شامل نرم‌افزارهای جانبی، کتابخانه‌ها، و وابستگی‌های خاص پروژه می‌شود.</li>
</ul>



<ul class="wp-block-list">
<li><strong>تسریع در زمان توسعه</strong>: با استفاده از داکر، توسعه‌دهندگان می‌توانند برنامه‌های کاربردی وب را سریع‌تر توسعه دهند. کانتینرها در چند ثانیه راه‌اندازی می‌شوند، که این امر به سرعت بخشیدن به تست‌ها و دیپلویمنت کمک می‌کند. همچنین، توسعه‌دهندگان می‌توانند از کانتینرهای داکر برای تست برنامه‌های خود در محیط‌های متفاوت استفاده کنند.</li>
</ul>



<ul class="wp-block-list">
<li><strong class="global-rtl">افزایش چابکی و انعطاف‌پذیری:</strong> داکر توسعه وب را چابک‌تر و انعطاف‌پذیرتر می‌کند. توسعه‌دهندگان می‌توانند به سرعت کانتینرها را ایجاد، کپی، جابجا و حذف کنند، که این امر به آن‌ها امکان می‌دهد تا بر روی نوآوری و بهبود مستمر برنامه‌های خود تمرکز کنند.</li>
</ul>



<ul class="wp-block-list">
<li><strong>مقیاس‌پذیری و عملکرد</strong>: کانتینرهای داکر به توسعه‌دهندگان اجازه می‌دهند تا برنامه‌های کاربردی وب خود را به طور موثر مقیاس‌بندی کنند. همچنین با استفاده از ابزارهای مدیریت کانتینر مانند <strong><a href="https://hamravesh.com/blog/what-is-kubernetes/" target="_blank" rel="noreferrer noopener">Kubernetes</a></strong>، می‌توان برنامه‌ها را بر اساس تقاضا مقیاس‌بندی کرد، که این امر به بهبود عملکرد و قابلیت اطمینان کمک می‌کند.</li>
</ul>



<h2 class="wp-block-heading">کاربرد چهارم: استفاده بهینه از منابع در پردازش ابری</h2>



<p>داکر و پردازش ابری دو تکنولوژی مکمل هستند که وقتی با هم ترکیب می‌شوند، قابلیت‌های قدرتمندی برای توسعه، استقرار، و مدیریت برنامه‌های کاربردی در مقیاس بزرگ ایجاد می‌کنند. داکر، با فراهم‌آوری ابزارهایی برای بسته‌بندی برنامه‌ها در کانتینرها، به توسعه‌دهندگان امکان می‌دهد تا برنامه‌های خود را به راحتی در هر محیط ابری مستقر کنند. در این بخش، به بررسی نحوه همکاری بین داکر و پردازش ابری و مزایای آن می‌پردازیم.</p>



<h3 class="wp-block-heading">سهولت در مستقرسازی و مهاجرت</h3>



<ul class="wp-block-list">
<li><strong>قابلیت حمل</strong>: کانتینرهای داکر می‌توانند بدون تغییر در هر محیط ابری اجرا شوند، این امر سهولت بی‌نظیری در مهاجرت برنامه‌ها از محیط توسعه به محیط تولید و بین ابرهای مختلف فراهم می‌کند.</li>



<li><strong>یکپارچگی</strong>: اکثر ارائه‌دهندگان خدمات ابری، پشتیبانی بومی برای کانتینرهای داکر را ارائه می‌دهند، که این امر مستقرسازی و مدیریت برنامه‌ها را تسهیل می‌کند.</li>
</ul>



<h3 class="wp-block-heading">بهینه‌سازی منابع</h3>



<ul class="wp-block-list">
<li><strong>کارایی بالا</strong>: کانتینرها منابع سیستم را به طور موثرتری نسبت به ماشین‌های مجازی استفاده می‌کنند. این امر به کاهش هزینه‌های زیرساختی در محیط‌های ابری کمک می‌کند.</li>



<li><strong>مقیاس‌پذیری</strong>: داکر به همراه خدمات ابری امکان مدیریت آسان و مقیاس‌پذیری برنامه‌ها را فراهم می‌آورد، به طوری که تیم‌ها می‌توانند بر اساس نیاز، به سرعت منابع را افزایش یا کاهش دهند.</li>
</ul>



<h3 class="wp-block-heading">افزایش امنیت</h3>



<ul class="wp-block-list">
<li><strong>عایق‌بندی</strong>: کانتینرها برنامه‌ها را از یکدیگر و از میزبان جدا نگه می‌دارند، که این امر به کاهش خطر آسیب‌پذیری‌های امنیتی کمک می‌کند.</li>



<li><strong>به‌روزرسانی‌های امنیتی آسان‌تر</strong>: مدیریت نسخه و به‌روزرسانی‌های امنیتی در محیط‌های کانتینری نسبت به سیستم‌های سنتی آسان‌تر است.</li>
</ul>



<h2 class="wp-block-heading" id="h-کاربرد-پنجم-ادغام-و-تحویل-مداوم">کاربرد پنجم: ادغام و تحویل مداوم</h2>



<p>داکر در ادغام و تحویل مداوم (<strong><a href="https://hamravesh.com/blog/what-is-ci-cd/" target="_blank" rel="noreferrer noopener">CI/CD</a></strong>) نقش کلیدی ایفا می‌کند. با استفاده از کانتینرها، تیم‌های توسعه می‌توانند برنامه‌های خود را به صورت خودکار بسازند، آزمایش و منتشر کنند (Build &#8211; Test &#8211; Release). این فرآیند اطمینان حاصل می‌کند که هر تغییری به سرعت و به طور موثر ارزیابی و اعمال می‌شود، در نتیجه سرعت عرضه نرم‌افزار به بازار را افزایش می‌دهد و کیفیت نهایی محصول را بهبود می‌بخشد.</p>



<h2 class="wp-block-heading" id="h-شرکت-هایی-که-از-داکر-استفاده-می-کنند">شرکت‌هایی که از داکر استفاده می‌کنند</h2>



<p>شرکت‌های زیادی از جمله استارت‌آپ‌ها و شرکت‌های بزرگ فناوری در جهان از داکر استفاده می‌کنند. برخی از معروف‌ترین شرکت‌هایی که از داکر استفاده می‌کنند عبارتند از:</p>



<ol class="wp-block-list">
<li><strong><a href="https://www.wired.com/2014/06/eric-brewer-google-docker/">گوگل </a></strong>&#8211; برای اجرای برخی از سرویس‌های ابری و زیرساخت‌های خود.</li>



<li><strong>آمازون وب سرویس‌ها (AWS)</strong> &#8211; ارائه خدمات کانتینر به مشتریان خود با استفاده از داکر.</li>



<li><strong>مایکروسافت</strong> &#8211; ادغام داکر با ویندوز سرور و ارائه سرویس‌های کانتینری در اژور.</li>



<li><strong>اینتل</strong> &#8211; استفاده از داکر برای بهینه‌سازی برنامه‌های نرم‌افزاری و سرویس‌های ابری.</li>



<li><strong>پی‌پل</strong> &#8211; استفاده از داکر برای افزایش کارایی و امنیت در تراکنش‌های مالی.</li>



<li><strong>ادوبی</strong> &#8211; استفاده از داکر برای مدیریت زیرساخت‌های ابری و سرویس‌های نرم‌افزاری</li>
</ol>



<h2 class="wp-block-heading" id="h-جمع-بندی">جمع‌بندی</h2>



<p>داکر در حال حاضر یکی از ضروری‌ترین ابزارهای حوزه دوآپس و توسعه نرم افزار بوده و شرکت‌ها و استارتاپ‌های بسیار زیادی در حوزه‌های مختلف از این تکنولوژی استفاده می‌کنند. در این مطلب از وبلاگ هم‌روش سعی کردیم تا شما را با اصلی‌ترین کاربردها و استفاده‌های داکر آشنا کنیم. </p>
<p>The post <a href="https://hamravesh.com/blog/docker-usecases/">کاربردهای داکر</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/docker-usecases/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>آموزش گام‌به‌گام نصب داکر روی ویندوز</title>
		<link>https://hamravesh.com/blog/install-docker-on-windows/</link>
					<comments>https://hamravesh.com/blog/install-docker-on-windows/#respond</comments>
		
		<dc:creator><![CDATA[ارسطو عباسی]]></dc:creator>
		<pubDate>Fri, 22 Mar 2024 12:31:24 +0000</pubDate>
				<category><![CDATA[داکر]]></category>
		<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=2055</guid>

					<description><![CDATA[<p>برای استفاده از داکر در محیط سیستم عامل ویندوز نیاز است که Docker Desktop را نصب کنید. در این مطلب قصد داریم به صورت کامل با فرایند نصب داکر آشنا شویم.</p>
<p>The post <a href="https://hamravesh.com/blog/install-docker-on-windows/">آموزش گام‌به‌گام نصب داکر روی ویندوز</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>در مطالب قبلی با شیوه <strong><a href="https://hamravesh.com/blog/install-docker-ubuntu/" target="_blank" rel="noreferrer noopener">نصب داکر روی توزیع اوبونتو</a></strong> آشنا شدیم و حال در این مطلب قصد داریم با شیوه نصب داکر روی سیستم عامل ویندوز آشنا شویم. برای این‌کار از <strong><a href="https://docs.docker.com/desktop/install/windows-install/" target="_blank" rel="noreferrer noopener">مستندات رسمی داکر</a></strong> استفاده خواهیم کرد و براساس آن، استانداردترین روش ممکن برای نصب داکر روی ویندوز را آموزش خواهیم داد. </p>



<p>برای نصب داکر روی ویندوز ما از Docker Desktop استفاده خواهیم کرد. در حال حاضر این تنها روشی است که توسط خود داکر پشتیبانی و البته پیشنهاد می‌شود. </p>



<h2 class="wp-block-heading" id="h-نیازمندی-های-سیستم">نیازمندی‌های سیستم</h2>



<p>قدم اول برای نصب داکر روی ویندوز بررسی نیازمندی‌های سیستمی آن است. براساس این اطلاعات می‌توانید متوجه شوید که آیا کامپیوتر شما برای نصب داکر آماده است یا خیر؟</p>



<p>نیازمندی‌های ما برای نصب داکر دسکتاپ عبارت از موارد زیر است:</p>



<ul class="wp-block-list">
<li>فعال بودن WSL (نسخه 1.1.3.0 یا بالاتر) &#8211; همچنین فعال بودن قابلیت Virtualization در قسمت BIOS سیستم</li>



<li>ویندوز 11 یا 10 &#8211; نسخه ۶۴ بیتی</li>



<li>۴ گیگابایت RAM</li>
</ul>



<p><em>نکته: برای نصب داکر ما هم می‌توانیم از طریق WSL اقدام کنیم و هم Hyper-V. اینکه از چه حالتی استفاده کنید به نیازمندی‌های شما بستگی دارد. اما روش پیشنهادی استفاده از WSL یا همان Windows Subsystem for Linux است. </em></p>



<p>برای فعال کردن WSL روی ویندوز کافی‌ست Turn windows features on or off را در قسمت Search ویندوز جستجو کرده و گزینه Windows Subsystem for Linux را فعال کنید. بعد از کلیک روی گزینه OK از شما درخواست می‌شود که سیستم را راه‌اندازی کنید. در نهایت WSL شما فعال شد. برای مطالعه بیشتر این موضوع می‌توانید به <a href="https://learn.microsoft.com/en-us/windows/wsl/install" target="_blank" rel="noreferrer noopener">مستندات رسمی مایکروسافت</a> مراجعه کنید.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="409" height="585" src="https://hamravesh.com/blog/wp-content/uploads/2024/02/WSL.png" alt="" class="wp-image-2057" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/02/WSL.png 409w, https://hamravesh.com/blog/wp-content/uploads/2024/02/WSL-210x300.png 210w" sizes="auto, (max-width: 409px) 100vw, 409px" /></figure>
</div>


<h2 class="wp-block-heading" id="h-نصب-docker-desktop-روی-ویندوز">نصب Docker Desktop روی ویندوز </h2>



<p>برای نصب داکر دسکتاپ روی ویندوز، دو روش وجود دارد. استفاده از نسخه نصبی و خط فرمان. مزیتی بین این دو حالت وجود نداشته و با هر حالتی که راحت هستید می‌توانید پیش بروید.</p>



<h3 class="wp-block-heading has-medium-font-size" id="h-نصب-داکر-دسکتاپ-نسخه-نصبی">نصب داکر دسکتاپ &#8211; نسخه نصبی</h3>



<ol class="wp-block-list">
<li>ابتدا آخرین نسخه داکر دسکتاپ را از طریق <strong><a href="https://docs.docker.com/desktop/release-notes/" target="_blank" rel="noreferrer noopener">این لینک</a></strong> دانلود کنید.</li>



<li>پس از دانلود، آن را اجرا کنید و مراحل نصب را پیش ببرید. به صورت پیشفرض داکر در مسیر <code>C:\Program Files\Docker\Docker</code> نصب می‌شود.</li>



<li>در مرحله‌ای از فرایند نصب از شما پرسیده می‌شود که بین WSL 2‌ و Hyper-V کدام حالت را انتخاب می‌کنید. WSL 2 را انتخاب کرده و به مسیرتان ادامه دهید. اگر روی سیستم شما تنها یکی از این دو حالت فعال باشد، داکر از شما این سوال را نخواهد پرسید. </li>
</ol>



<p>اگر کاربری که قرار است از داکر استفاده کند غیر از کاربر ادمین است، نیاز است که کاربر مورد نظر را به گروه docker-users اضافه کنید. برای اینکار موارد زیر را انجام دهید:</p>



<p>۱. به عنوان کاربر administrator وارد Computer Managment شوید.</p>



<p>۲. وارد مسیر زیر شوید:</p>



<pre class="wp-block-code"><code><code><strong>&nbsp;Local Users and Groups&nbsp;&gt;&nbsp;Groups&nbsp;&gt;&nbsp;docker-users</strong></code></code></pre>



<p>۳. روی docker-users کلیک راست کرده و Add to Group را انتخاب کنید. </p>



<p>۴. حال کاربر مورد نظر را انتخاب و اضافه کرده و در نهایت سیستم را Restart کنید. </p>



<h3 class="wp-block-heading has-medium-font-size" id="h-نصب-داکر-دسکتاپ-خط-فرمان">نصب داکر دسکتاپ &#8211; خط فرمان</h3>



<p>برای نصب داکر دسکتاپ از طریق خط فرمان، ابتدا نیاز دارید که فایل نصبی گفته شده را دانلود کنید و سپس دستور زیر را اجرا نمایید:</p>



<p>اگر از PowerShell استفاده می‌کنید دستور زیر را وارد کنید:</p>



<pre class="wp-block-code"><code>Start-Process 'Docker Desktop Installer.exe' -Wait install</code></pre>



<p>اگر از محیط CMD استفاده می‌کنید دستور زیر را وارد کنید:</p>



<pre class="wp-block-code"><code>start /w "" "Docker Desktop Installer.exe" install</code></pre>



<p>در صورت نیاز، برای افزودن کاربر مورد نظر به docker-users دستور زیر را وارد کنید:</p>



<pre class="wp-block-code"><code>net localgroup docker-users &lt;users&gt;/add </code></pre>



<h2 class="wp-block-heading" id="h-سرویس-اشتراک-داکر">سرویس اشتراک داکر</h2>



<p>بعد از باز کردن Docker Desktop نیاز است که سرویس اشتراک داکر خود را تایید کنید. استفاده از داکر برای شرکت‌های کوچک (۲۵۰ نفر کمتر) رایگان است. همچنین استفاده از داکر برای مصارف شخصی، آموزشی و پروژه‌های غیرتجاری و متن‌باز نیز رایگان است. </p>



<p>اگر هیچکدام از شرایط گفته شده را ندارید نیاز است که از اشتراک‌های غیر رایگان داکر استفاده کنید. برای کسب اطلاعات بیشتر در ارتباط با این موضوع به صفحه <a href="https://www.docker.com/legal/docker-subscription-service-agreement/" target="_blank" rel="noreferrer noopener">Docker Desktop Subscription Service Agreement</a> مراجعه کنید. </p>



<p>برای نهایی شدن فرایند نصب، شرایط را <strong>Accept </strong>کرده و وارد اپلیکیشن اصلی شوید.</p>



<h2 class="wp-block-heading" id="h-جمع-بندی">جمع‌بندی</h2>



<p>نصب و پیاده‌سازی داکر دسکتاپ روی ویندوز بسیار ساده بوده و نیازی به دانش فنی ندارد. به همین دلیل افرادی که قصد یادگیری داکر را دارند در قدم اول برای نصب داکر مشکلی نخواهند داشت.</p>



<p>در این مطلب شما را با شیوه نصب داکر دسکتاپ روی ویندوز با استفاده از فایل نصبی و همچنین محیط خط فرمان آشنا کردیم. </p>
<p>The post <a href="https://hamravesh.com/blog/install-docker-on-windows/">آموزش گام‌به‌گام نصب داکر روی ویندوز</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/install-docker-on-windows/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>آموزش نصب داکر روی اوبونتو</title>
		<link>https://hamravesh.com/blog/install-docker-ubuntu/</link>
					<comments>https://hamravesh.com/blog/install-docker-ubuntu/#respond</comments>
		
		<dc:creator><![CDATA[ارسطو عباسی]]></dc:creator>
		<pubDate>Sat, 02 Mar 2024 15:30:00 +0000</pubDate>
				<category><![CDATA[داکر]]></category>
		<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=1942</guid>

					<description><![CDATA[<p>چگونه روی اوبونتو نسخه‌ ترمینال و گرافیکی داکر را نصب کنیم؟ آموزش کامل و قدم به قدم نصب داکر روی توزیع اوبونتو</p>
<p>The post <a href="https://hamravesh.com/blog/install-docker-ubuntu/">آموزش نصب داکر روی اوبونتو</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>داکر یک ابزار محبوب برای توسعه و استقرار اپلیکیشن‌ها در پکیج‌هایی است که با عنوان کانتینر شناخته می‌شوند. بسیاری از شرکت‌ها و استارتاپ‌های امروزی در جریان توسعه اپلیکیشن‌های‌شان از داکر استفاده کرده و بسیاری از چالش‌های‌شان را با استفاده از این تکنولوژی حل می‌کند.</p>



<p>در این مطلب مقدماتی از وبلاگ هم‌روش قصد داریم روش‌های مختلف برای نصب <strong><a href="https://hamravesh.com/blog/what-is-docker/" target="_blank" rel="noreferrer noopener">داکر</a> </strong>روی توزیع اوبونتو را معرفی کنیم. مخاطبین این مطلب افرادی هستند که به تازگی قصد ورود به دنیای داکر و کانتینرها را دارند.</p>



<h2 class="wp-block-heading" id="h-روش-های-مختلف-برای-نصب-داکر-روی-اوبونتو">روش‌های مختلف برای نصب داکر روی اوبونتو</h2>



<p>نسخه رسمی داکر که برای لینوکس توسعه پیدا کرد یک داکر مبتنی بر ترمینال بود که امروزه نیز توسط بیشتر افراد حوزه DevOps مورد استفاده قرار می‌گیرد. اما نسخه Docker Desktop که یک نسخه گرافیکی از داکر است ابتدا تنها برای سیستم‌عامل‌های ویندوز و MacOS عرضه شد، اما از سال ۲۰۲۲ برای لینوکس نیز عرضه شده و حال می‌توان از آن هم استفاده کرد. </p>



<p>در این مطلب قصد داریم با شیوه نصب هر دو حالت آشنا شویم. در نتیجه براساس نیازمندی‌ها و سطح دانش خودتان می‌توانید یکی از این روش‌ها را برای نصب داکر روی اوبونتو انتخاب کنید. اگر فردی هستید که کار کردن با محیط ترمینال را دوست دارید، بهتر است از نسخه CLI داکر استفاده کنید و اگر از جمله دوستداران رابط گرافیکی هستید می‌توانید سر وقت Docker Desktop بروید. </p>



<p>در این مطلب ما از اوبونتو نسخه 22.04 استفاده خواهیم کرد. نسخه اوبونتو شما نیز باید 18.04 به بالا باشد. </p>



<h2 class="wp-block-heading" id="h-نصب-docker-engine-روی-اوبونتو">نصب Docker Engine روی اوبونتو</h2>



<p>اصلی‌ترین ابزاری که برای کار با داکر روی اوبونتو نیاز دارید Docker Engine است. البته این نکته را در نظر داشته باشید که Docker Engine روی تمام توزیع‌ها قابل نصب بوده و مختص به اوبونتو نیست. حتی نصب کردن آن روی سرورهای اوبونتو در محیط‌ ابری نیز امکان‌پذیر است. </p>



<p>برای نصب Docker Engine ما می‌توانیم به سه روش عمل کنیم، که هر کدام از این روش‌ها نیز در ادامه آموزش داده خواهند شد.</p>



<ul class="wp-block-list">
<li>استفاده از مخزن رسمی و دستور apt</li>



<li>استفاده از پکیج دبیان (deb)</li>



<li>استفاده از اسکریپت نصب خودکار</li>
</ul>



<h2 class="wp-block-heading" id="h-نصب-docker-engine-با-استفاده-از-دستور-apt-پیشنهادی">نصب Docker Engine با استفاده از دستور apt (پیشنهادی)</h2>



<p>بهترین روش برای نصب داکر انجین استفاده از مخزن رسمی پروژه و نصب آن با استفاده از دستور apt در محیط اوبونتو و توزیع‌های مبتنی بر آن است. </p>



<p id="repository">برای انجام این کار نیاز است که مخزن داکر را به توزیع اوبونتو خود معرفی کنیم. در این فرایند نیاز به نصب کردن چند ابزار دیگر مانند <code>ca-certificates</code> و <code>curl</code> نیز وجود دارد که در زیر می‌توانید دستورات مرتبط با آن را مشاهده کنید. </p>



<pre class="wp-block-code"><code>sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc</code></pre>



<p>در قدم بعدی نیاز است که مخزن اصلی داکر را به اوبونتو اضافه کنیم. برای انجام اینکار دستورات زیر را وارد کنید:</p>



<pre class="wp-block-code"><code># Add the repository to Apt sources:
echo \
  "deb &#91;arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release &amp;&amp; echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/null
sudo apt-get update</code></pre>



<p>در مرحله بعدی وارد فاز نصب کردن خود داکر و Docker CLI می‌شویم. برای انجام اینکار دستور زیر را وارد کنید تا فرایند نصب شروع شود:</p>



<pre class="wp-block-code"><code>$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin</code></pre>



<p>در نهایت برای تایید موفقیت آمیز بودن عملیات می‌توانید دستور زیر را وارد کنید:</p>



<pre class="wp-block-code"><code>$ sudo docker run hello-world</code></pre>



<p>این دستور یک ایمیج را دانلود کرده و داخل کانتینر آن را اجرا می‌کند. hello-world نام ایمیج مد نظر ماست. اگر پیام تایید و موفقیت را دریافت کردید، بدانید که داکر به خوبی روی توزیع شما نصب شده است.</p>



<h2 class="wp-block-heading" id="h-نصب-داکر-با-استفاده-از-پکیج-دبیان">نصب داکر با استفاده از پکیج دبیان</h2>



<p>روش دیگری برای نصب داکر استفاده از پکیج دبیان آن است. اما مشکلی که با این حالت وجود دارد این است که در زمان آپدیت داکر نیاز است که تمام مراحلی که در ادامه ذکر خواهد شد را مجددا انجام دهید. برای پیدا کردن پکیج‌های مرتبط با داکر می‌توانید به این <strong><a href="https://download.docker.com/linux/ubuntu/dists/" target="_blank" rel="noreferrer noopener">لینک</a> </strong>مراجعه نمایید. </p>



<p>براساس نسخه‌ای که نیاز دارید پکیج مورد نظر را انتخاب کرده و آن را یا از طریق مرورگر و یا از طریق دستور curl در ترمینال دانلود کنید:</p>



<pre class="wp-block-code"><code>$ curl https://download.docker.com/linux/ubuntu/dists/$(lsb_release --codename | cut -f2)/pool/stable/$(dpkg --print-architecture)/docker-ce_&lt;DOCKER_VERSION&gt;~3-0~ubuntu-focal_amd64.deb -o docker-ce.deb
$ curl https://download.docker.com/linux/ubuntu/dists/$(lsb_release --codename | cut -f2)/pool/stable/$(dpkg --print-architecture)/docker-ce-cli_&lt;DOCKER_VERSION&gt;~3-0~ubuntu-focal_amd64.deb -o docker-ce-cli.deb
$ curl https://download.docker.com/linux/ubuntu/dists/$(lsb_release --codename | cut -f2)/pool/stable/$(dpkg --print-architecture)/containerd.io_&lt;CONTAINERD_VERISON&gt;-1_amd64.deb -o containerd.deb</code></pre>



<p>بعد از دانلود پکیج‌های مورد نظر، با استفاده از دستور apt می‌توانید آن‌ها را نصب کنید:</p>



<pre class="wp-block-code"><code>$ sudo apt install ./docker-ce.deb ./docker-ce-cli.deb ./containerd.deb</code></pre>



<h2 class="wp-block-heading" id="h-نصب-داکر-با-استفاده-از-اسکریپت-نصب-خودکار">نصب داکر با استفاده از اسکریپت نصب خودکار</h2>



<p>ساده‌ترین روش برای نصب داکر استفاده از اسکریپت نصب خودکار داکر است. برای استفاده از این حالت ابتدا اسکریپت رسمی را دانلود کنید:</p>



<pre class="wp-block-code"><code>$ curl -fsSL https://get.docker.com -o get-docker.sh</code></pre>



<p>سپس با استفاده از دستور زیر آن را اجرا نمایید:</p>



<pre class="wp-block-code"><code>$ sudo sh get-docker.sh</code></pre>



<h2 class="wp-block-heading" id="h-نصب-docker-desktop-روی-اوبونتو">نصب Docker Desktop روی اوبونتو</h2>



<p>همانطور که در ابتدای مقاله گفتیم، Docker Desktop نسخه گرافیکی داکر است، بنابراین اگر به استفاده از رابط متنی داکر تمایلی ندارید می‌توانید از این نسخه استفاده کنید.</p>



<p>داکر دسکتاپ اولین بار برای سیستم‌عامل‌های ویندوز و مک منتشر شد و سپس نسخه‌‌ای از آن در سال ۲۰۲۲ برای لینوکس نیز منتشر شد. </p>



<p>این نکته را در نظر داشته باشید که داکر دسکتاپ به صورت مستقل روی لینوکس اجرا نشده و از یک <strong><a href="https://hamravesh.com/blog/what-is-virtual-machine/" target="_blank" rel="noreferrer noopener">ماشین مجازی</a></strong> یا VM استفاده می‌کند. به همین دلیل ایمیج‌هایی که قبلا روی Docker Engine قرار گرفته‌اند از طریق Docker Desktop قابل دسترس نیستند. </p>



<p>در ادامه با شیوه نصب داکر دسکتاپ در لینوکس آشنا خواهیم شد.</p>



<p>در قدم اول نیاز است که مخازن داکر را به توزیع اضافه کنیم. در <strong><a href="#repository">مراحل قبلی</a></strong> با چگونگی انجام این کار آشنا شدیم.</p>



<p>حال نیاز است که آخرین نسخه Docker Desktop که یک پکیج .deb است را دانلود کنیم. برای اینکار روی این <strong><a href="https://desktop.docker.com/linux/main/amd64/135262/docker-desktop-4.27.0-amd64.deb?utm_source=docker&amp;utm_medium=webreferral&amp;utm_campaign=docs-driven-download-linux-amd64">لینک </a></strong>کلیک کنید. </p>



<p>در نهایت برای نصب پکیج دانلود شده دستورات زیر را اجرا کنید:</p>



<pre class="wp-block-code"><code>$ sudo apt-get update
$ sudo apt-get install ./docker-desktop-&lt;version&gt;-&lt;arch&gt;.deb</code></pre>



<p>در نهایت داکر دسکتاپ روی توزیع شما نصب شده و می‌توانید از قسمت App Launcher آن را مشاهده کنید.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="640" src="https://blog.hamravesh.com/blog/wp-content/uploads/2024/01/docker-desktop-running-on-ubuntu-1024x640.png" alt="داکر دسکتاپ در محیط اوبونتو" class="wp-image-1958" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/01/docker-desktop-running-on-ubuntu-1024x640.png 1024w, https://hamravesh.com/blog/wp-content/uploads/2024/01/docker-desktop-running-on-ubuntu-300x188.png 300w, https://hamravesh.com/blog/wp-content/uploads/2024/01/docker-desktop-running-on-ubuntu-768x480.png 768w, https://hamravesh.com/blog/wp-content/uploads/2024/01/docker-desktop-running-on-ubuntu.png 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>با نصب داکر دسکتاپ شما به <strong><a href="https://hamravesh.com/blog/what-is-docker-compose/" target="_blank" rel="noreferrer noopener">docker compose</a></strong> و kubectl نیز از طریق ترمینال دسترسی خواهید داشت. </p>



<h2 class="wp-block-heading" id="h-در-پایان">در پایان</h2>



<p>داکر یکی از مهمترین تکنولوژی‌های حال حاضر دنیای توسعه نرم‌افزار است که توسط بسیاری از تیم‌ها استفاده می‌شود. در واقع یادگیری و استفاده از داکر در حال حاضر یکی از واجبات بوده و نیاز است که حتما روی آن کار کنید.</p>



<p>در این مطلب از وبلاگ هم‌روش با چیستی شیوه نصب داکر در محیط‌های مختلف روی توزیع اوبونتو آشنا شدیم.</p>
<p>The post <a href="https://hamravesh.com/blog/install-docker-ubuntu/">آموزش نصب داکر روی اوبونتو</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/install-docker-ubuntu/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>نصب و استفاده از داکر کامپوز (Docker Compose) در اوبونتو</title>
		<link>https://hamravesh.com/blog/install-docker-compose-on-ubuntu/</link>
					<comments>https://hamravesh.com/blog/install-docker-compose-on-ubuntu/#respond</comments>
		
		<dc:creator><![CDATA[ارسطو عباسی]]></dc:creator>
		<pubDate>Sun, 18 Feb 2024 13:14:00 +0000</pubDate>
				<category><![CDATA[داکر]]></category>
		<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=2120</guid>

					<description><![CDATA[<p>مدیریت استقرار کانتینرهای مختلف یکی از سخت‌ترین کارها در معماری میکروسرویس است. داکر کامپوز برای حل این مشکل بوجود آمده است. در این مطلب با نصب و پیاده‌سازی داکر کامپوز آشنا خواهید شد.</p>
<p>The post <a href="https://hamravesh.com/blog/install-docker-compose-on-ubuntu/">نصب و استفاده از داکر کامپوز (Docker Compose) در اوبونتو</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>یکی از چالش‌های استفاده از داکر و تکنولوژی کانتینر این است که با پیشرفت پروژه، تعداد کانتینرهای شما افزایش پیدا می‌کند و در نهایت مدیریت تمام این موارد دشوار خواهد بود. افرادی که از معماری میکروسرویس برای توسعه اپلیکیشن خود استفاده می‌کنند، این موضوع را به خوبی درک خواهند کرد.</p>



<p>به همین جهت سرویس Docker Compose معرفی شد. با استفاده از داکر کامپوز شما این قابلیت را پیدا خواهید کرد که فرایند مدیریت استقرار کانتینرهای مختلف را با سهولت بیشتر پیش ببرید. برای آشنایی بیشتر با جزئیات چیستی و سازوکار داکر کامپوز پیشنهاد می‌کنیم که مطلب <strong>«<a href="https://hamravesh.com/blog/what-is-docker-compose/" target="_blank" rel="noreferrer noopener">Docker Compose چیست؟</a>»</strong> را مطالعه کنید.</p>



<p>در این مطلب از وبلاگ هم‌روش قصد داریم شیوه نصب داکر کامپوز روی توزیع اوبونتو را آموزش دهیم.</p>



<h2 class="wp-block-heading" id="h-پیش-نیازها"><strong>پیش‌نیازها</strong></h2>



<p>قبل از اینکه ادامه این مطلب را مطالعه کنید از داشتن پیش‌نیازهای زیر مطمئن شوید:</p>



<ul class="wp-block-list">
<li>دسترسی به سیستم عامل اوبونتو روی کامپیوتر شخصی و یا ریموت سرور</li>



<li>دسترسی به مجوزهای Sudo</li>



<li>داکر به صورت نصب شده روی کامپیوتر</li>
</ul>



<h2 class="wp-block-heading" id="h-قدم-اول-نصب-داکر-کامپوز"><strong>قدم اول: نصب داکر کامپوز</strong></h2>



<p>برای اینکه آخرین نسخه داکر کامپوز را نصب کنیم، نیاز است که وارد مخزن رسمی داکر کامپوز در گیت‌هاب شویم. برای اینکار وارد <strong><a href="https://github.com/docker/compose" target="_blank" rel="noreferrer noopener">مخزن رسمی گیت‌هاب</a></strong> شوید.</p>



<p>در مرحله بعدی وارد صفحه <a href="https://github.com/docker/compose/releases" target="_blank" rel="noreferrer noopener">releases page</a> شده و آخرین نسخه موجود را پیدا کنید. در حال حاضر (۲۶ دسامبر ۲۰۲۳) آخرین نسخه Stable از داکر کامپوز 2.23.3 است.</p>



<p>برای دانلود کردن این نسخه از دستورات زیر استفاده کنید:</p>



<pre class="wp-block-code"><code>mkdir -p ~/.docker/cli-plugins/
curl -SL https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose
</code></pre>



<p>در مرحله بعد برای قابل اجرا کردن (Executable) دستور docker compose، مجوزهای دسترسی را به صورت زیر به‌روزرسانی می‌کنیم:</p>



<pre class="wp-block-code"><code>chmod +x ~/.docker/cli-plugins/docker-compose</code></pre>



<p>در نهایت برای اینکه مطمئن شوید که مراحل نصب کردن را به درستی پیش رفته‌اید، دستور زیر را وارد کنید:</p>



<pre class="wp-block-code"><code>docker compose version</code></pre>



<p>بعد از اجرای این دستور باید خروجی زیر را دریافت کنید:</p>



<pre class="wp-block-code"><code>Output
Docker Compose version v2.23.3
</code></pre>



<p>حال داکر کامپوز با موفقیت روی سیستم شما نصب شده است. در قدم بعدی ما با چگونگی ایجاد فایل <code>docker-compose.yml</code> و آماده کردن یک محیط کانتینرسازی شده با استفاده از این ابزار آشنا می‌شویم.</p>



<h2 class="wp-block-heading"><strong>قدم دوم: ایجاد فایل docker-compose.yml</strong></h2>



<p>برای اینکه در این قدم به صورت پروژه محور پیش برویم، قصد داریم با استفاده از Nginx یک وب سرور را ایجاد کنیم. برای همین در قدم اول سراغ<a href="https://hub.docker.com/_/nginx" target="_blank" rel="noreferrer noopener"> <strong>ایمیج رسمی Nginx</strong></a><strong> </strong>در<a href="https://hamravesh.com/blog/what-is-dockerhub/"> <strong>داکر هاب</strong></a> خواهیم رفت. هدف نهایی این وب سرور نیز نمایش یک فایل استاتیک HTML خواهد بود.</p>



<p>ابتدا یک دایرکتوری جدید را در home/ ایجاد کرده و سپس وارد آن شوید:</p>



<pre class="wp-block-code"><code>mkdir ~/compose-demo
cd ~/compose-demo
</code></pre>



<p>در داخل این دایرکتوری پوشه‌ای با نام app را ایجاد کنید. در این دایرکتوری فایل‌های مربوط به اپلیکیشن را قرار می‌دهیم. برای این مطلب ما تنها یک فایل HTML خواهیم داشت.</p>



<pre class="wp-block-code"><code>mkdir app</code></pre>



<p>با استفاده از یک ادیتور، فایل index.html را در داخل app ایجاد کرده و محتوای زیر را در آن قرار دهید:</p>



<pre class="wp-block-code"><code>&lt;!doctype html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
	&lt;meta charset="utf-8"&gt;
	&lt;title&gt;Docker Compose Demo&lt;/title&gt;
	&lt;link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/kognise/water.css@latest/dist/dark.min.css"&gt;
&lt;/head&gt;
&lt;body&gt;
 
	&lt;h1&gt;This is a Docker Compose Demo Page.&lt;/h1&gt;
	&lt;p&gt;This content is being served by an Nginx container.&lt;/p&gt;
 
&lt;/body&gt;
&lt;/html&gt;
</code></pre>



<p>در قدم بعدی در دایرکتوری اصلی (compose-demo) فایلی با عنوان docker-compose.yml ایجاد کرده و محتوای زیر را در آن قرار دهید:</p>



<pre class="wp-block-code"><code>version: '3.7'
services:
  web:
	image: nginx:alpine
	ports:
  	- "8000:80"
	volumes:
  	- ./app:/usr/share/nginx/html
</code></pre>



<p>در این فایل ما محتوای زیر را قرار داده‌ایم:</p>



<ul class="wp-block-list">
<li><strong>Version</strong>: فایل‌های Docker Compose معمولا با Version شروع می‌شوند. با مقداردهی این قسمت شما به داکر کامپوز اعلام می‌کنید که قصد دارید از کدام نسخه از پیکربندی استفاده کنید.</li>
</ul>



<ul class="wp-block-list">
<li><strong>Services</strong>: سرویس‌ها شامل مواردی می‌شوند که شما قصد دارید در یک محیط کانتینرسازی شده از آن‌ها استفاده کنید. در مثال ما، تنها یک سرویس web خواهد بود. برای این سرویس ما از ایمیچ nginx:alpine استفاده می‌کنیم و روی پورت مد نظر (خط بعدی) آن را تنظیم می‌کنیم. از این به بعد تمام درخواست‌های مربوط به پورت ۸۰۰۰ (سیستمی که در حال اجرا داکر کامپوز است) به کانتینر web روی پورت ۸۰ ریدایرکت می‌شود.</li>
</ul>



<ul class="wp-block-list">
<li><strong>Volumes</strong>: با استفاده از <a href="https://docs.docker.com/compose/compose-file/07-volumes/"><strong>Volumes</strong></a> می‌توانید یک فضای ذخیره‌سازی مشترک بین کامپیوتر میزبان و کانتینر ایجاد کنید. با افزودن این قسمت به فایل پیکربندی، فولدر app با کانتینر به اشتراک گذاشته می‌شود.</li>
</ul>



<p>در قدم بعدی ما با اجرا و راه‌اندازی کردن داکر کامپوز براساس محیطی که ایجاد کرده‌ایم آشنا خواهیم شد.</p>



<h2 class="wp-block-heading"><strong>قدم سوم: اجرا داکر کامپوز</strong></h2>



<p>حال که فایل <code>docker-compose.yml</code> را ایجاد کردید می‌توانید Docker Compose را اجرا کنید. با اجرا دستور زیر، تمام ایمیج‌های مورد نیاز دانلود شده و همچنین یک کانتینر برای سرویس Web ایجاد می‌شود. در نهایت محیط کانتینرسازی شده نیز اجرا خواهد شد:</p>



<pre class="wp-block-code"><code>docker compose up -d
</code></pre>



<p>بعد از اجرای این دستور، داکر کامپوز روی سیستم شما دنبال ایمیج‌هایی می‌گردد که برای اجرا نهایی لازم دارد. اگر این موارد روی سیستم محلی پیدا نشود، ایمیج‌ها از طریق داکر هاب دانلود می‌شوند. بعد از اجرای این دستور خروجی مانند زیر به شما نمایش داده خواهد شد:</p>



<pre class="wp-block-code"><code>Creating network "compose-demo_default" with the default driver
Pulling web (nginx:alpine)...
alpine: Pulling from library/nginx
cbdbe7a5bc2a: Pull complete
10c113fb0c77: Pull complete
9ba64393807b: Pull complete
c829a9c40ab2: Pull complete
61d685417b2f: Pull complete
Digest: sha256:57254039c6313fe8c53f1acbf15657ec9616a813397b74b063e32443427c5502
Status: Downloaded newer image for nginx:alpine
Creating compose-demo_web_1 ... done
</code></pre>



<p>حال اپلیکیشن شما به صورت یک Background Service در حال اجرا است. برای تایید این موضوع نیز می‌توانید دستور زیر را وارد کنید:</p>



<pre class="wp-block-code"><code>docker compose ps</code></pre>



<p>این دستور اطلاعاتی راجع به کانتینر در حال اجرا، وضعیت و پورتی که روی آن اجرا شده را به شما نشان می‌دهد. حال اگر از طریق مرورگر وارد آدرس localhost:8000 شوید صفحه HTML ایجاد شده را خواهید دید. اگر هم از یک ریموت سرور استفاده می‌کنید بجای لوکال‌هاست، آدرس آی‌پی سرور را وارد کنید.</p>



<p>حال اگر تغییری را در فایل index.html اعمال کنید، به نظرتان روی خروجی تاثیری خواهد گذاشت؟ بله. از آنجایی که ما از Volumes در فایل <code>docker-compose.yml</code> استفاده کردیم، تمام تغییرات بین کامپیوتر و کانتینر همگام (Sync) می‌شوند.</p>



<h2 class="wp-block-heading"><strong>آشنایی با برخی از دستورات داکر کامپوز</strong></h2>



<p>حال که با شیوه نصب و پیاده‌سازی <strong>Docker Compose</strong> آشنا شدید، نیاز است که برای مدیریت و تعامل بیشتر با محیط کانتینرسازی شده، با برخی از دستورات اصلی داکر کامپوز آشنا شویم. در ادامه چند مورد از این دستورات را در عمل مشاهده خواهید کرد.</p>



<p>برای مشاهده لاگ‌هایی که توسط کانتینر Nginx ایجاد شده است می‌توانید از دستور <code>logs</code> استفاده کنید:</p>



<pre class="wp-block-code"><code>docker compose logs</code></pre>



<p>اگر قصد دارید که فرایند اجرا را متوقف کنید (بدون تغییر در وضعیت کانتینر) می‌توانید دستور <code>pause</code> را وارد کنید:</p>



<pre class="wp-block-code"><code>docker compose pause</code></pre>



<p>برای اجرا مجدد فرایند می‌توانید دستور <code>unpause</code> را وارد کنید:</p>



<pre class="wp-block-code"><code>docker compose unpause
</code></pre>



<p>برای Terminate یا خاتمه دادن به روند اجرا کانتینر می‌توانید از دستور <code>stop</code> استفاده کنید. البته در این روش هیچ داده‌ای که مربوط به کانتینر باشد از بین نخواهد رفت:</p>



<pre class="wp-block-code"><code>docker compose stop</code></pre>



<p>اگر قصد حذف کردن تمام کانتینرها، شبکه‌ها و Volumeهایی مربوط به محیط کانتینرسازی شده را دارید می‌توانید از دستور <code>down</code> استفاده کنید:</p>



<pre class="wp-block-code"><code>docker compose down</code></pre>



<p>البته این دستور، ایمیج مربوط به کانتینر (در مثال این مطلب nginx:alpine) را حذف نمی‌کند. در نهایت اگر قصد راه‌اندازی مجدد همین محیط را داشته باشید می‌توانید دستور <code>up</code> را وارد کنید. از آنجایی که ایمیج شما کماکان موجود است، این بار فرایند پیاده‌سازی بسیار سریع‌تر خواهد بود.</p>



<p>در نهایت اگر قصد داشته باشید که ایمیج اصلی را نیز حذف کنید می‌توانید از دستور <code>rm</code> استفاده نمایید:</p>



<pre class="wp-block-code"><code>docker image rm nginx:alpine</code></pre>



<h2 class="wp-block-heading" id="h-ج-مع-بندی"><strong>ج</strong>مع‌بندی</h2>



<p>در این مطلب از وبلاگ هم‌روش ما با شیوه نصب داکر کامپوز و همچنین ایجاد یک پروژه مبتنی بر Nginx آشنا شدیم. برای مطالعه و آشنایی بیشتر با داکر کامپوز و دستورات مختلف آن می‌توانید از<a href="https://docs.docker.com/compose/reference/"> <strong>مستندات رسمی داکر</strong></a> استفاده کنید. </p>
<p>The post <a href="https://hamravesh.com/blog/install-docker-compose-on-ubuntu/">نصب و استفاده از داکر کامپوز (Docker Compose) در اوبونتو</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/install-docker-compose-on-ubuntu/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>داکر کامپوز (Docker Compose) چیست؟</title>
		<link>https://hamravesh.com/blog/what-is-docker-compose/</link>
					<comments>https://hamravesh.com/blog/what-is-docker-compose/#respond</comments>
		
		<dc:creator><![CDATA[ارسطو عباسی]]></dc:creator>
		<pubDate>Sat, 27 Jan 2024 14:30:00 +0000</pubDate>
				<category><![CDATA[داکر]]></category>
		<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=1905</guid>

					<description><![CDATA[<p>تصور کنید یک اپلیکیشن با چندین کانتینر داکر در اختیار دارید و حال برای هماهنگ کردن و مدیریت فرایند استقرار این حجم از کانتینر قصد دارید از طریق یک ابزار مرکزی تمام کارها را انجام دهید. در این شرایط با چالش‌های مختلفی روبه‌رو خواهید بود و در نهایت فرایند مدیریتی بسیار سختی را پیش رو [&#8230;]</p>
<p>The post <a href="https://hamravesh.com/blog/what-is-docker-compose/">داکر کامپوز (Docker Compose) چیست؟</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>تصور کنید یک اپلیکیشن با چندین کانتینر داکر در اختیار دارید و حال برای هماهنگ کردن و مدیریت فرایند استقرار این حجم از کانتینر قصد دارید از طریق یک ابزار مرکزی تمام کارها را انجام دهید. در این شرایط با چالش‌های مختلفی روبه‌رو خواهید بود و در نهایت فرایند مدیریتی بسیار سختی را پیش رو خواهید داشت. داکر کامپوز در این شرایط بهترین ابزاری خواهد بود که در مدیریت Docker Containerهای مختلف می‌تواند به شما کمک بکند.&nbsp;</p>



<p>در این مطلب از وبلاگ هم‌روش قصد داریم شما را با داکر کامپوز به‌خوبی آشنا کنیم و از ویژگی‌ها و چگونگی فرایند کاری آن صحبت کنیم.</p>



<h2 class="wp-block-heading" id="h-داکر-کامپوز-یا-docker-compose-چیست">داکر کامپوز یا Docker Compose چیست؟</h2>



<p>همانطور که می‌دانید استفاده از تکنولوژی داکر در حال تبدیل شدن به یک استاندارد در بسیاری از شرکت‌ها و کسب و کارهاست. دلایل بسیار زیادی برای این موضوع نیز وجود دارد که با مطالعه <strong>ویژگی‌ها و مزایایی داکر </strong>می‌توانید از این موارد آگاهی کسب کنید.&nbsp;</p>



<p>مدیریت و استفاده از داکر نیز آسان است اما زمانی این بحث چالش‌برانگیز می‌شود که شما چندین کانتینر داشته باشید و بخواهید در نهایت یک اپلیکیشن یا وب‌سایت یکپارچه را با کانتینرهای مختلف اجرا کنید. در این حالت است که شما به ابزار داکر کامپوز نیاز پیدا خواهید کرد.&nbsp;</p>



<p>به زبان بسیار ساده داکر کامپوز ابزاری است که در مدیریت استقرار <strong>کانتینرهای </strong>مختلف به شما کمک می‌کند. استفاده از این ابزار زمانی اهمیت بالایی پیدا می‌کند که شما در فرایند توسعه اپلیکیشن خود از معماری مبتنی بر میکروسرویس استفاده کنید،&nbsp;</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="576" src="https://blog.hamravesh.com/blog/wp-content/uploads/2024/01/docker-compose-1024x576.png" alt="docker compose" class="wp-image-1910" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/01/docker-compose-1024x576.png 1024w, https://hamravesh.com/blog/wp-content/uploads/2024/01/docker-compose-300x169.png 300w, https://hamravesh.com/blog/wp-content/uploads/2024/01/docker-compose-768x432.png 768w, https://hamravesh.com/blog/wp-content/uploads/2024/01/docker-compose.png 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>در معماری میکروسرویس هر کدام از اپلیکیشن‌های کوچک شما (سرویس‌های مختلف) در کانتینرهای جداگانه مدیریت و استقرار پیدا می‌کنند. در نتیجه برای مدیریت کردن این حجم از کانتینر متفاوت با چالش‌های بسیار زیادی روبرو خواهید بود که داکر کامپوز قصد دارد این مشکل را حل کند.</p>



<p>با استفاده از داکر کامپوز شما می‌توانید با ایجاد یک فایل YAML سرویس‌های مختلف را تعریف کرده و اپلیکیشن‌هایی را که دارای کانتینرهای مختلفی هستند به اشتراک بگذارید. به این صورت شما می‌توانید از طریق یک منبع مشترک و متمرکز، پروژه‌ای که چندین کانتینر مختلف دارد را اجرا نمایید. در ارتباط با این فایل در ادامه مطلب بیشتر آشنا خواهید شد.</p>



<p>برای مثال تصور کنید شما قصد دارید در توسعه پروژه خود از Node.js و MongoDB استفاده کنید. در این حالت رویکرد عادی به این صورت است که هر کدام این موارد را باید به‌صورت جداگانه توسط ایمیج‌ها و کانتینرهای مختلف مدیریت و اجرا کنید. اما در داکر کامپوز با استفاده از یک فایل YAML همه چیز را از یک نقطه مدیریت خواهید کرد.&nbsp;</p>



<h2 class="wp-block-heading" id="h-کاربردها-و-مزایای-استفاده-از-docker-compose">کاربردها و مزایای استفاده از Docker Compose</h2>



<p>{تصویری از کاربردهای ذکر شده تنها براساس تایتل‌هاشون که همین زیر نوشتمشون.}</p>



<p>داکر کامپوز به صورت خلاصه فرایند مدیریت کانتینرهای مختلف داکر را آسان می‌کند، اما جدای از این مورد یکسری مزایا و ویژگی‌های منحصر به فرد نیز دارد که با مطالعه آن‌ها می‌توانید به صورت عمیق‌تری با کارکرد این ابزار آشنا شوید:</p>



<h3 class="wp-block-heading" id="h-محیط-های-ایزوله-شده-مختلف-با-استفاده-از-هاست-یا-میزبانی-مشترک">محیط‌های ایزوله شده مختلف با استفاده از هاست یا میزبانی مشترک</h3>



<p>با استفاده از داکر کامپوز می‌توانید محیط‌های ایزوله شده مختلفی را روی یک هاست مشترک قرار دهید. داکر کامپوز برای ایزوله و جدا کردن محیط‌های توسعه مختلف از همدیگر تنها از یک Project Name (نام پروژه) استفاده می‌کند. در واقع این مورد به تفکیک محیط‌های توسعه از همدیگر کمک می‌کند. شما می‌توانید از یک نام پروژه در بخش‌ها و سناریوهای مختلفی استفاده کنید.</p>



<h3 class="wp-block-heading" id="h-ذخیره-اطلاعات-درایو-در-هنگام-ساخت-کانتینرها">ذخیره اطلاعات درایو در هنگام ساخت کانتینرها</h3>



<p>کامپوز تمام درایوهایی که توسط سرویس‌های شما مورد استفاده قرار می‌گیرد را نگهداری می‌کند. در این حالت وقتی که کامپوز اجرا شود، کانتینرهایی که قبلا اجرا شده‌اند را پیدا کرده و درایوها را از کانتینرهای قدیمی در کانتینرهای جدید کپی می‌کند. در نهایت تمام این اقدامات برای این انجام می‌شود تا هیچ اطلاعاتی که مربوط به درایوهاست حذف نشود.&nbsp;</p>



<h3 class="wp-block-heading" id="h-استفاده-مجدد-از-کانتینرها-و-بهینه-بودن-در-مصرف-منابع">استفاده مجدد از کانتینرها و بهینه بودن در مصرف منابع</h3>



<p>داکر کامپوز پیکربندی‌هایی که برای ایجاد کانتینرها مورد استفاده قرار گرفته را نزد خود کش می‌کند. در این حالت زمانی که شما قصد راه‌اندازی مجدد یک سرویس را داشته باشید، در صورتی که تغییری در آن ایجاد نشده باشد، می‌توانید از کانتینر‌های از پیش موجود دوباره استفاده کنید.&nbsp;</p>



<h3 class="wp-block-heading" id="h-ایجاد-محیطی-برای-تست-های-خودکار">ایجاد محیطی برای تست‌های خودکار</h3>



<p>یکی از مهم‌ترین بخش‌های فرایند‌ CI/CD انجام تست‌های خودکار است که برای انجام آن به محیطی برای اجرا تست‌ها نیاز است. کامپوز در این مسیر به شما کمک می‌کند تا محیط‌های جدیدی را برای تست اپلیکیشن‌ها ایجاد کنید. در داکر کامپوز می‌توانید تنها با چند دستور ساده محیط تست خود را ایجاد کرده، فایل تست را اجرا کنید و در نهایت محیط تست را حذف کنید.&nbsp;</p>



<h2 class="wp-block-heading" id="h-ارتباطات-درونی-امن">ارتباطات درونی امن</h2>



<p>داکر کامپوز برای برقراری ارتباط میان سرویس‌های مختلف یک شبکه مستقل را ایجاد می‌کند. این موضوع باعث می‌شود تا یک لایه امنیت به اپلیکیشن اضافه شود چرا که شما نخواهید توانست در خارج از این سازوکار به سرویس‌ها دسترسی داشته باشید و برای ایجاد دسترسی حتما باید بخشی از کلیت سازوکار درونی باشید.&nbsp;</p>



<h2 class="wp-block-heading" id="h-پیکربندی-آسان-و-سریع">پیکربندی آسان و سریع</h2>



<p>از آنجایی که برای مدیریت و استفاده از داکر کامپوز تنها به تعریف یک فایل YAML نیاز دارید با یادگیری فرمت و ساختار این فایل در سریع‌ترین زمان ممکن می‌توانید از ویژگی‌های و سرویس‌های داکر کامپوز استفاده کنید. در نتیجه فرایند پیکربندی و استفاده بسیار آسان و سریعی دارد.</p>



<p><strong>ساختار فایل YAML در داکر کامپوز</strong></p>



<p>داکر کامپوز برای مدیریت کانتینرهای مختلف از یک فایل مرکزی با فرمت YAML استفاده می‌کند. در این فایل تمام مشخصات لازم برای اجرایی شدن امکانات داکر کامپوز فراهم می‌شود. برای اینکه به صورت کامل‌تری با نقش این فایل آشنا شوید بیایید یک مثال را بررسی کنیم. در زیر یک نمونه از فایل YAML را مشاهده خواهید کرد که در ادامه با بخش‌های مختلف آن آشنا می‌شوید:</p>



<pre class="wp-block-code"><code>version: '3'
services:
  app:
    image: node:latest
    container_name: app_main
    restart: always
    command: sh -c "yarn install &amp;&amp; yarn start"
    ports:
      - 8000:8000
    working_dir: /app
    volumes:
      - ./:/app
    environment:
      MYSQL_HOST: localhost
      MYSQL_USER: root
      MYSQL_PASSWORD: 
      MYSQL_DB: test
  mongo:
    image: mongo
    container_name: app_mongo
    restart: always
    ports:
      - 27017:27017
    volumes:
      - ~/mongo:/data/db
volumes:
  mongodb:</code></pre>



<p>برای اینکه به صورت کامل با ساختار این فایل آشنا شوید بیایید به صورت جداگانه بخش‌های مختلف آن را بررسی کنیم:</p>



<ul class="wp-block-list">
<li><strong>version:</strong> این دستور به نسخه‌ مورد استفاده از docker-compose اشاره دارد که قصد دارید از آن در این پروژه استفاده کنید.</li>



<li><strong>services:</strong> برای تعیین سرویس‌هایی که قصد اجرای آن‌ها را دارید باید این دستور را به فایلتان اضافه کنید.</li>



<li><strong>app:</strong> این مورد یک نام سفارشی برای یکی از کانتینرهای شماست.&nbsp;</li>



<li><strong>image:</strong> در این بخش داکر ایمیجی که قصد دارید از آن در این پروژه استفاده کنید را وارد می‌کنید</li>



<li><strong>container_name:</strong> نام هر کدام از کانتینرهای شما در این قسمت قرار می‌گیرد.</li>



<li><strong>restart:</strong> این دستور وضعیت راه‌اندازی و راه‌اندازی مجدد هر سرویس را مشخص می‌کند.&nbsp;</li>



<li><strong>port:</strong> برای تعریف یک پورت مشخص که قصد دارید کانتینر روی آن اجرا شود این مورد را مقداردهی می‌کنید.</li>



<li><strong>working_dir:</strong> دایرکتوری که کانتینر سرویس مربوطه در آن قرار دارد.</li>



<li><strong>environment:</strong> از این مورد برای تعریف متغیرهای محیطی یا Environment Variable استفاده می‌شود.</li>



<li><strong>command:</strong> این مورد حاوی دستوری‌ست که برای اجرا سرویس‌ها مورد استفاده قرار می‌گیرد.</li>
</ul>



<p>این موارد تنها دستورات پایه‌ای و اصلی هستند که در فایل YAML مربوط به Docker Compose استفاده می‌شوند اما با<a href="https://docs.docker.com/compose/gettingstarted/#step-3-define-services-in-a-compose-file"><strong> مطالعه مستندات</strong></a> اصلی متوجه خواهید شد که امکانات و ویژگی‌های دیگری نیز وجود دارد که می‌توانید از آن‌ها نیز بهره بگیرید.&nbsp;</p>



<h2 class="wp-block-heading" id="h-آشنایی-با-دستورات-داکر-کامپوز-در-محیط-ترمینال">آشنایی با دستورات داکر کامپوز در محیط ترمینال</h2>



<p>برای مدیریت و انجام عملیات‌های مختلف در داکر کامپوز شما باید با دستورات پایه‌ای آن در محیط ترمینال آشنایی داشته باشید. برای همین در ادامه این مطلب قصد دارم با برخی از مهمترین و پایه‌ای‌ترین این دستورات در محیط ترمینال یا CMD آشنا شویم.</p>



<figure class="wp-block-table"><table><tbody><tr><td class="has-text-align-center" data-align="center"><strong>دستور</strong></td><td><strong>شرح دستور</strong></td></tr><tr><td class="has-text-align-center" data-align="center">docker-compose &#8211;help</td><td>با استفاده از این دستور لیست تمام راهنماهای دستورات داکر کامپوز و آرگومان‌های مختلف آن‌ها به شما نمایش داده خواهد شد.</td></tr><tr><td class="has-text-align-center" data-align="center">docker-compose build</td><td>این دستور با مشاهده فایل YAML، در صورت وجود دستور build، آن را اجرا می‌کند. هر سرویس می‌تواند یک دستور build داشته باشد.</td></tr><tr><td class="has-text-align-center" data-align="center">docker-compose run</td><td>برای اجرا کردن سرویس‌ها از این دستور استفاده می‌شود.</td></tr><tr><td class="has-text-align-center" data-align="center">docker-compose up</td><td>برای ایجاد، ایجاد مجدد و شروع کار داکر کامپوز از این دستور استفاده می‌شود.</td></tr><tr><td class="has-text-align-center" data-align="center">docker-compose -f [command]</td><td>با استفاده از فلگ f- می‌توانید موقعیت فایل پیکربندی داکر کامپوز را مشخص کنید.</td></tr><tr><td class="has-text-align-center" data-align="center">docker-compose start</td><td>اجرا یا شروع کانتینرهای موجود.</td></tr><tr><td class="has-text-align-center" data-align="center">docker-compose stop</td><td>متوقف کردن کانتینرها در فرایند اجرا (بدون حذف آن‌)</td></tr><tr><td class="has-text-align-center" data-align="center">docker-compose pause</td><td>ایجاد مکث در اجرا کانتینرهای مربوط به یک سرویس</td></tr><tr><td class="has-text-align-center" data-align="center">docker-compose unpause</td><td>برای غیرفعال کردن دستور قبلی (از حالت مکث درآوردن) از این دستور استفاده می‌شود.</td></tr><tr><td class="has-text-align-center" data-align="center">docker-compose down</td><td>متوقف کردن کانتینرها (حذف کانتینر، شبکه‌ها، Volumeها و ایمیج‌ها)</td></tr><tr><td class="has-text-align-center" data-align="center">docker-compose ps</td><td>نمایش لیست کانتینرهایی که در فایل پیکربندی داکر کامپوز وجود دارد.</td></tr><tr><td class="has-text-align-center" data-align="center">docker-compose images</td><td>نمایش لیست ایمیج‌هایی که توسط کانتینرهای ایجاد شده مورد استفاده قرار می‌گیرد.&nbsp;</td></tr><tr><td class="has-text-align-center" data-align="center">docker-compose ls</td><td>نمایش لیست پروژه‌های درحال اجرا داکر کامپوز&nbsp;</td></tr></tbody></table></figure>



<h2 class="wp-block-heading" id="h-آشنایی-با-مفاهیم-و-کلید-واژه-های-اصلی-در-داکر-کامپوز">آشنایی با مفاهیم و کلید واژه‌های اصلی در داکر کامپوز</h2>



<p>برای اینکه به صورت عمیق‌تری با چیستی داکر کامپوز و امکانات آن آشنا شویم نیاز است تا با یکسری از مفاهیم و کلید واژه‌های اصلی آن آشنا شویم. به این صورت در موقع مواجه با هر کدام از این واژه‌ها در محیط داکر کامپوز می‌توانیم با درک بهتری از ویژگی‌های آن استفاده کنیم.&nbsp;</p>



<ul class="wp-block-list">
<li><strong>Services</strong>: سرویس‌ها به داکر ایمیج‌های مختلفی اطلاق می‌شود که قصد داریم از طریق داکر کامپوز آن‌ها را به صورت یکجا مدیریت و اجرا کنیم.</li>



<li><strong>Networks</strong>: این کلید واژه (شبکه‌ها) وظیفه متصل کردن داکر کانتینرهای مختلف به همدیگر و ایجاد یک مسیر برای برقراری ارتباط بین آن‌ها را فراهم می‌کند.&nbsp;</li>



<li><strong>Volumes</strong>: این کلید واژه به قسمتی اطلاق می‌شود که اطلاعات را به صورت دائمی در خود ذخیره می‌کند. این اطلاعات می‌تواند در بین کانتینرهای مختلف در یک فضای کاری به اشتراک گذاشته شود.&nbsp;</li>



<li><strong>Configs</strong>: با استفاده از این ویژگی شما می‌توانید بدون ساخت یک داکر ایمیج جدید، رفتار آن را براساس فایل‌های ذخیره شده در سرویس قبلی (ٰVolumes) تغییر دهید.&nbsp;</li>



<li><strong>Secrets</strong>: این مورد به فضایی گفته می‌شود که اطلاعات حساس مربوط به پیکربندی‌ها را در خود ذخیره می‌کند. برای مثال گواهی‌نامه‌های سرور از جمله این اطلاعات حساس هستند.</li>
</ul>



<h2 class="wp-block-heading" id="h-استفاده-از-داکر-کامپوز-در-پلتفرم-ابری-دارکوب">استفاده از داکر کامپوز در پلتفرم ابری دارکوب</h2>



<p>با استفاده از پلتفرم ابری دارکوب، شما امکان استقرار اپلیکیشن‌های‌تان را به‌سرعت با استفاده از داکر کامپوز خواهید داشت. تنها کافی‌ست هنگام تعریف اپلیکیشن، Docker Compose را انتخاب کرده و محتویات فایل YAML مورد نظر را در آن قرار دهید. پلتفرم ابری دارکوب به صورت خودکار اپلیکیشن‌های شما را تشخیص می‌دهد.&nbsp;</p>



<p>برای مطالعه بیشتر این ویژگی به قسمت <a href="https://docs.hamravesh.com/darkube/create/docker-compose/"><strong>مستندات دارکوب </strong></a>مراجعه نمایید.</p>



<p><strong>جمع‌بندی</strong></p>



<p>داکر کامپوز بهینه‌ترین و استاندارترین روش برای مدیریت داکر کانتینرهای مختلف از طریق یک بخش مرکزی است. این تکنولوژی برای وبسایت‌ها و اپلیکیشن‌هایی که براساس معماری میکروسرویس پیش می‌روند و مجبور هستند که برای توسعه پروژه‌های‌شان کانتینرهای مختلفی را ایجاد کنند، بسیار حیاتی است.&nbsp;</p>



<p>در این مطلب از وبسایت هم‌روش ما با چیستی داکر کامپوز، ویژگی‌ها و مزیت‌های آن، ساختار فایل Compose.yaml و کلید‌واژه‌ها و مفاهیم اصلی در داکر کامپوز آشنا شدیم. </p>
<p>The post <a href="https://hamravesh.com/blog/what-is-docker-compose/">داکر کامپوز (Docker Compose) چیست؟</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/what-is-docker-compose/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ماشین مجازی (Virtual Machine) چیست؟</title>
		<link>https://hamravesh.com/blog/what-is-virtual-machine/</link>
					<comments>https://hamravesh.com/blog/what-is-virtual-machine/#respond</comments>
		
		<dc:creator><![CDATA[ارسطو عباسی]]></dc:creator>
		<pubDate>Sun, 07 Jan 2024 14:30:00 +0000</pubDate>
				<category><![CDATA[داکر]]></category>
		<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=1732</guid>

					<description><![CDATA[<p>ماشین مجازی نسخه‌ای دیجیتال از یک کامپیوتر فیزیکی است. با استفاده از یک نرم‌افزار مجازی‌ساز مانند ماشین مجازی شما قابلیت آن را دارید که سیستم عامل‌های جداگانه‌ای را به‌صورت هم‌زمان روی کامپیوتر خود اجرا کنید. در این شرایط هر سیستم عامل دارای محیط مستقلی برای اجرا نرم‌افزارها می‌شود و از منابع سخت‌افزاری مختص به خود [&#8230;]</p>
<p>The post <a href="https://hamravesh.com/blog/what-is-virtual-machine/">ماشین مجازی (Virtual Machine) چیست؟</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>ماشین مجازی نسخه‌ای دیجیتال از یک کامپیوتر فیزیکی است. با استفاده از یک نرم‌افزار مجازی‌ساز مانند ماشین مجازی شما قابلیت آن را دارید که سیستم عامل‌های جداگانه‌ای را به‌صورت هم‌زمان روی کامپیوتر خود اجرا کنید. در این شرایط هر سیستم عامل دارای محیط مستقلی برای اجرا نرم‌افزارها می‌شود و از منابع سخت‌افزاری مختص به خود استفاده می‌کند.</p>



<p>برای مثال تصور کنید که شما در محیط سیستم عامل ویندوز، قصد دارید یک نسخه از سیستم عامل لینوکس را نیز به‌صورت زنده و هم‌زمان در اختیار داشته باشید. در این حالت می‌توانید یک ماشین مجازی را با استفاده از ابزاری مانند<a href="https://www.virtualbox.org/"> Virtual Box</a> ایجاد کرده و لینوکس را در آن نصب کنید.</p>



<p>در این حالت سیستم عامل شما را <strong>Guest یا مهمان</strong> و کامپیوتر فیزیکی شما که لینوکس روی آن نصب شده است، <strong>Host یا میزبان</strong> می‌گویند.</p>



<p>برای اینکه به‌صورت عمیق‌تری با چیستی ماشین مجازی آشنا شویم، نیاز است که ابتدا با شیوه کاری آن آشنا شویم.</p>



<h2 class="wp-block-heading" id="h-ماشین-مجازی-چگونه-کار-می-کند"><strong>ماشین‌ مجازی چگونه کار می‌کند؟</strong></h2>



<p>ماشین مجازی از تکنیک مجازی‌سازی یا Virtualization برای ساخت یک نسخه نرم‌افزاری از کامپیوتر استفاده می‌کند. اما همین نسخه نرم‌افزاری نیز منابع سخت‌افزاری تعیین‌شده‌ای داشته و در واقع از منابع Host (پردازنده، حافظه اصلی و حافظه ذخیره‌سازی) استفاده می‌کند.</p>



<p>این نکته را در نظر داشته باشید که Host تنها محدود به کامپیوترهای شخصی نبوده و بیشتر استفاده از ماشین‌های مجازی در ریموت سرورها (Remote Server) اتفاق می‌افتد.</p>



<p>هر ماشین مجازی از یک فایل به نام Image ساخته می‌شود و تمام محتویات ضروری برای راه‌اندازی یک سیستم عامل جداگانه را در خود نگهداری می‌کند. همچنین اطلاعات داخل هر ایمیج مستقل از دیگر ایمیج‌ها بوده و تاثیری بر محتوای خارج از خود نخواهد داشت.</p>



<p>برای مثال اگر سیستم عامل ویندوز شما که به‌صورت مجازی ایجاد شده، ویروسی شود، روی سیستم عامل Host تاثیر نخواهد گذاشت، چرا که محیط‌های مجازی از استقلال کاملی برخوردار هستند.</p>



<h2 class="wp-block-heading" id="h-چرا-از-ماشین-مجازی-استفاده-می-کنیم"><strong>چرا از ماشین مجازی استفاده می‌کنیم؟</strong></h2>



<p>ماشین‌های مجازی استفاده‌های متنوعی دارند و بیشتر شرکت‌های بزرگ آز آن‌ها استفاده می‌کنند. در ادامه این مطلب قصد داریم با برخی از اصلی‌ترین کاربردها و استفاده‌های ماشین‌های مجازی آشنا شویم:</p>



<h3 class="wp-block-heading" id="h-اجرای-سیستم-عامل-های-متفاوت-روی-یک-host"><strong>اجرای سیستم‌عامل‌های متفاوت روی یک Host</strong></h3>



<p>بسیاری از افراد از سیستم عامل ویندوز استفاده می‌کنند و به همین دلیل از قدرت سیستم عامل‌های دیگر بی‌بهره هستند. در این شرایط اگر کسی قصد داشته باشد که برای یکی از پروژه‌های‌ش از لینوکس استفاده کند، چه کاری باید انجام دهد؟</p>



<p>استفاده از ماشین مجازی یکی از راه‌ها برای انجام چنین کاری‌ست. با استفاده از ماشین مجازی، می‌توانید در کنار سیستم عاملی که دارید، هر سیستم عامل دیگری را نیز نصب کرده و به‌صورت هم‌زمان از آن‌ها استفاده کنید.</p>



<h3 class="wp-block-heading" id="h-توسعه-نرم-افزار-برای-پلتفرم-های-دیگر"><strong>توسعه نرم‌افزار برای پلتفرم‌های دیگر</strong></h3>



<p>با استفاده از ماشین مجازی، شما قابلیت توسعه و تست اپلیکیشن یا وبسایت‌تان روی سیستم عامل‌های دیگر را دارید.&nbsp; اگر از افرادی باشید که به توسعه چند-سکویی علاقه‌مند هستید و پروژه‌های‌تان مربوط به این حالت می‌شود، استفاده از چنین قابلیتی در ماشین‌های مجازی مطمئنا منفعت‌های بسیار زیادی برای‌تان خواهد داشت.</p>



<h3 class="wp-block-heading" id="h-آزمایش-عدم-وجود-بد-افزار"><strong>آزمایش عدم وجود بد افزار</strong></h3>



<p>تصور کنید که قصد بررسی یک فایل دانلود شده را دارید و می‌خواهید آن را در محیطی کاملا امن اجرا کنید. امن به این لحاظ که اگر نرم افزار را اجرا کردید و با یک بد افزار روبه‌رو شدید، کلیت سیستم عاملتان به این بدافزار دچار نشده و بتوانید به‌سادگی آن را حذف کنید.</p>



<p>با اجرای نرم افزار مد نظر در محیط مجازی این قابلیت را خواهید داشت. همانطور که قبلا اشاره کردیم، ماشین‌های مجازی محیط‌های پردازشی مستقلی هستند و روی یکدیگر تاثیر نخواهند گذاشت.</p>



<h3 class="wp-block-heading" id="h-اجرای-نرم-افزارهای-قدیمی-و-ناسازگار"><strong>اجرای نرم‌افزارهای قدیمی و ناسازگار</strong></h3>



<p>در برخی از مواقع اجرای یک نرم افزار قدیمی بسیار ضروری بوده و عاقلانه هم نیست که سیستم عامل کنونی‌تان را پاک کنید تا یک سیستم عامل قدیمی مانند XP را تنها برای اجرا یک نرم افزار نصب کنید.</p>



<p>در چنین حالت‌هایی تنها کافی‌ست سیستم عامل مورد نظر را روی یک Virtual Machine نصب کرده و نرم افزار را در همان محیط اجرا کنید.</p>



<h2 class="wp-block-heading" id="h-مزایای-ماشین-مجازی"><strong>مزایای ماشین مجازی</strong></h2>



<p>ماشین مجازی بنابر ساختاری که دارد&nbsp; از مزیت‌ها و ویژگی‌های منحصر به فردی برخوردار است که در ادامه این مطلب با برخی از مهم‌ترین آن‌ها آشنا خواهیم شد.</p>



<h3 class="wp-block-heading" id="h-استفاده-بهینه-از-منابع"><strong>استفاده بهینه از منابع</strong></h3>



<p>بیشتر اپلیکیشن‌ها تنها&nbsp; مقدار کمی از منابع فیزیکی موجود در Host را استفاده می‌کنند. به همین دلیل منابع بسیار زیادی بدون استفاده مانده و کاربردی در این حالت نخواهند داشت.</p>



<p>با ایجاد ماشین‌های مجازی شما این قابلیت را دارید که منابع سخت افزاری خودتان را بین اپلیکیشن‌های متفاوت به اشتراک بگذارید و به صورت بهینه از آن‌ها استفاده کنید.</p>



<h3 class="wp-block-heading" id="h-امنیت"><strong>امنیت</strong></h3>



<p>هر ماشین مجازی در یک محیط محاسباتی مستقل و ایزوله اجرا شده و روی ماشین‌های مجازی دیگر تاثیری نخواهد گذاشت. بنابراین هر شکلی از مشکلات امنیتی مربوط به یک virtual machine، تنها به خود آن ارتباط دارد و نیازی به نگرانی در ارتباط با موارد دیگر نیست.</p>



<p>این موضوع در نهایت باعث می‌شود امنیت سازمانی بیشتر شده و سطح کیفی آن بالاتر برود.</p>



<p>همچنین یکی دیگر از استفاده‌های ماشین‌های مجازی در این زمینه این است که نرم‌افزارها و آپدیت‌های در حال توسعه برای تست شدن، قبل از انتشار نهایی،&nbsp; روی ماشین مجازی اجرا می‌شوند. بعد از تست کامل و در صورت نبود هیچ‌گونه مشکلی، نرم‌افزار در محیط Production دیپلوی می‌شود.</p>



<p>از این جهت می‌توان ماشین‌های مجازی را به عنوان یک ابزار مناسب برای تست اپلیکیشن در نظر گرفت.</p>



<h3 class="wp-block-heading" id="h-قابل-حمل-بودن-یا-portability"><strong>قابل حمل بودن یا Portability</strong></h3>



<p>فرایند انتقال و ادغام ماشین مجازی از یک سرور به سرور دیگر به سادگی انجام‌پذیر بوده و این به دلیل میزان بالای Portability ماشین‌های مجازی است.</p>



<p>&nbsp;Cold Migration و Hot Migration دو حالت از مهاجرت ماشین مجازی از یک سرور به سروری دیگر هستند که براساس نیازمندی‌ها از آن‌ها استفاده می‌شود.</p>



<h3 class="wp-block-heading" id="h-مقرون-به-صرفه-بودن"><strong>مقرون به صرفه بودن</strong></h3>



<p>از آنجایی که شما با استفاده از تکنولوژی Virtual Machine امکان استقرار چندین اپلیکیشن روی یک هاست را دارید، می‌توانید میزان قابل توجهی از هزینه‌های‌تان را صرفه‌جویی کنید و به‌صورت بهینه‌تری از منابع بهره ببرید.</p>



<h3 class="wp-block-heading" id="h-مقیاس-پذیری"><strong>مقیاس‌پذیری</strong></h3>



<p>در زمینه مقیاس‌پذیری، ماشین‌های مجازی به شما سه قابلیت مهم را می‌دهند:</p>



<ul class="wp-block-list">
<li>&nbsp;پیاده‌سازی و راه‌اندازی سریع</li>



<li>کلون گرفتن از ماشین‌های مجازی موجود</li>



<li>&nbsp;تخصیص منابع جدید و یا از دسترس خارج کردن آن براساس میزان استفاده</li>
</ul>



<h2 class="wp-block-heading" id="h-معایب-nbsp-و-مشکلات-ماشین-مجازی"><strong>معایب&nbsp; و مشکلات ماشین مجازی</strong></h2>



<p>در کنار مزایا و ویژگی‌هایی که virtual machineبه ما ارائه می‌دهد، یکسری مشکلات و معایب نیز وجود دارد که در ادامه برخی از آن‌ها را بررسی خواهیم کرد.</p>



<h3 class="wp-block-heading" id="h-هزینه-اولیه-زیاد"><strong>هزینه اولیه زیاد</strong></h3>



<p>در حالیکه در بلند مدت ممکن است ماشین مجازی برای برخی از حالت‌ها مقرون به صرفه باشد، اما در ابتدای راه‌اندازی یک استارتاپ و با اشتباه در نظر گرفتن نیازمندی‌ها، هزینه اولیه ممکن است زیاد باشد.</p>



<h3 class="wp-block-heading" id="h-پیکربندی-پیچیده"><strong>پیکربندی پیچیده</strong></h3>



<p>پیاده‌سازی یک معماری مبتنی بر virtual machine، کار چندان ساده‌ای نیست و نیاز به متخصصین مختلفی دارد.</p>



<h3 class="wp-block-heading" id="h-مشکلات-اجرایی"><strong>مشکلات اجرایی</strong></h3>



<p>&nbsp;با استفاده کردن از چندین ماشین مجازی روی یک سرور یا فضای میزبانی، مشکلات اجرایی مختلفی ممکن است پیش بیاید. از آنجایی که در برخی از حالت‌ها مانیتورینگ دقیق امکان پذیر نیست، این مشکلات به صورت ناگهانی اتفاق می‌افتند.</p>



<h2 class="wp-block-heading" id="h-ماشین-مجازی-در-مقابل-داکر"><strong>ماشین مجازی در مقابل داکر</strong></h2>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1014" height="429" src="https://blog.hamravesh.com/blog/wp-content/uploads/2024/01/Docker-vs-virtual-machine.png" alt="تفاوت داکر و ماشین مجازی" class="wp-image-1735" srcset="https://hamravesh.com/blog/wp-content/uploads/2024/01/Docker-vs-virtual-machine.png 1014w, https://hamravesh.com/blog/wp-content/uploads/2024/01/Docker-vs-virtual-machine-300x127.png 300w, https://hamravesh.com/blog/wp-content/uploads/2024/01/Docker-vs-virtual-machine-768x325.png 768w" sizes="auto, (max-width: 1014px) 100vw, 1014px" /></figure>



<p>ماشین مجازی و <a href="https://hamravesh.com/blog/what-is-docker/"><strong>داکر </strong></a>اگرچه در بیشتر حالت‌ها با یک هدف (اجرای یک نرم افزار در محیط‌های مختلف) استفاده می‌شوند، اما تفاوت‌های ساختاری بسیار زیادی با همدیگر دارند. در ادامه می‌توانید به صورت خلاصه با برخی از اصلی‌ترین تفاوت‌ها آشنا شوید.</p>



<figure class="wp-block-table"><table><tbody><tr><td class="has-text-align-center" data-align="center"></td><td class="has-text-align-center" data-align="center"><strong>داکر</strong></td><td class="has-text-align-center" data-align="center"><strong>ماشین مجازی</strong></td></tr><tr><td class="has-text-align-center" data-align="center"><strong>مدت زمان راه‌اندازی</strong></td><td class="has-text-align-center" data-align="center">در چند ثانیه اجرا می‌شود</td><td class="has-text-align-center" data-align="center">معمولا نسبت به داکر کُندتر عمل می‌کند</td></tr><tr><td class="has-text-align-center" data-align="center"><strong>معماری اجرایی</strong></td><td class="has-text-align-center" data-align="center">داکر برای اجرا شدن از Execution Engine یا موتور اجرایی مستقل (Docker Engine) استفاده می‌کند.</td><td class="has-text-align-center" data-align="center">ماشین مجازی از تکنولوژی Hypervisor بهره می‌گیرد.</td></tr><tr><td class="has-text-align-center" data-align="center"><strong>استفاده از RAM و منابع</strong></td><td class="has-text-align-center" data-align="center">داکر میزان بسیار کمی از حافظه اصلی را اشغال می‌کند و میزان مصرف بهینه‌تری از منابع دارد</td><td class="has-text-align-center" data-align="center">ماشین مجازی از منابع سخت‌افزاری بیشتری استفاده کرده و به همین دلیل پرهزینه‌تر است</td></tr><tr><td class="has-text-align-center" data-align="center"><strong>فرایند دیپلوی کردن</strong></td><td class="has-text-align-center" data-align="center">دیپلوی در داکر فرایند بسیار ساده‌ای داشته و از طریق ساختار Image انجام می‌شود.</td><td class="has-text-align-center" data-align="center">فرایند دیپلوی در ماشین مجازی سخت‌تر از داکر بوده و برای استقرار چند اپلیکیشن نیاز به ایجاد نمونه‌های متعدد از ماشین مجازی دارد</td></tr></tbody></table></figure>



<h2 class="wp-block-heading" id="h-جمع-بندی"><strong>جمع‌بندی</strong></h2>



<p>ماشین مجازی یکی از تکنولوژی‌های بسیار مهم برای اجرا نرم‌افزار در محیط‌های مختلف است که به شما قابلیت‌های بسیار زیادی را می‌دهد. در این مطلب از وبلاگ هم‌روش، ما به صورت کلی با چیستی و معماری ماشین مجازی آشنا شدیم و همچنین مزایا و معایب آن را بررسی کردیم. در آینده نیز مطالب بیشتری در ارتباط با همین موضوع منتشر خواهیم کرد.</p>



<p></p>
<p>The post <a href="https://hamravesh.com/blog/what-is-virtual-machine/">ماشین مجازی (Virtual Machine) چیست؟</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/what-is-virtual-machine/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>کانتینر رجیستری (container registry) چیست؟</title>
		<link>https://hamravesh.com/blog/what-is-container-registry/</link>
					<comments>https://hamravesh.com/blog/what-is-container-registry/#respond</comments>
		
		<dc:creator><![CDATA[هم‌روش]]></dc:creator>
		<pubDate>Sun, 31 Dec 2023 14:30:00 +0000</pubDate>
				<category><![CDATA[داکر]]></category>
		<category><![CDATA[مقالات]]></category>
		<guid isPermaLink="false">https://hamravesh.com/blog/?p=1650</guid>

					<description><![CDATA[<p>استفاده از اپلیکیشن‌های کانتینری مانند هر فناوری دیگری نیازمندی‌های جدیدی نیز با خود پدید آورده است. کانتینر رجیستری یکی از همین فناوری‌هایی است که با رواج اپلیکیشن‌های کانتینری‌شده جای خالی‌اش احساس می‌شد.&#160; در ادامه تعریفی از کانتینر رجیستری ارائه می‌دهیم و به مزایا و ویژگی‌های آن می‌پردازیم. کانتینر رجیستری چیست؟ کانتینر رجیستری (container registry)، ریپازیتوری-یا [&#8230;]</p>
<p>The post <a href="https://hamravesh.com/blog/what-is-container-registry/">کانتینر رجیستری (container registry) چیست؟</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>استفاده از اپلیکیشن‌های کانتینری مانند هر فناوری دیگری نیازمندی‌های جدیدی نیز با خود پدید آورده است.</p>



<p>کانتینر رجیستری یکی از همین فناوری‌هایی است که با رواج اپلیکیشن‌های کانتینری‌شده جای خالی‌اش احساس می‌شد.<strong>&nbsp;</strong></p>



<p>در ادامه تعریفی از کانتینر رجیستری ارائه می‌دهیم و به مزایا و ویژگی‌های آن می‌پردازیم.</p>



<h2 class="wp-block-heading" id="h-کانتینر-رجیستری-چیست"><strong>کانتینر رجیستری چیست؟</strong></h2>



<p>کانتینر رجیستری (container registry)، ریپازیتوری-یا مجموعه‌ای از ریپازیتوری‌‌هایی- است که از آن برای ذخیره‌سازی و دسترسی به ایمیج‌های کانتینری استفاده می‌شود.</p>



<p>برای روشن‌تر شدن این مفهوم بگذارید با یک مثال پیش برویم. احتمالا شما تجربه استفاده از داکرهاب یا سرویس‌های مشابه را دارید یا دست‌کم با نحوه کار این سرویس‌ها آشنا هستید.&nbsp;</p>



<p>داکرهاب سرویسی ابری است که شرکت داکر ارائه داده است. با استفاده از این سرویس فرایند ذخیره‌، نگه‌داری و مدیریت ایمیج‌های داکری شما بسیار راحت‌تر می‌شود.&nbsp;</p>



<p>با داشتن چنین سرویس‌های متمرکزی شما می‌توانید ایمیج‌های خودتان را در آن قرار دهید و هر موقع و هر جایی که به این ایمیج‌ها نیاز داشتید آن را در سیستم لوکال خودتان داشته باشید.</p>



<p>اگر شما قبل از این از داکرهاب یا مواردی شبیه به آن استفاده کرده‌اید باید بگوییم که تجربه استفاده از رجیستری را دارید.&nbsp;</p>



<p>در واقع داکرهاب یک سرویس رجیستری عمومی است. در ادامه مقاله با مفهوم رجیستری عمومی و خصوصی هم آشنا خواهید شد.</p>



<h2 class="wp-block-heading" id="h-چرا-به-کانتینر-رجیستری-نیاز-داریم"><strong>چرا به کانتینر رجیستری نیاز داریم؟</strong></h2>



<p>اوایل دهه 2010، با موفقیت‌های داکر کم‌کم استفاده از اپلیکیشن‌های کانتینری‌شده در حال افزایش بود.</p>



<p>در چنین شرایطی، خلا سرویس متمرکزی که بتوان از آن برای مدیریت ایمیج‌ها استفاده کرد احساس می‌شد.&nbsp;</p>



<p>پاسخ توسعه‌دهندگان داکر به این نیاز سرویس داکرهاب بود که پیش از این درباره آن صحبت کردیم.</p>



<p>با استفاده از داکرهاب کاربران می‌توانند هم به ریپازیتوری‌های اوپن‌سورس ایمیج‌های داکری دسترسی داشته باشند و هم می‌توانند با استفاده از این سرویس ریپازیتوری‌های خصوصی خودشان را بسازند.</p>



<h2 class="wp-block-heading" id="h-تفاوت-ریپازیتوری-و-رجیستری"><strong>تفاوت ریپازیتوری و رجیستری؟</strong></h2>



<p>در تعریف مفهوم کانتینر رجیستری که ابتدای این مقاله آوردیم از دو مفهوم مهم استفاده شده است: ریپازیتوری و رجیستری.</p>



<p>شاید بد نباشد برای درک بهتر کانتینر رجیستری در اینجا کمی هم درباره تفاوت این دو مفهوم توضیح دهیم.&nbsp;</p>



<p>ریپازیتوری جایی است که ما نسخه‌های مختلف از یک ایمیج را در آن نگه‌داری می‌کنیم و رجیستری مجموعه‌ای از این ریپازیتوری‌هاست. فرض کنید که وارد کتابخانه‌ای شده‌اید که در هر کدام از قفسه‌های آن چاپ‌های مختلفی از یک کتاب واحد قرار داده شده است. در این مثال هر کدام از قفسه‌ها را می‌توان یک ریپازیتوری در نظر گرفت و کل کتابخانه یک رجیستری است.</p>



<p class="has-cyan-bluish-gray-background-color has-background">مقاله پیشنهادی: <a href="https://hamravesh.com/blog/what-is-container/">کانتینر ابری چیست؟</a></p>



<h2 class="wp-block-heading" id="h-رجیستری-عمومی-و-رجیستری-خصوصی"><strong>رجیستری عمومی و رجیستری خصوصی</strong></h2>



<p>در رجیستری‌های عمومی مانند داکرهاب توسعه‌دهندگان می‌توانند روی ایمیج‌های متن‌باز کار کنند و آن را با بقیه توسعه‌دهندگان در جهان به اشتراک بگذارند. علی‌رغم مزایایی که رجیستری‌های عمومی دارند، این نوع از رجیستری‌های همه نیازهای کسب‌وکارها را پوشش نمی‌دهند. برای مثال کسب‌وکارها برای‌شان مسئله امنیت و میزان کنترل بر رجیستری مهم است.</p>



<p>این دغدغه‌ها را نمی‌توان از طریق رجیستری عمومی برطرف کرد. رجیستری‌های خصوصی دقیقا برای پاسخ‌گویی به چنین نیازهایی شکل گرفته‌اند. با استفاده از رجیستری‌های خصوصی کسب‌وکارها کنترل بیشتری بر رجیستری‌شان دارند و قادرند ایمیج‌ها را درون شبکه داخلی خودشان مدیریت کنند.</p>



<h2 class="wp-block-heading" id="h-مزایای-استفاده-از-کانتینر-رجیستری"><strong>مزایای استفاده از کانتینر رجیستری</strong></h2>



<h3 class="wp-block-heading" id="h-nbsp-ذخیره-سازی-ایمیج-ها">&nbsp;ذخیره‌سازی ایمیج‌ها</h3>



<p>کانتینر رجیستری محیطی امن و مقیاس‌پذیری برای ذخیره‌سازی ایمیج‌ها فراهم می‌کند.</p>



<h3 class="wp-block-heading" id="h-nbsp-کنترل-دسترسی">&nbsp;کنترل دسترسی</h3>



<p>با کنترل دسترسی‌هایی دقیقی که رجیستری‌ها فراهم می‌کنند، می‌توان فرایندهای pull، push و مدیریت ایمیج‌ها را به بهترین شکل ممکن انجام داد.</p>



<h3 class="wp-block-heading" id="h-ورژن-بندی-ایمیج-ها">ورژن‌بندی ایمیج‌ها</h3>



<p>با ذخیره‌سازی جداگانه هر کدام از ایمیج‌ها، در مواقع ضروری امکان roll back به ورژن‌های قبلی ایمیج‌ها وجود دارد.</p>



<h3 class="wp-block-heading" id="h-webhooks">Webhooks</h3>



<p>در داکر رجیستری با استفاده از نوتیفیکیشن‌ می‌توان از هر نوع تغییری در ایمیج‌ها باخبر شد. این ویژگی فرایند خودکارسازی فرایندها را تسهیل می‌کند.</p>



<h3 class="wp-block-heading" id="h-یکپارچه-سازی-و-ادغام"><strong>یکپارچه‌سازی و ادغام</strong></h3>



<p>بسیاری از رجیستری‌ها با پایپ‌لاین‌های CI/CD و ابزارهای ارکستریشن مانند کوبرنتیز بسیار راحت ادغام می‌شوند.</p>



<h2 class="wp-block-heading" id="h-چرا-از-کانتینر-رجیستری-استفاده-می-کنیم"><strong>چرا از کانتینر رجیستری استفاده می‌کنیم؟</strong></h2>



<p>دلایل زیادی برای چرایی استفاده از کانتینر رجیستری وجود دارد. در اینجا ما به چند مورد از این دلایل اشاره می‌کنیم:</p>



<ul class="wp-block-list">
<li>داشتن کنترل بر روی ابزارهای CLI و API</li>



<li>فراهم شدن امکان ساختن رپلیکا از روی ایمیج‌های رجیستری‌های دیگر</li>



<li>قابلیت ساختن کاربران با دسترسی‌های مختلف</li>



<li>کنترل بر روی حجم فضای ذخیره‌سازی</li>



<li>داشتن امکان پویش امنیتی ایمیج‌ها</li>
</ul>



<p>با استفاده از رجیستری شما روی محل ذخیره‌سازی ایمیج‌هایتان کنترل دارید.</p>



<h2 class="wp-block-heading" id="h-سرویس-کانتینر-رجیستری-هم-روش">سرویس کانتینر رجیستری هم‌روش</h2>



<p>با استفاده از <a href="https://docs.hamravesh.com/container-registry/introduction/">سرویس کانتینر رجیستری</a> اختصاصی هم‌روش ایمیج‌های شما در محیطی امن ذخیره‌ می‌شود.  در این سرویس، به‌طور پیش‌فرض برای هر سازمان یک کانتینر رجیستری اختصاصی فعال است و ایمیج‌های بیلدشده برای آن سازمان به‌طور اتوماتیک در رجیستری پوش می‌شود. </p>
<p>The post <a href="https://hamravesh.com/blog/what-is-container-registry/">کانتینر رجیستری (container registry) چیست؟</a> appeared first on <a href="https://hamravesh.com/blog">بلاگ هم‌روش</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamravesh.com/blog/what-is-container-registry/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
