tahamajs/IE / Docker_Structured_Master_Documentation_Farsi.html
tahamajs's picture
download
raw
18.1 kB
<!DOCTYPE html>
<html lang="fa" dir="rtl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>درس‌نامه و سرفصل‌بندی جامع داکرایز کردن پروژه IE Research Platform 2.0</title>
<style>
@import url('https://cdn.jsdelivr.net/gh/rastikerdar/vazirmatn@v33.003/Vazirmatn-font-face.css');
:root {
--primary: #1e3a8a;
--primary-light: #2563eb;
--secondary: #0f172a;
--accent: #0d9488;
--accent-amber: #d97706;
--bg: #f8fafc;
--card: #ffffff;
--text: #1e293b;
--border: #cbd5e1;
--code-bg: #0f172a;
}
body {
font-family: 'Vazirmatn', -apple-system, sans-serif;
background-color: var(--bg);
color: var(--text);
line-height: 1.9;
margin: 0;
padding: 40px;
direction: rtl;
}
.container {
max-width: 1100px;
margin: 0 auto;
background: var(--card);
padding: 50px;
border-radius: 16px;
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.05);
border: 1px solid var(--border);
}
header {
text-align: center;
border-bottom: 4px solid var(--primary-light);
padding-bottom: 25px;
margin-bottom: 35px;
}
h1 {
color: var(--primary);
font-size: 26pt;
font-weight: 900;
margin-bottom: 10px;
}
.subtitle {
color: #64748b;
font-size: 13pt;
font-weight: 600;
}
.section-banner {
background: linear-gradient(135deg, #1e3a8a 0%, #0f172a 100%);
color: #ffffff;
padding: 16px 22px;
border-radius: 10px;
font-size: 16pt;
font-weight: 800;
margin-top: 45px;
margin-bottom: 25px;
display: flex;
align-items: center;
gap: 12px;
box-shadow: 0 4px 12px rgba(30, 58, 138, 0.2);
}
h2 {
color: var(--secondary);
font-size: 15pt;
font-weight: 800;
border-right: 5px solid var(--primary-light);
padding-right: 12px;
margin-top: 30px;
margin-bottom: 18px;
background: #f1f5f9;
padding-top: 6px;
padding-bottom: 6px;
border-radius: 0 6px 6px 0;
}
h3 {
color: var(--primary-light);
font-size: 12.5pt;
font-weight: 700;
margin-top: 22px;
margin-bottom: 12px;
border-bottom: 1px dashed #cbd5e1;
padding-bottom: 5px;
}
p {
text-align: justify;
margin-bottom: 16px;
font-size: 10.5pt;
}
ul, ol {
padding-right: 22px;
margin-bottom: 20px;
}
li {
margin-bottom: 8px;
font-size: 10.2pt;
}
code {
font-family: 'Courier New', monospace;
background-color: #f1f5f9;
color: #0f172a;
padding: 2px 6px;
border-radius: 4px;
font-size: 9pt;
direction: ltr;
display: inline-block;
}
pre {
background-color: var(--code-bg);
color: #f8fafc;
padding: 18px;
border-radius: 8px;
overflow-x: auto;
direction: ltr;
text-align: left;
font-family: 'Courier New', monospace;
font-size: 8.8pt;
line-height: 1.5;
margin: 20px 0;
}
.info-box {
background-color: #f0fdf4;
border-right: 5px solid #16a34a;
padding: 16px;
border-radius: 6px;
margin: 20px 0;
font-size: 10pt;
}
.warning-box {
background-color: #fffbe6;
border-right: 5px solid #d97706;
padding: 16px;
border-radius: 6px;
margin: 20px 0;
font-size: 10pt;
}
table {
width: 100%;
border-collapse: collapse;
margin: 22px 0;
font-size: 9.5pt;
}
th, td {
border: 1px solid var(--border);
padding: 10px 12px;
text-align: right;
}
th {
background-color: #f1f5f9;
color: var(--secondary);
font-weight: 700;
}
tr:nth-child(even) {
background-color: #f8fafc;
}
.toc-box {
background: #f8fafc;
border: 1px solid #cbd5e1;
border-radius: 12px;
padding: 25px;
margin-bottom: 40px;
}
.toc-title {
font-size: 15pt;
font-weight: 800;
color: var(--primary);
margin-bottom: 15px;
border-bottom: 2px solid var(--primary-light);
padding-bottom: 8px;
}
.toc-section {
font-weight: 800;
color: var(--secondary);
margin-top: 15px;
margin-bottom: 8px;
font-size: 11pt;
}
.toc-sublist {
padding-right: 20px;
list-style: square;
}
.toc-sublist a {
color: var(--primary-light);
text-decoration: none;
font-weight: 600;
}
.qa-card {
background: #ffffff;
border: 1px solid var(--border);
border-radius: 8px;
margin-bottom: 18px;
overflow: hidden;
}
.qa-header {
background: #eff6ff;
color: #1e40af;
padding: 12px 16px;
font-size: 11pt;
font-weight: 700;
border-bottom: 1px solid #bfdbfe;
}
.qa-body {
padding: 16px;
font-size: 10pt;
text-align: justify;
}
@media print {
body { padding: 0; background: white; }
.container { box-shadow: none; border: none; max-width: 100%; padding: 0; }
}
</style>
</head>
<body>
<div class="container">
<header>
<h1>درس‌نامه و سرفصل‌بندی جامع داکر (Docker Structured Master Class)</h1>
<div class="subtitle">پلتفرم تحقیقاتی و علمی IE Research Platform 2.0</div>
</header>
<!-- ساختار کامل سرفصل‌ها -->
<div class="toc-box">
<div class="toc-title">📌 ساختار کامل و استاندارد سرفصل‌های آموزشی این مستند</div>
<div class="toc-section">بخش اول: مفاهیم بنیادی و نظری (Theoretical Foundations)</div>
<ul class="toc-sublist">
<li><a href="#f1">فصل ۱: فلسفه ظهور داکر و ایزوله‌سازی در لایه سیستم‌عامل</a></li>
<li><a href="#f2">فصل ۲: تحلیل مقایسه‌ای ماشین مجازی (VM) و کانتینر (Container)</a></li>
<li><a href="#f3">فصل ۳: اجزای اصلی داکر (Image, Container, Dockerfile)</a></li>
</ul>
<div class="toc-section">بخش دوم: پیاده‌سازی عملیاتی کانتینرها در پروژه (Project Implementation)</div>
<ul class="toc-sublist">
<li><a href="#f4">فصل ۴: داکرایز کردن فرانت‌اند (React/Vite) با الگوی Multi-Stage</a></li>
<li><a href="#f5">فصل ۵: طراحی و کانفیگ ریورس پروکسی (Nginx Reverse Proxy)</a></li>
<li><a href="#f6">فصل ۶: داکرایز کردن بک‌اند (Spring Boot Java 17) با الگوی Multi-Stage</a></li>
<li><a href="#f7">فصل ۷: کانتینریزه‌سازی دیتابیس و مدیریت حافظه ماندگار (Database & Volumes)</a></li>
<li><a href="#f8">فصل ۸: ارکستراسیون با Docker Compose و شبکه‌سازی</a></li>
</ul>
<div class="toc-section">بخش سوم: امنیت، اتوماسیون و تحویل پروژه (Security, Automation & Defense)</div>
<ul class="toc-sublist">
<li><a href="#f9">فصل ۹: تدابیر امنیتی و مدیریت Secretها</a></li>
<li><a href="#f10">فصل ۱۰: اتوماسیون با اسکریپت خودکار (run_docker.sh)</a></li>
<li><a href="#f11">فصل ۱۱: کتابچه طلایی پاسخ به سوالات تحویل پروژه و دفاعیه (Q&A Guide)</a></li>
</ul>
</div>
<!-- بخش اول -->
<div class="section-banner">🔷 بخش اول: مفاهیم بنیادی و نظری (Theoretical Foundations)</div>
<section id="f1">
<h2>فصل ۱: فلسفه ظهور داکر و ایزوله‌سازی در لایه سیستم‌عامل</h2>
<h3>۱-۱. چالش‌های سنتی توسعه نرم‌افزار</h3>
<p>
توسعه نرم‌افزارهای پیچیده نیازمند ابزارها، کتابخانه‌ها و مفسرهای مشخصی است. تا پیش از داکر، ناهماهنگی نسخه‌ها روی سیستم توسعه‌دهندگان و سرورهای پروداکشن باعث خطای "روی سیستم من کار می‌کرد" می‌شد. داکر با بسته‌بندی تمام پیش‌نیازها درون کانتینر این چالش را حل نمود.
</p>
<h3>۱-۲. تکنولوژی‌های هسته لینوکس در ایزوله‌سازی</h3>
<p>
داکر برای ایزوله‌سازی از قابلیت‌های هسته لینوکس استفاده می‌کند:
</p>
<ul>
<li><strong>Namespaces:</strong> ایزوله‌سازی پروسه‌ها (PID)، کارت شبکه (NET)، نقطه اتصال فایل‌سیستم (MNT) و کاربران (USER).</li>
<li><strong>Control Groups (cgroups):</strong> محدودسازی و مدیریت میزان استفاده کانتینرها از CPU، حافظه RAM و I/O دیسک.</li>
</ul>
</section>
<section id="f2">
<h2>فصل ۲: تحلیل مقایسه‌ای ماشین مجازی (VM) و کانتینر (Container)</h2>
<h3>۲-۱. بررسی معماری Hypervisor در برابر Docker Engine</h3>
<p>
ماشین مجازی نیازمند Hypervisor و سیستم‌عامل کامل میهمان (Guest OS) برای هر VM است. در مقابل، داکر بدون Guest OS بوده و کانتینرها مستقیماً از **Host OS Kernel** استفاده می‌کنند.
</p>
<h3>۲-۲. جدول مقایسه ۲۰ معیاره کارایی</h3>
<table>
<thead>
<tr>
<th>معیار</th>
<th>ماشین مجازی (VM)</th>
<th>کانتینر داکر (Container)</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>معماری</strong></td>
<td>مجازی‌سازی سخت‌افزار با Hypervisor</td>
<td>مجازی‌سازی لایه OS با Docker Engine</td>
</tr>
<tr>
<td><strong>Guest OS</strong></td>
<td>دارد (چند گیگابایت حجیم)</td>
<td>ندارد (Kernel Sharing)</td>
</tr>
<tr>
<td><strong>زمان بوت</strong></td>
<td>کند (چندین دقیقه)</td>
<td>آنی (چند ثانیه)</td>
</tr>
<tr>
<td><strong>مصرف حافظه</strong></td>
<td>سنگین و رزرو شده</td>
<td>فقط به اندازه پروسه برنامه</td>
</tr>
</tbody>
</table>
</section>
<section id="f3">
<h2>فصل ۳: اجزای اصلی داکر (Image, Container, Dockerfile)</h2>
<h3>۳-۱. مفهوم Image و لایه‌بندی Overlay2</h3>
<p>
ایمیج داکر یک فایل Read-Only چندلایه‌ای بر پایه Union File System است.
</p>
<h3>۳-۲. مفهوم Container و لایه Writable</h3>
<p>
کانتینر نمونه اجرایی Image است که داکر لایه قابل نوشتن (Writable Layer) روی آن می‌افزاید.
</p>
</section>
<!-- بخش دوم -->
<div class="section-banner">🔷 بخش دوم: پیاده‌سازی عملیاتی کانتینرها در پروژه (Project Implementation)</div>
<section id="f4">
<h2>فصل ۴: داکرایز کردن فرانت‌اند (React/Vite) با الگوی Multi-Stage</h2>
<h3>۴-۱. علل عدم استفاده از yarn dev در پروداکشن</h3>
<p>
دستور `yarn dev` برای توسعه زنده (HMR) است؛ کدها را مینیفای نمی‌کند و حافظه بالایی اشغال می‌کند.
</p>
<h3>۴-۲. سورس‌کد کامل <code>front/Dockerfile</code>:</h3>
<pre><code>FROM node:20-alpine AS builder
WORKDIR /app
COPY package.json yarn.lock ./
RUN yarn install --frozen-lockfile
COPY . .
RUN yarn build
FROM nginx:1.27-alpine AS runtime
COPY nginx.conf /etc/nginx/conf.d/default.conf
COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]</code></pre>
</section>
<section id="f5">
<h2>فصل ۵: طراحی و کانفیگ ریورس پروکسی (Nginx Reverse Proxy)</h2>
<h3>۵-۱. مفهوم علمی Reverse Proxy</h3>
<p>
Nginx درخواست‌های مرورگر را روی پورت 80 دریافت کرده و به کانتینرهای بک‌اند هدایت می‌کند.
</p>
<h3>۵-۲. سورس‌کد کامل <code>front/nginx.conf</code>:</h3>
<pre><code>server {
listen 80;
root /usr/share/nginx/html;
location /api/ {
proxy_pass http://backend:9092/api/;
}
location /ws {
proxy_pass http://backend:9093/ws;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location / {
try_files $uri $uri/ /index.html;
}
}</code></pre>
</section>
<section id="f6">
<h2>فصل ۶: داکرایز کردن بک‌اند (Spring Boot Java 17) با الگوی Multi-Stage</h2>
<h3>۶-۱. تحلیل سورس‌کد <code>infra/Dockerfile</code>:</h3>
<pre><code>FROM maven:3.9-eclipse-temurin-17 AS builder
WORKDIR /app
COPY pom.xml .
RUN mvn dependency:go-offline -B || true
COPY src ./src
RUN mvn clean package -DskipTests -B
FROM eclipse-temurin:17-jre-jammy AS runtime
RUN groupadd --system appgroup && useradd --system --gid appgroup appuser
WORKDIR /app
COPY --from=builder /app/target/*.jar app.jar
USER appuser
EXPOSE 9092 9093
ENTRYPOINT ["java", "-jar", "app.jar"]</code></pre>
</section>
<section id="f7">
<h2>فصل ۷: کانتینریزه‌سازی دیتابیس و مدیریت حافظه ماندگار (Database & Volumes)</h2>
<h3>۷-۱. داکرایز کردن MySQL 8.0 و مفهوم Volume</h3>
<p>
کانتینرها Ephemeral (موقتی) هستند. با استفاده از Named Volume (<code>db-data:/var/lib/mysql</code>)، داده‌های دیتابیس به صورت ماندگار روی Host حفظ می‌شوند.
</p>
</section>
<section id="f8">
<h2>فصل ۸: ارکستراسیون با Docker Compose و شبکه‌سازی</h2>
<h3>۸-۱. سورس‌کد کامل <code>docker-compose.yml</code>:</h3>
<pre><code>services:
db:
image: mysql:8.0.36
volumes:
- db-data:/var/lib/mysql
backend:
build:
context: .
dockerfile: infra/Dockerfile
depends_on:
db:
condition: service_healthy
frontend:
build:
context: ./front
ports:
- "80:80"
networks:
ierepo-network:
driver: bridge
volumes:
db-data:</code></pre>
</section>
<!-- بخش سوم -->
<div class="section-banner">🔷 بخش سوم: امنیت، اتوماسیون و تحویل پروژه (Security, Automation & Defense)</div>
<section id="f9">
<h2>فصل ۹: تدابیر امنیتی و مدیریت Secretها</h2>
<p>ایزوله‌سازی کلیدها در فایل `.env` و اجرای کانتینرها با کاربر غیر-ریشه `appuser`.</p>
</section>
<section id="f10">
<h2>فصل ۱۰: اتوماسیون با اسکریپت خودکار (run_docker.sh)</h2>
<p>اجرای خودکار با `./scripts/run_docker.sh up` و تنظیم میرورهای ایرانی.</p>
</section>
<section id="f11">
<h2>فصل ۱۱: کتابچه طلایی پاسخ به سوالات تحویل پروژه و دفاعیه (Q&A Guide)</h2>
<div class="qa-card">
<div class="qa-header">❓ سوال کلیدی: چرا از Multi-stage build استفاده شد؟</div>
<div class="qa-body">جهت جداسازی ابزارهای کامپایل سنگین (Node/Maven) از محیط پروداکشن، کاهش ۸۰ درصدی حجم ایمیج و عدم لو رفتن سورس‌کد خام.</div>
</div>
</section>
</div>
</body>
</html>

Xet Storage Details

Size:
18.1 kB
·
Xet hash:
06b4e452a453d6cb8c96507018373556c855438f25e9c74f7d4afe10f1580f17

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.