نحوه ایجاد ایمیج (Docker Image) داکر برای کد Django

در این مقاله به بررسی نحوه ایجاد ایمیج داکر برای کد Django می پردازیم.

توجه: در این مقاله از Ubuntu server 16.04 و python 2.7 استفاده شده است.

توجه: انتظار می رود که خواننده آشنایی اولیه با Django و python و Docker داشته باشد.

مقاله: نصب فریم‌ورک Django بر روی Ubuntu 18.04

ایجاد پروژه Django

برای ایجاد ایمیج داکر ابتدا باید نحوه ایجاد یک پروژه Django را یاد بگیریم. برای ایجاد یک پروژه مراحل زیر باید طی شود.

1. ایجاد دایرکتوری پروژه:

mkdir project
cd project

2. ایجاد فایل نیازمندی های پروژه:

فایل نیازمندی ها یا requierments.txt شامل پکیج های مورد نیاز برای ایجاد پروژه Django شما می باشد و برای هر پروژه متفاوت است. این فایل را در دایرکتوری پروژه خود ایجاد نمایید.

3. نصب نیازمندی ها:

با استفاده از دستور زیر پکیج ها را نصب کنید.

pip install –r requierments.txt

4. ایجاد یک پروژه اولیه Django

در این مقاله با استفاده از دستور زیر یک پروژه اولیه Django ایجاد می کنیم.

django-admin startproject helloworld

5. اجرای پروژه Django توسط python:

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

cd helloworld
python manage.py runserver 0.0.0.0:8000

پس از انجام مراحل زیر می توانید توسط آدرس IP سیستم خود و پورت 8000 به پروژه Django ایجاد شده دسترسی داشته باشید.

ایجاد ایمیج داکر

توجه داشته باشید که این پروژه یک مثال جهت توضیح بهتر نحوه ایجاد ایمیج داکر است و پروژه شما با این پروژه متفاوت خواهد بود.

برای ایجاد ایمیج داکر ابتدا باید با نحوه اجرای پروژه مورد نظر به صورت عادی بر روی یک سرور میزبان داکر آشنایی کامل داشت، چراکه نحوه اجرای پروژه بر روی نحوه ایجاد ایمیج داکر تاثیر بسزایی دارد. مثلا متغیرهای محیطی یاenvironment variable  ها برای هر پروزه متفاوت است و این موضوع در ایجاد ایمیج داکر موثر خواهد بود.

یک ایمیج داکر از لایه های مختلفی تشکیل شده است که این لایه ها به دلخواه توسط ما در یک فایل مشخص می شوند. در دایرکتوری پروژه ایجاد شده یک فایل به نام Dockerfile ایجاد نمایید. دقت کنید که نام فایل ایجاد شده باید حتما نام ذکر شده باشد. پس از ایجاد فایل خطوط زیر را به آن اضافه کنید.

FROM python:2.7
COPY . .
EXPOSE 8000
RUN pip install –r requirements.txt
CMD python manage.py runserver 0.0.0.0:8000

ایمیج داکر ما از 5 لایه تشکیل شده است (تعداد خطوط فایل Dockerfile)

بررسی خطوط نوشته شده در فایل:

تمامی عبارات کلیدی به حروف بزرگ نوشته می شوند.

اولین خط فایل که با عبارت کلیدی FROM شروع می شود لایه اول و پایه ای ایمیج خواهد بود. با توجه به اینکه Django بر اساس پایتون بنا شده است از ایمیج پایه python:2.7 استفاده شده است. در صورتی که پروژه شما بر اساس نسخه دیگری از پایتون باشد باید این خط را مطابق نسخه خود تغییر دهید.

ایمیج پایه python:2.7 به صورت خودکار از ریپوزیتوری Docker-hub دانلود خواهد شد. در صورتی که سرور میزبان داکر در ایران قرار دارد باید از فیلتر شکن برای نصب داکر و ساختن ایمیج استفاده نمایید.

توجه داشته باشید که در صورت وجود ایمیج بر روی سرور نیازی به فیلتر شکن نیست چراکه Docker به صورت هوشمندانه از ایمیج موجود استفاده خواهد کرد اما در صورتی که برای بار اول می خواهید از این ایمیج یا هر ایمیج دیگری استفاده کنید باید از ریپوزیتوری Docker-hub   استفاده نمایید.

خط دوم برای انتقال فایل های پروژه به ایمیج نوشته شده است. دقت نمایید که سمبل نقطه در لینوکس به دایرکتوری که در آن قرار داریم اشاره می کند. با توجه به اینکه فایل Dockerfile در دایرکتوری پروژه قرار دارد این دستور موجب کپی فایل های پروژه به ایمیج ما می شود.

دستور سوم جهت باز کردن پورت 8000 ایمیج داکر نوشته شده است. برای دسترسی به برنامه ای که در قالب یک ایمیج داکر ارائه می شود از پورت ها استفاده می کنیم. از آنجا که ما برنامه خود را روی پورت 8000 اجرا کرده ایم (خط آخر 0.0.0.0:8000) باید دسترسی به این پورت را فراهم آوریم.

در خط بعد دستور RUN را مشاهده می کنید. برای نصب نیازمندی های پروژه در قسمت های قبلی از دستور pip install –r requirements.txt استفاده کردیم، بنابراین برای اجرای درست پروژه باید نیازمندی ها در ایمیج داکر نصب شوند. برای انجام این کار دستور مورد نظر خود را پس از عبارت کلیدی RUN قرار می دهیم.

در خط آخر، دستور اجرای پروژه را پس از عبارت کلیدی CMD قرار می دهیم. شاید برای شما سوال پیش بیاید که چرا دستور خط چهارم توسط  عبارت کلیدی RUN و دستور خط پنجم توسط عبارت کلیدی CMD اجرا شدند. تفاوت میان RUN و CMD در زمان اجرای آن ها می باشد. دستور RUN تنها در زمان ایجاد ایمیج اجرا می شود اما دستور CMD هر مرتبه که پروسه ایجاد شده توسط ایمیج، ریستارت شود اجرا خواهد شد. پروسه ایجاد شده توسط ایمیج را مانند یک سیستم عامل در نظر بگیرید. در صورتی که بخواهید پروژه خود را بر روی یک سیستم عامل به صورت عادی اجرا کنید تنها یک مرتبه باید نیازمندی ها را نصب کنید اما در صورتی که سیستم عامل ریستارت شود دستور اجرای پروژه (python manage.py runserver 0.0.0.0:8000) باید مجددا اجرا شود.

در ادامه با استفاده از دستور زیر ایمیج خود را می سازیم.

docker build -f Dockerfile . 

این دستور ایمیج داکر ما را ایجاد خواهد کرد. به سمبل نقطه در انتهای دستور دقت نمایید. با توجه به اینکه فایل Dockerfile در دایرکتوری پروژه ما قرار دارد از این سمبل استفاده کرده ایم. در صورتی که فایل Dockerfile در دایرکتوری دیگری قرار دارد به جای سمبل نقطه باید آدرس دایرکتوری پروژه را به جای سمبل نقطه در دستور قرار دهید. همچنین این موضوع باید در دستور COPY در فایل Dockerfile مدنظر قرار گیرد.

خروجی دستور ذکر شده به صورت زیر است.

در مرحله اول ایمیج Python:2.7 دانلود خواهد شد.


دقت نمایید که در انتهای خروجی دستور ایجاد ایمیج، شناسه ایمیج چاپ خواهد شد.

Successfully built b3674fd70afb

این شناسه برای هر ایمیج متفاوت است. با استفاده از این شناسه و دستور زیر می توانید نام ایمیج را مشخص کنید و یا آن را اجرا کنید. برای نام گذاری ایمیج از دستور زیر استفاده کنید.

docker tag b3674fd70afb django-test:v1

تگ هر ایمیج از 2 قسمت نام و نسخه تشکیل می شود که در اینجا نام آن Django-test و نسخه آن v1 است.

می توانید با استفاده از دستور docker images، ایمیج های موجود بر سرور به همراه شناسه آن ها را مشاهده کنید.

برای اجرای ایمیج از دستور زیر استفاده می کنیم.

docker run -p 8000:8000 django-test:v1

این دستور علاوه بر اجرای ایمیج، پورت 8000 سرور میزبان را به پورت 8000 پروسه ایجاد شده توسط ایمیج متصل می کند. حال شما می توانید توسط آدرس IP سیستم خود و پورت 8000 به پروژه Django ایجاد شده دسترسی داشته باشید. دقت نمایید که می توانید هر پورت دلخواه از سرور میزبان را به شرط باز بودن پورت استفاده نمایید، اما پورت پروسه ایجاد شده توسط داکر باید 8000 باشد چراکه در Dockerfile این پورت باز شده است و ارتباط با پورت های دیگر ناموفق خواهد بود.

چگونه پروسه را متوقف کنیم؟

با استفاده از دستور docker ps پروسه مورد نظر و شناسه آن را بدست آورید، سپس با استفاده از دستور زیر پروسه را متوقف کنید.

Docker stop {شناسه پروسه}

با دستور زیر می توانید پروسه را برای همیشه حذف کنید (پروسه باید ابتدا متوقف شود).

Docker rm {شناسه پروسه}

برای پاک کردن ایمیج پس از پاک کردن پروسه از دستور زیر استفاده کنید.

Docker rmi {شناسه ایمیج}

برای اجرای پروژه Django خود در داکر چگونه عمل کنم؟

با توجه به اینکه ایمیج ارائه شده در این مقاله بر پایه پروژه اولیه helloworld ایجاد شد و این پروژه کاربردی نیست در ادامه به 2 نکته که برای اجرای پروژه کاربردی خود در داکر که باید به آنها توجه کنید، می پردازیم.

  1. مراحل اجرای پروژه خود را در صورتی که می خواهید آن را در یک سیستم عادی پیاده سازی کنید مدنظر داشته باشید.

    ما برای ایجاد ایمیج داکر پروژه نمونه خود همان مراحلی که برای اجرای آن طی کردیم، در فایل Dockerfile، مدنظر قرار دادیم. پروژه کاربردی شما قطعا دارای مراحل بیشتری خواهد بود (مسائلی مانند پایگاه داده، ایجاد migration ها و یا متغیر های محلی و …) که باید در ایجاد Dockerfile مدنظر قرار داده شوند.

  2. ایمیج پایه خود را بر اساس پروژه مشخص کنید.

    در صورتی که پروژه شما از قسمت های مختلفی تشکیل شده که تمامی آنها بر اساس پایتون یا جانگو نیستند، باید ایمیج پایه خود را بر اساس این نیازمندی ها مشخص کنید مثلا در صورتی که پروژه شما وابسته به سیستم عامل است می توانید از ایمیج پایه Ubuntu یا nanoserver استفاده نمایید.

  3. دستورات اجرایی در Dockerfile را بر اساس سیستم عامل انتخاب کنید.

    در فایل Dockerfile ارائه شده در این مقاله ما از دستوراتی مانند pip و یا python استفاده کردیم. دلیل این موضوع استفاده از ایمیج پایه python:2.7 بود. در صورتی که می خواستیم دستوری مانند apt-get را استفاده کنیم باید از ایمیج پایه Ubuntu استفاده می کردیم، بنابراین ایمیج پایه انتخابی ما بر دستوراتی که پس از عبارات کلیدی RUN یا CMD قرار می گیرند تاثیر دارند.

برچسب‌ها::