فلسک (flask) یک میکرو وب فریم ورک سبک و سریع برای زبان برنامه نویسی پایتون (python) است. از flask بیشتر به عنوان یک api service استفاده می شود. از آنجایی که flask یک میکرو وب فریم ورک است بسیاری از قابلیت های نگاشت شی گرایی ، اعتبار سنجی فرم ها و دیگر ویژگی هایی که در فریم ورک های بزرگ تر مانند جنگو یافت می شوند را ندارد اما در عوض امکان توسعه و گسترش آن توسط افزونه های طرف سوم را دارد.
داکر (docker) امکانی را فراهم کرده است که برنامه ها به صورت مجزا در محیطی ایزوله به نام کانتینر (container) راه اندازی شوند. container این امکان را برای توسعه دهندگان فراهم می کند تا یک برنامه را با تمام کتابخانه های وابسته آن به صورت یک پکیج واحد در آورده تا آن را در هر پلتفرم و سیستم عاملی بدون مشکل و به صورت یکسان اجرا شود.
یک فایل پایتون (فرمت .py) به نام hello.py می سازیم و کد زیر را در آن وارد می کنیم:
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello, World!'
اکنون با وارد کردن دستور flask run باید برنامه flask اجرا شود.
اوه به خطا خوردیم. نگران نباشید :) قبل از دستور run باید به flask ، فایل پایتون خودمان را معرفی کنیم.
set FLASK_APP=hello.py
2. درسیستم عامل ویندوز بر روی PowerShell:
$env:FLASK_APP = "hello.py"
3. در سیستم عامل لینوکس ubuntu:
export FLASK_APP=hello.py
پس از معرفی کردن فایل پایتون به flask حالا برنامه باید بدون خطا اجرا بشود:
حال flask در حال اجرا است و آدرس 127.0.0.1:5000 که مخصوص لوکال هاست می باشد به صورت اتومات برای برنامه flask در دسترس قرار گرفته است.
با مروگر اینترنت آدرس 127.0.0.1:5000 را باز می کنیم و طبق کدی که در hello.py زدیم باید عبارت hello world برگرداند:
حال میخواهیم flask را در یک container داکر اجرا کنیم. در ابتدا باید یک container بسازیم. هر container از یک image ساخته می شود. در سایت رسمی داکر هاب می توانید انواع مختلف image ها را ببینید و با استفاده از دستور pull (مانند دستورات git) ، فایل image را در سیستم عامل خود دریافت کنید و با استفاده از آن container خود را بسازید.
از آنجایی که از flask استفاده می کنیم و flask نیز با زبان python نوشته شده است پس ما نیاز به image پایتون داریم. image رسمی پایتون در سایت داکر هاب موجود و شامل نسخه های بسیاری است.
هر نسخه از image python دارای یک tag می باشد. سه tag از image های پایتون بیشترین استفاده دارد.
با استفاده از دستور زیر image پایتون نسخه slim-buster را دریافت می کنیم:
docker pull python:slim-buster
نکته: برای دریافت image ها نیاز به تغییر ip دارین. پیشنهاد من استفاده از شکن برای دور زدن تحریم ها است.
پس از دریافت image می توانید با دستور docker images آن را مشاهده کنید.
اما حتی این image هم نمی تواند برنامه flask ما را اجرا کند! چون نه کتابخانه flask را در خود دارد و نه می داند که برای اجرای flask باید چه دستوری وارد کند. پس ما باید یک image مخصوص برنامه ی flask خودمان بسازیم. برای اینکار از Dockerfile استفاده می کنند.
مستندات Dockerfile را می توانید در سایت داکر مشاهده کنید.
یک فایل Dockerfile می سازیم و کد های زیر را در آن وارد می کنیم:
FROM python:slim-buster RUN pip install flask --upgrade COPY hello.py . CMD export FLASK_APP=hello.py && flask run --host 0.0.0.0
حال باید از داکر بخواهیم که یک image اختصاصی با توجه به Dockerfile ما برامون بسازه و اسم این image را flask-app بزاره:
docker build -t flask-app .
پس از ساخت image می توانید با دستور docker images آن را مشاهده کنید.
حال از داکر می خواهیم که بر اساس image اختصاصی خودمون یک container برای ما بسازه و پورت 5000 container را به سیستم عامل متصل کند.
docker run -p 5000:5000 -d flask-app
پس از ساخت container می توانید با دستور docker container ls آن را مشاهده کنید.
با مروگر اینترنت آدرس 127.0.0.1:5000 را باز می کنیم. این آدرس به container در آدرس 0.0.0.0:5000 متصل است و باعث می شود عبارت hello world از flask که در درون container است به مرورگر ما ارسال شود.