۰
Docker یکی از ابزارهای محبوب کانتینرسازی است که به شما امکان میدهد برنامهها و وابستگیهای آنها را در کانتینرهای سبک و قابل حمل بستهبندی کنید. Docker اجرا و توسعه برنامهها را در محیطی یکنواخت، صرفنظر از سیستمعامل میزبان، آسان میکند.
بیایید ببینیم در این راهنما چه مواردی یاد میگیریم:
ابتدا یک پروژه 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 به درستی ساخته شده است.
فایل 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
دو روش برای داکریزه کردن پروژه Django وجود دارد: استفاده صرف از Dockerfile، و استفاده از Docker Compose.
این روش برای پروژههای کوچک مناسب است. ابتدا یک فایل 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 را به صورت زیر اعمال کنید:
شرح دستورات:
python:3.8-slim-buster
است که یک ایمیج سبک Python بر پایه Debian Buster است. شما میتوانید از ایمیجهای دیگر موجود در Docker Hub استفاده کنید./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 را تعیین میکند.برای برنامههای بزرگتر و پیچیدهتر که چند سرویس دارند بهتر است از 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
:
شرح موارد فایل:
version
: نسخه فرمت فایل Docker Compose را مشخص میکند. Docker Compose از این برای تفسیر بقیه فایل استفاده میکند.services
: یک سرویس با نام myapp
تعریف شده است:
Dockerfile
ساخته میشود.docker_image_1
و docker_container_1
است.python manage.py runserver 0.0.0.0:8000
است.بعد از داکریزه کردن پروژه، میتوانید به کمک دستورات زیر کانتینرها و ایمیجها را اجرا و مدیریت کنید.
یک مشکل Docker این است که تغییرات اعمال شده روی فایلهای روی سیستم میزبان (Local) به طور خودکار در کانتینر دیده نمیشود مگر اینکه کانتینر دوباره ساخته شود. این یعنی اگر کد منبع را روی لوکال تغییر دهید باید کانتینر را دوباره بسازید که زمانبر و نامناسب است.
برای رفع این مشکل، volumeها را میتوان به صورت mount کرد تا دایرکتوری میزبان به داخل کانتینر وصل شود. با این روش، تغییرات به صورت Real-time در کانتینر قابل مشاهده است و نیازی به بازسازی مجدد ایمیج نیست.
1docker build -t MyDockerImage .
-t
برای نام دادن به ایمیج است. .
محل Dockerfile را مشخص میکند.
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%
استفاده کنید.
1docker-compose build
این فقط ایمیجها را میسازد ولی کانتینرها را اجرا نمیکند.
1docker-compose up
این دستور کانتینرها را اجرا میکند و برنامه شما را بالا میآورد.
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 فالو کنید.
سپاس که این آموزش را خواندید!
۰
کد با می متعهد است که بالاترین سطح کیفی آموزش را در اختیار شما بگذارد. هدف به اشتراک گذاشتن دانش فناوری اطلاعات و توسعه نرم افزار در بالاترین سطح ممکن برای درستیابی به جامعه ای توانمند و قدرتمند است. ما باور داریم هر کسی میتواند با استمرار در یادگیری برنامه نویسی چالش های خود و جهان پیرامون خود را بر طرف کند و به موفقیت های چشم گیر برسد. با ما در این مسیر همراه باشید. کد با می اجتماع حرفه ای برنامه نویسان ایرانی.