خب بعد از نصب داکر میرسیم به بخش استفاده از اون، در این آموزش من از docker cli استفاده میکنم و سمت نسخه دسکتاپ نمیرم(اگه نصبش نکردین میتونین پارت قبل آموزش رو از در لینک زیر مطالعه کنید)
در این آموزش قرار هست که یک پروژه flask رو داکرایز کنیم که یعنی به شکل یک بسته داکر درش بیاریم...
اول میریم سراغ برنامه فلسک که میتونین یک فولدر درست کنین و کد زیر رو درون app.py پیست کنین:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
return "<body style='height: 90%; text-align:center; display:table; width:100%;'><h1 style='display:table-cell; vertical-align:middle'>curlyBracket!</h1></body>"
کد بالا یک برنامه فلسک خیلی ساده هست که متن !curlyBracket رو وسط مرورگر نمایش میده، حالا در حالت عادی واسه ران کردنش باید از دستور های زیر استفاده کنیم:
FLASK_APP=app.py python3 -m flask run
اما حالا که میخوایم ببریمش داخل داکر دیگه نمیتونیم خودمون اینا رو اجرا کنیم و داکر باید این ها رو به صورت اتومات انجام بده،حالا باید فایل Dockerfile رو ایجاد کنیم در همون شاخه تا داکر بتونه کار هایی که باید انجام بده رو به صورت لیست در اختیار داشته باشه و یکی یکی انجامشون بده، خب Dockerfile ما به این صورت میشه:
# syntax=docker/dockerfile:1 FROM python:3.7-alpine WORKDIR /code ENV FLASK_APP=app.py ENV FLASK_RUN_HOST=0.0.0.0 RUN apk add --no-cache gcc musl-dev linux-headers RUN pip install flask EXPOSE 5000 COPY . . CMD ["python3", "-m", "flask", "run"]
کار هایی که داره انجام میشه به این شکله:
تعریف میکنیم که ایمیج baseمون پایتون 3.7 هست که میاد یک سیستم عامل با python3.7 رو شبیه سازی میکنه(در واقع ایمیجش رو دانلود میکنه و رانش میکنه)
مثل دستور cd عمل میکنه و دایرکتوری دستوراتی که انجام میدیم رو به code عوض میکنه
متغیر محیطی FLASK_APP که بالاتر اشاره شد رو ست میکنه(گفتیم که واسه ران کردن اپ فلسک نیازه)
متغیر محلی FLASK_RUN_HOST به برنامه میگه که در چه آیپیای باید ران بشه که خب لوکالمون هست و به سیستم اصلی اشاره داره
در اینجا پیشنیاز های برنامه رو نصب میکنیم
پورت 5000 فروارد میشه به سیستم اصلی
کد ها و پوشه های موجود در دایرکتوری که هستیم رو میریزه تو اون code/ی که قبلا cd کردیم داخلش
دستوری python3 -m flask run رو ست میکنه واسه ران کردن ایمیج که باعث میشه برناممون ران بشه
قدم بعدی ساخت فایل docker-compose.yml هست که در اون سرویس های مورد نیازمون رو اضافه میکنیم که در اینجا ما صرفا از وب استفاده میکنیم و داریم پورت رو فروارد میکنیم:
version: "3.9" services: web: build: . ports: - "8000:5000"
کاری که انجام میده اینه که یک ایمیج ساخته شده به نام web رو استفاده میکنه و میاد پورت 8000 رو share میکنه بین سیستم اصلی و سیستم شبیهسازی شده درون داکر تا بتونیم به اون برنامهای که در پورت داخلی سیستم درون داکر بالا اومده وصل بشیم.
بعد از اینکه تنظیمات بالا رو انجام دادیم میتونیم به راحتی با دستور:
sudo docker-compose up
پروژمون رو داکرایز کنیم که خروجیش به این صورت خواهد بود:
که خب اگر به لاگش دقت کنید میتونین ببینین که یکی یکی دستورات درون Dockerfile رو ران میکنه(اگه از سیستم عامل های arch-base استفاده میکنین نیازه که docker-compose رو نصب کنین: sudo pacman -S docker-compose)
و خب الان برنامه ما ران شده و میتونیم از طریق آیپی و پورتی که در لاگش نوشته واردش بشیم:
و خب کلیت موضوع به همین شکله صرفا کانفیگ های متفاوت و پیچیدهتری داریم که خب خیلی هم سخت نیست چون میشه از داکیومنت خود داکر کمک گرفت، امیدوارم مورد پسندتون واقع شده باشه و فعلا☘️
نویسنده: محمد میرآب
اینستاگرام: curlybracket_ir
تلگرام: @curlybracket
منبع: https://docs.docker.com/compose/gettingstarted/