Skip to content

Latest commit

 

History

History
162 lines (106 loc) · 14 KB

File metadata and controls

162 lines (106 loc) · 14 KB

دوره Docker Bootcamp: تسلط بر Docker با پروژه‌های واقعی

این سند، نکات کلیدی دوره را خلاصه می‌کند. اگر فرصت دارید، دیدن کامل خود دوره به‌شدت توصیه می‌شود.

قبل از شروع

  • من نکات مهم دوره‌های مفید را خلاصه می‌کنم تا بتوانید سریع‌تر یاد بگیرید و مرور کنید.
  • کافی است روی لینک‌های Ask AI کلیک کنید تا در مورد هر مبحثی که می‌خواهید، عمیق‌تر کاوش کنید.

AI-Powered buttons

Teach Me: 5 Years Old | Beginner | Intermediate | Advanced | (reset auto redirect)

Learn Differently: Analogy | Storytelling | Cheatsheet | Mindmap | Flashcards | Practical Projects | Code Examples | Common Mistakes

Check Understanding: Generate Quiz | Interview Me | Refactor Challenge | Assessment Rubric | Next Steps

؜‎؜۱. معرفی دوره و چیزی که خواهید ساخت

دوره با یک نمای کلی شروع می‌شود: یاد می‌گیرید چطور اپلیکیشن‌ها و وابستگی‌هایشان را داخل Docker containerها پکیج کنید، web appها، microserviceها و databaseها را اجرا کنید و در نهایت همه‌چیز را با Docker Compose اورکِستریت کنید.
ستاره دوره یک اپلیکیشن کامل e-commerce است که از هفت microservice (با زبان‌های Python/Flask، Node.js، Java/Spring Boot، Go، Ruby و غیره) تشکیل شده و به شش database مختلف وصل است. در پایان، یک سیستم شبیه دنیای واقعی را containerize کرده‌اید؛ چیزی شبیه کاری که شرکت‌های بزرگ انجام می‌دهند.

مثال: پروژه نهایی یک فروشگاه آنلاین کامل است که در آن کاربر می‌تواند ثبت‌نام کند، محصولات را ببیند، موجودی را مدیریت کند، سفارش ثبت کند و حتی تیکت پشتیبانی باز کند — و همه این‌ها داخل containerهای ایزوله شده اجرا می‌شوند.

Ask AI: پروژه e-commerce واقعی با Docker

تنظیم محیط Docker

در این بخش، مخزن (repo) نسبتاً بزرگ منابع دوره را دانلود می‌کنید، Docker Desktop را نصب می‌کنید (با توضیح جدا برای Apple Silicon و Intel)، با حساب Docker Hub وارد می‌شوید، VS Code را نصب می‌کنید و افزونه رسمی Docker را اضافه می‌کنید.

مثال: بعد از نصب، Docker Dashboard را باز می‌کنید و آیکون نهنگ (whale) را می‌بینید که یعنی Docker engine آماده کار است.

Ask AI: نصب Docker Desktop و افزونه VS Code

چرا Docker به‌وجود آمد – مشکل «روی سیستم من کار می‌کند»

مشکل کلاسیک: یک اپ روی لپ‌تاپ دولوپر عالی کار می‌کند اما در testing یا production به خاطر نبودن یک library، تفاوت نسخه OS یا conflict با processهای دیگر کرش می‌کند.
؜Virtual Machineها مشکل isolation را حل کردند اما سنگین هستند (هر VM یک OS کامل دارد). Docker containerها kernel سیستم‌عامل میزبان را به‌اشتراک می‌گذارند، در عرض چند میلی‌ثانیه بالا می‌آیند و منابع خیلی کمتری مصرف می‌کنند.

مثال: روی یک سرور می‌توانید صدها یا حتی هزاران container اجرا کنید، در حالی که فقط چند VM می‌توانید بالا بیاورید — به همین خاطر است که شرکت‌هایی مثل Netflix، Spotify و PayPal کاملاً روی containerها سرمایه‌گذاری کرده‌اند.

Ask AI: چرا به‌جای VM از Docker استفاده کنیم

اجرای اولین اپلیکیشن‌ها داخل container (بدون نصب لوکال!)

در این قسمت workflow اصلی ‎docker run را یاد می‌گیرید: یک image رسمی را pull می‌کنید، با ‎-v کدتان را mount می‌کنید و app را اجرا می‌کنید. برای Python، Java، Go، Ruby و … همین روال را دارید و نیازی نیست چیزی را روی لپ‌تاپتان نصب کنید.

مثال:

docker run --rm --name python-container -v "/absolute/path/to/code":/app python:3.8-slim python /app/pythonapp.py

برای تنظیم environment variableها مثل مثال Go، می‌توانید ‎-e MESSAGE="Hello from Docker" اضافه کنید یا مثل مثال Python، argumentهای خط فرمان را پاس بدهید.

Ask AI: docker run، volumeها و environment variableها

ساخت imageهای سفارشی با Dockerfile

به‌جای این‌که هر بار یک دستور طولانی ‎docker run بنویسید، یک Dockerfile (با دستورهای ‎FROM، ‎WORKDIR، ‎COPY، ‎CMD) می‌نویسید و یک image قابل‌استفاده‌مجدد می‌سازید.

مثال Dockerfile برای یک اپ Python:

FROM python:3.8-slim
WORKDIR /app
COPY . .
CMD ["python", "pythonapp.py"]

بعد:

docker build -t mypythonapp:1.0 .
docker run --rm mypythonapp:1.0

همچنین ‎.dockerignore، multi-stage buildها و این‌که چرا slim imageها ترجیح داده می‌شوند هم توضیح داده می‌شود.

Ask AI: نوشتن Dockerfile و best practiceها

؜Docker Compose – مدیریت اپ‌های چند containerی

اینجا ده‌ها دستور جداگانه ‎docker run را با یک فایل ‎docker-compose.yml جایگزین می‌کنید. توی این فایل serviceها، portها، environment variableها، volumeها و ‎depends_on را تعریف می‌کنید.

مثال: یک پورتال ثبت نمره (grade-submission portal) داریم که از Flask frontend + Node API + MongoDB تشکیل شده و همگی با یک دستور ‎docker compose up بالا می‌آیند و با ‎docker compose down به‌صورت تمیز خاموش می‌شوند.

Ask AI: Docker Compose برای اپ‌های چند containerی

اجرای databaseها در Docker (MongoDB، MySQL، PostgreSQL)

یاد می‌گیرید چطور خیلی سریع databaseهای در حد production بالا بیاورید. imageهای رسمی همه‌چیز را هندل می‌کنند؛ فقط کافی است environment variableهای درست را پاس بدهید.

مثال کانفیگ MongoDB با data persistent:

mongo:
  image: mongo:latest
  container_name: mongo
  volumes:
    - mongo-data:/data/db

Ask AI: اجرای MongoDB، MySQL و PostgreSQL در Docker

؜‎؜حافظه پایدار با volumeها

داده‌های database وقتی container متوقف می‌شود از بین می‌روند — مگر این‌که از named volume استفاده کنید. مسیرهایی مثل ‎/var/lib/mysql یا ‎/data/db را به یک volume mount می‌کنید تا داده‌ها بعد از ‎docker compose down/up هم باقی بمانند.

مثال: حتی بعد از این‌که همه containerها را کامل پاک کردید، وقتی دوباره وارد اپ e-commerce می‌شوید، سفارش‌های قدیمی و اکانت‌های کاربری‌تان هنوز وجود دارند.

Ask AI: Docker volumeها و persistence داده

؜Push کردن imageها به Docker Hub و versioning

اینجا با ‎docker tag و ‎docker push تمرین می‌کنید، semantic versioning (مثل 1.0.0 → 2.0.0 بعد از اضافه کردن databaseها) را یاد می‌گیرید و می‌بینید چطور README خوبی بنویسید که هر کسی بتواند imageهایتان را pull و اجرا کند.

مثال: بعد از این‌که برای MongoDB، persistence اضافه کردید، نسخه را به ‎2.0.0 tag می‌زنید، push می‌کنید و بعد فایل‌های Compose را طوری آپدیت می‌کنید که از ‎yourusername/service:2.0.0 استفاده کنند.

Ask AI: push کردن به Docker Hub و versioning imageها

پروژه نهایی: اپ کامل e-commerce با ۷ microservice و ۶ database

در پایان همه‌چیز را کنار هم قرار می‌دهید: serviceهای Flask، Node، Spring Boot، Go و Ruby که هر کدام به یک database جدا (چهار Mongo، یک MySQL و یک PostgreSQL) وصل هستند. همه این‌ها با یک فایل Compose، environment variableها برای ارتباط بین serviceها، volumeهای persistent و imageهایی که روی Docker Hub push کرده‌اید، مدیریت می‌شوند.

مثال: وقتی یک سفارش ثبت می‌کنید، موجودی (inventory) کم می‌شود، سفارش در سرویس مدیریت سفارش‌ها ظاهر می‌شود و سرویس shipping هم نوتیفای می‌شود — همه‌چیز بین زبان‌ها و databaseهای مختلف، هماهنگ و همگام می‌ماند.

Ask AI: پروژه microservice e-commerce با Docker


درباره خلاصه‌کننده

من Ali Sol هستم، Backend Developer. اطلاعات بیشتر: