| <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.