داکربندی جنگو (Dockerizing Django)


۰


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

بیایید ببینیم در این راهنما چه مواردی یاد می‌گیریم:

  1. ساخت سریع یک پروژه Django
  2. داکریزه کردن برنامه Django با دو روش:
  3. استفاده فقط از Dockerfile
  4. استفاده از Docker Compose (فایل .yml)
  5. شناخت سینتکس Dockerfile
  6. شناخت سینتکس فایل Docker Compose
  7. اعمال تغییرات لحظه‌ای در ایمیج داکر در حین تغییر فایل‌ها در لوکال (Volume mount)

گام 1: ساخت پروژه Django

ابتدا یک پروژه Django با نام dockertest بسازید:

تصویر دستور ساخت پروژه

ساختار فایل پایه پروژه به شکل زیر خواهد بود:

1dockertest  
2|  
3|-- dockertest  
4|    |-- __init__.py  
5|    |-- asgi.py  
6|    |-- settings.py  
7|    |-- urls.py  
8|    |-- wsgi.py  
9|  
10|-- manage.py  
11|-- db.sqlite3

حالا به فولدر اصلی dockertest در ترمینال (CMD یا Bash) بروید، به صورتی که مسیر به شکل زیر باشد:
تصویر تغییر مسیر

برای بررسی اینکه برنامه درست کار می‌کند، دستور زیر را اجرا کنید:

تصویر اجرای سرور

در مرورگر صفحه‌ی پیش‌فرض Django را خواهید دید:
تصویر صفحه پیش‌فرض Django

اگر این صفحه را می‌بینید، یعنی پروژه Django به درستی ساخته شده است.


گام 2: ساخت فایل requirements.txt

فایل requirements.txt مشخص می‌کند که پروژه به چه کتابخانه‌ها و وابستگی‌هایی نیاز دارد. برای ایجاد این فایل، دستورات زیر را اجرا کنید:

تصویر ساخت requirements.txt

حالا ساختار فایل‌ها به شکل زیر است:

1dockertest  
2|  
3|-- dockertest  
4|    |-- __init__.py  
5|    |-- asgi.py  
6|    |-- settings.py  
7|    |-- urls.py  
8|    |-- wsgi.py  
9|  
10|-- manage.py  
11|-- db.sqlite3  
12|-- requirements.txt

گام 3: داکریزه کردن پروژه

دو روش برای داکریزه کردن پروژه Django وجود دارد: استفاده صرف از Dockerfile، و استفاده از Docker Compose.

روش A: فقط Dockerfile

این روش برای پروژه‌های کوچک مناسب است. ابتدا یک فایل Dockerfile بسازید تا مراحل ساخت ایمیج داکر مشخص شود، ساختار فایل‌ها اینطور خواهد بود:

1dockertest  
2|  
3|-- dockertest  
4|    |-- __init__.py  
5|    |-- asgi.py  
6|    |-- settings.py  
7|    |-- urls.py  
8|    |-- wsgi.py  
9|  
10|-- manage.py  
11|-- db.sqlite3  
12|-- requirements.txt  
13|-- Dockerfile

محتوای Dockerfile را به صورت زیر اعمال کنید:

محتوای Dockerfile

شرح دستورات:

  • پایه تصویر، python:3.8-slim-buster است که یک ایمیج سبک Python بر پایه Debian Buster است. شما می‌توانید از ایمیج‌های دیگر موجود در Docker Hub استفاده کنید.
  • دایرکتوری کاری (WORKDIR) روی /app تنظیم شده است؛ این یعنی تمام دستورات بعدی در این پوشه اجرا می‌شوند.
  • خط COPY requirements.txt . فایل requirements.txt را از میزبان به پوشه کاری داخل ایمیج کپی می‌کند.
  • خط RUN pip install -r requirements.txt وابستگی‌های پایتون را نصب می‌کند.
  • خط COPY . . تمام فایل‌های پروژه Django را از دایرکتوری میزبان به دایرکتوری کاری در ایمیج کپی می‌کند.
  • در نهایت، CMD ["python3", "manage.py", "runserver", "0.0.0.0:8000"] فرمان اجرای سرور Django را تعیین می‌کند.

روش B: استفاده از Docker Compose

برای برنامه‌های بزرگ‌تر و پیچیده‌تر که چند سرویس دارند بهتر است از Docker Compose استفاده کنیم.

ابتدا فایلی با نام docker-compose.yml بسازید و ساختار دایرکتوری شما به شکل زیر در می‌آید:

1dockertest  
2|  
3|-- dockertest  
4|    |-- __init__.py  
5|    |-- asgi.py  
6|    |-- settings.py  
7|    |-- urls.py  
8|    |-- wsgi.py  
9|  
10|-- manage.py  
11|-- db.sqlite3  
12|-- requirements.txt  
13|-- Dockerfile  
14|-- docker-compose.yml

محتوای docker-compose.yml:

محتوای docker-compose.yml

شرح موارد فایل:

  • version: نسخه فرمت فایل Docker Compose را مشخص می‌کند. Docker Compose از این برای تفسیر بقیه فایل استفاده می‌کند.
  • در بخش services: یک سرویس با نام myapp تعریف شده است:
    • این سرویس با استفاده از فایل Dockerfile ساخته می‌شود.
    • دایرکتوری جاری (.) به عنوان volume به داخل کانتینر متصل می‌شود.
    • پورت 8000 میزبان به پورت 8000 کانتینر نگاشته می‌شود.
    • نام image و کانتینر به ترتیب docker_image_1 و docker_container_1 است.
    • فرمان اجرای سرویس، اجرای python manage.py runserver 0.0.0.0:8000 است.

گام 4: اجرای پروژه داکریزه شده Django

بعد از داکریزه کردن پروژه، می‌توانید به کمک دستورات زیر کانتینرها و ایمیج‌ها را اجرا و مدیریت کنید.


مفهوم Volume در Docker برای تغییرات لحظه‌ای

یک مشکل Docker این است که تغییرات اعمال شده روی فایل‌های روی سیستم میزبان (Local) به طور خودکار در کانتینر دیده نمی‌شود مگر اینکه کانتینر دوباره ساخته شود. این یعنی اگر کد منبع را روی لوکال تغییر دهید باید کانتینر را دوباره بسازید که زمان‌بر و نامناسب است.

برای رفع این مشکل، volumeها را می‌توان به صورت mount کرد تا دایرکتوری میزبان به داخل کانتینر وصل شود. با این روش، تغییرات به صورت Real-time در کانتینر قابل مشاهده است و نیازی به بازسازی مجدد ایمیج نیست.


روش A: اجرای توسط Dockerfile

  1. ایمیج داکر را بسازید (مثال با نام MyDockerImage):
1docker build -t MyDockerImage .

-t برای نام دادن به ایمیج است. . محل Dockerfile را مشخص می‌کند.

  1. کانتینر را اجرا کنید همراه با mount volume و نگاشت پورت:
1docker run -it --rm -p 8080:8000 -v $(pwd):/app MyDockerImage

شرح پارامترها:

  • -it: اجرای ترمینال تعاملی در کانتینر
  • --rm: حذف کانتینر پس از توقف
  • -p 8080:8000: نگاشت پورت ۸۰۸۰ میزبان به پورت ۸۰۰۰ کانتینر
  • -v $(pwd):/app: اتصال دایرکتوری جاری میزبان به /app در کانتینر (برای اعمال تغییرات Real-time)
  • MyDockerImage: نام ایمیج ساخته شده

اگر در ویندوز هستید، به جای $(pwd) از %cd% استفاده کنید.


روش B: استفاده از Docker Compose

  1. برای ساختن ایمیج‌ها، فرمان زیر را اجرا کنید:
1docker-compose build

این فقط ایمیج‌ها را می‌سازد ولی کانتینرها را اجرا نمی‌کند.

  1. برای اجرای کانتینرها از دستور زیر استفاده کنید:
1docker-compose up

این دستور کانتینرها را اجرا می‌کند و برنامه شما را بالا می‌آورد.


چند دستور مفید Docker

  • docker images: لیست تمام ایمیج‌های داکر موجود روی سیستم
  • docker run -it Image_Name bash: اجرای یک امیج و باز کردن ترمینال bash داخل کانتینر
  • docker rm: حذف کانتینر(های) مشخص شده
  • docker rmi: حذف ایمیج(های) داکر مشخص شده
  • docker ps -a: لیست همه کانتینرهای داکر (هم جاری و هم متوقف شده)

برای دیدن کل کد پروژه می‌توانید به گیت‌هاب مراجعه کنید:

https://github.com/Sudhanshu1304/Dockerizing-Django-Application


جمع‌بندی

تبریک می‌گویم که این آموزش داکریزه کردن پروژه Django را به پایان رساندید! با انجام مراحل بالا، شما موفق شدید پروژه Django خود را با Docker اجرا کنید.

امیدوارم این آموزش برایتان مفید و آموزنده بوده باشد. لطفاً اگر دوست داشتید با یک 👏 تشویق کنید و من را در Medium فالو کنید.

سپاس که این آموزش را خواندید!

داکر
جنگو

۰


نظرات


author
نویسنده مقاله: علی رحمانی

کد با می متعهد است که بالاترین سطح کیفی آموزش را در اختیار شما بگذارد. هدف به اشتراک گذاشتن دانش فناوری اطلاعات و توسعه نرم افزار در بالاترین سطح ممکن برای درستیابی به جامعه ای توانمند و قدرتمند است. ما باور داریم هر کسی میتواند با استمرار در یادگیری برنامه نویسی چالش های خود و جهان پیرامون خود را بر طرف کند و به موفقیت های چشم گیر برسد. با ما در این مسیر همراه باشید. کد با می اجتماع حرفه ای برنامه نویسان ایرانی.

تمام حقوق این سایت متعلق به وبسایتcodebymeمیباشد.