| # --- START OF Dockerfile --- | |
| # مرحله ۱: انتخاب ایمیج پایه | |
| # از یک ایمیج رسمی و سبک پایتون استفاده میکنیم تا حجم نهایی کانتینر کم باشد. | |
| FROM python:3.11-slim | |
| # تنظیم متغیرهای محیطی برای عملکرد بهتر پایتون در داکر | |
| ENV PYTHONDONTWRITEBYTECODE 1 | |
| ENV PYTHONUNBUFFERED 1 | |
| # مرحله ۲: تنظیم دایرکتوری کاری | |
| # تمام دستورات بعدی در این مسیر داخل کانتینر اجرا خواهند شد. | |
| WORKDIR /app | |
| # مرحله ۳: کپی و نصب نیازمندیها | |
| # ابتدا فقط فایل نیازمندیها را کپی میکنیم. این کار به داکر اجازه میدهد | |
| # تا از لایه کش شده استفاده کند و در صورت تغییر نکردن این فایل، | |
| # مراحل نصب را دوباره انجام ندهد و سرعت ساخت ایمیج بالا برود. | |
| COPY requirements.txt . | |
| # نصب کتابخانهها با استفاده از pip | |
| # --no-cache-dir: از ذخیره کش pip جلوگیری میکند تا حجم ایمیج کمتر شود. | |
| RUN pip install --no-cache-dir -r requirements.txt | |
| # مرحله ۴: کپی کردن سورس کد برنامه | |
| # حالا تمام فایلهای پروژه (app.py, پوشه templates و ...) را به دایرکتوری کاری کپی میکنیم. | |
| COPY . . | |
| # مرحله ۵: باز کردن پورت | |
| # به داکر اعلام میکنیم که این کانتینر روی پورت 7860 گوش میدهد. | |
| # این پورت استاندارد هاگینگ فیس برای Gradio و اپلیکیشنهای مشابه است. | |
| EXPOSE 7860 | |
| # مرحله ۶: دستور اجرا | |
| # دستوری که هنگام استارت شدن کانتینر اجرا میشود. | |
| # uvicorn را برای اجرای اپلیکیشن FastAPI خود فراخوانی میکنیم. | |
| # --host 0.0.0.0: باعث میشود اپلیکیشن از خارج کانتینر قابل دسترس باشد. | |
| CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"] | |
| # --- END OF Dockerfile --- |